<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>FreeTDS API: /usr/local/users/home/jklowden/projects/releases/freetds/0.82/include/tds.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.4.1 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="pages.html">Related Pages</a></div> <div class="nav"> <a class="el" href="dir_000000.html">include</a></div> <h1>tds.h</h1><a href="a00163.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* FreeTDS - Library of routines accessing Sybase and Microsoft databases</span> 00002 <span class="comment"> * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Brian Bruns</span> 00003 <span class="comment"> *</span> 00004 <span class="comment"> * This library is free software; you can redistribute it and/or</span> 00005 <span class="comment"> * modify it under the terms of the GNU Library General Public</span> 00006 <span class="comment"> * License as published by the Free Software Foundation; either</span> 00007 <span class="comment"> * version 2 of the License, or (at your option) any later version.</span> 00008 <span class="comment"> *</span> 00009 <span class="comment"> * This library is distributed in the hope that it will be useful,</span> 00010 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> 00011 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> 00012 <span class="comment"> * Library General Public License for more details.</span> 00013 <span class="comment"> *</span> 00014 <span class="comment"> * You should have received a copy of the GNU Library General Public</span> 00015 <span class="comment"> * License along with this library; if not, write to the</span> 00016 <span class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330,</span> 00017 <span class="comment"> * Boston, MA 02111-1307, USA.</span> 00018 <span class="comment"> */</span> 00019 00020 <span class="preprocessor">#ifndef _tds_h_</span> 00021 <span class="preprocessor"></span><span class="preprocessor">#define _tds_h_</span> 00022 <span class="preprocessor"></span> 00023 <span class="comment">/* $Id: tds.h,v 1.284 2007/12/27 13:45:22 freddy77 Exp $ */</span> 00024 00025 <span class="preprocessor">#include <stdarg.h></span> 00026 <span class="preprocessor">#include <stdio.h></span> 00027 <span class="preprocessor">#include <time.h></span> 00028 00029 <span class="comment">/* forward declaration */</span> 00030 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsiconvinfo TDSICONV; 00031 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00144.html">tds_socket</a> TDSSOCKET; 00032 00033 <span class="preprocessor">#include "tdsver.h"</span> 00034 <span class="preprocessor">#include "tds_sysdep_public.h"</span> 00035 <span class="preprocessor">#ifdef _FREETDS_LIBRARY_SOURCE</span> 00036 <span class="preprocessor"></span><span class="preprocessor">#include "tds_sysdep_private.h"</span> 00037 <span class="preprocessor">#endif </span><span class="comment">/* _FREETDS_LIBRARY_SOURCE */</span> 00038 00039 <span class="preprocessor">#ifdef __cplusplus</span> 00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> 00041 { 00042 <span class="preprocessor">#if 0</span> 00043 <span class="preprocessor"></span>} 00044 <span class="preprocessor">#endif</span> 00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span> 00046 <span class="preprocessor"></span> <a name="l00052"></a><a class="code" href="a00134.html">00052</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00134.html">_tds_compiletime_settings</a> 00053 { 00054 <span class="keyword">const</span> <span class="keywordtype">char</span> *freetds_version; <span class="comment">/* release version of FreeTDS */</span> 00055 <span class="keyword">const</span> <span class="keywordtype">char</span> *sysconfdir; <span class="comment">/* location of freetds.conf */</span> 00056 <span class="keyword">const</span> <span class="keywordtype">char</span> *last_update; <span class="comment">/* latest software_version date among the modules */</span> 00057 <span class="keywordtype">int</span> msdblib; <span class="comment">/* for MS style dblib */</span> 00058 <span class="keywordtype">int</span> sybase_compat; <span class="comment">/* enable increased Open Client binary compatibility */</span> 00059 <span class="keywordtype">int</span> threadsafe; <span class="comment">/* compile for thread safety default=no */</span> 00060 <span class="keywordtype">int</span> libiconv; <span class="comment">/* search for libiconv in DIR/include and DIR/lib */</span> 00061 <span class="keyword">const</span> <span class="keywordtype">char</span> *tdsver; <span class="comment">/* TDS protocol version (4.2/4.6/5.0/7.0/8.0) 5.0 */</span> 00062 <span class="keywordtype">int</span> iodbc; <span class="comment">/* build odbc driver against iODBC in DIR */</span> 00063 <span class="keywordtype">int</span> unixodbc; <span class="comment">/* build odbc driver against unixODBC in DIR */</span> 00064 00065 } <a class="code" href="a00134.html">TDS_COMPILETIME_SETTINGS</a>; 00066 00067 <span class="keyword">struct </span>DSTR_STRUCT { 00068 <span class="keywordtype">char</span> *dstr_s; 00069 size_t dstr_size; 00070 }; 00071 <span class="keyword">typedef</span> <span class="keyword">struct </span>DSTR_STRUCT DSTR; 00072 00088 <span class="comment">/* </span> 00089 <span class="comment"> * All references to data that touch the wire should use the following typedefs. </span> 00090 <span class="comment"> *</span> 00091 <span class="comment"> * If you have problems on 64-bit machines and the code is </span> 00092 <span class="comment"> * using a native datatype, please change it to use</span> 00093 <span class="comment"> * these. (In the TDS layer only, the API layers have their</span> 00094 <span class="comment"> * own typedefs which equate to these).</span> 00095 <span class="comment"> */</span> 00096 <span class="keyword">typedef</span> <span class="keywordtype">char</span> TDS_CHAR; <span class="comment">/* 8-bit char */</span> 00097 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> TDS_UCHAR; <span class="comment">/* 8-bit uchar */</span> 00098 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> TDS_TINYINT; <span class="comment">/* 8-bit unsigned */</span> 00099 <span class="keyword">typedef</span> tds_sysdep_int16_type TDS_SMALLINT; <span class="comment">/* 16-bit int */</span> 00100 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> tds_sysdep_int16_type TDS_USMALLINT; <span class="comment">/* 16-bit unsigned */</span> 00101 <span class="keyword">typedef</span> tds_sysdep_int32_type TDS_INT; <span class="comment">/* 32-bit int */</span> 00102 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> tds_sysdep_int32_type TDS_UINT; <span class="comment">/* 32-bit unsigned */</span> 00103 <span class="keyword">typedef</span> tds_sysdep_real32_type TDS_REAL; <span class="comment">/* 32-bit real */</span> 00104 <span class="keyword">typedef</span> tds_sysdep_real64_type TDS_FLOAT; <span class="comment">/* 64-bit real */</span> 00105 <span class="keyword">typedef</span> tds_sysdep_int64_type TDS_INT8; <span class="comment">/* 64-bit integer */</span> 00106 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> tds_sysdep_int64_type TDS_UINT8; <span class="comment">/* 64-bit unsigned */</span> 00107 <span class="keyword">typedef</span> tds_sysdep_intptr_type TDS_INTPTR; 00108 00109 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsnumeric 00110 { 00111 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> precision; 00112 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> scale; 00113 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> array[33]; 00114 } TDS_NUMERIC; 00115 00116 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsoldmoney 00117 { 00118 TDS_INT mnyhigh; 00119 TDS_UINT mnylow; 00120 } TDS_OLD_MONEY; 00121 00122 <span class="keyword">typedef</span> <span class="keyword">union </span>tdsmoney 00123 { 00124 TDS_OLD_MONEY tdsoldmoney; 00125 TDS_INT8 mny; 00126 } TDS_MONEY; 00127 00128 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsmoney4 00129 { 00130 TDS_INT mny4; 00131 } TDS_MONEY4; 00132 00133 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsdatetime 00134 { 00135 TDS_INT dtdays; 00136 TDS_INT dttime; 00137 } TDS_DATETIME; 00138 00139 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsdatetime4 00140 { 00141 TDS_USMALLINT days; 00142 TDS_USMALLINT minutes; 00143 } TDS_DATETIME4; 00144 00145 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsvarbinary 00146 { 00147 TDS_SMALLINT len; 00148 TDS_CHAR array[256]; 00149 } TDS_VARBINARY; 00150 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsvarchar 00151 { 00152 TDS_INT len; 00153 TDS_CHAR array[256]; 00154 } TDS_VARCHAR; 00155 00156 <span class="keyword">typedef</span> <span class="keyword">struct </span>tdsunique 00157 { 00158 TDS_UINT Data1; 00159 TDS_USMALLINT Data2; 00160 TDS_USMALLINT Data3; 00161 TDS_UCHAR Data4[8]; 00162 } TDS_UNIQUE; 00163 <a name="l00165"></a><a class="code" href="a00145.html">00165</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00145.html">tdsdaterec</a> 00166 { <a name="l00167"></a><a class="code" href="a00145.html#o9">00167</a> TDS_INT <a class="code" href="a00145.html#o9">year</a>; <a name="l00168"></a><a class="code" href="a00145.html#o5">00168</a> TDS_INT <a class="code" href="a00145.html#o5">month</a>; <a name="l00169"></a><a class="code" href="a00145.html#o0">00169</a> TDS_INT <a class="code" href="a00145.html#o0">day</a>; <a name="l00170"></a><a class="code" href="a00145.html#o1">00170</a> TDS_INT <a class="code" href="a00145.html#o1">dayofyear</a>; <a name="l00171"></a><a class="code" href="a00145.html#o8">00171</a> TDS_INT <a class="code" href="a00145.html#o8">weekday</a>; <a name="l00172"></a><a class="code" href="a00145.html#o2">00172</a> TDS_INT <a class="code" href="a00145.html#o2">hour</a>; <a name="l00173"></a><a class="code" href="a00145.html#o4">00173</a> TDS_INT <a class="code" href="a00145.html#o4">minute</a>; <a name="l00174"></a><a class="code" href="a00145.html#o6">00174</a> TDS_INT <a class="code" href="a00145.html#o6">second</a>; <a name="l00175"></a><a class="code" href="a00145.html#o3">00175</a> TDS_INT <a class="code" href="a00145.html#o3">millisecond</a>; 00176 TDS_INT tzone; 00177 } <a class="code" href="a00145.html">TDSDATEREC</a>; 00178 00184 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">int</span> tds_numeric_bytes_per_prec[]; 00185 00186 <span class="preprocessor">#define TDS_SUCCEED 1</span> 00187 <span class="preprocessor"></span><span class="preprocessor">#define TDS_FAIL 0</span> 00188 <span class="preprocessor"></span><span class="preprocessor">#define TDS_NO_MORE_RESULTS 2</span> 00189 <span class="preprocessor"></span><span class="preprocessor">#define TDS_CANCELLED 3</span> 00190 <span class="preprocessor"></span> 00191 <span class="preprocessor">#define TDS_INT_CONTINUE 1</span> 00192 <span class="preprocessor"></span><span class="preprocessor">#define TDS_INT_CANCEL 2</span> 00193 <span class="preprocessor"></span><span class="preprocessor">#define TDS_INT_TIMEOUT 3</span> 00194 <span class="preprocessor"></span> 00195 00196 <span class="preprocessor">#define TDS_NO_COUNT -1</span> 00197 <span class="preprocessor"></span> 00198 <span class="preprocessor">#define TDS_ROW_RESULT 4040</span> 00199 <span class="preprocessor"></span><span class="preprocessor">#define TDS_PARAM_RESULT 4042</span> 00200 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STATUS_RESULT 4043</span> 00201 <span class="preprocessor"></span><span class="preprocessor">#define TDS_MSG_RESULT 4044</span> 00202 <span class="preprocessor"></span><span class="preprocessor">#define TDS_COMPUTE_RESULT 4045</span> 00203 <span class="preprocessor"></span><span class="preprocessor">#define TDS_CMD_DONE 4046</span> 00204 <span class="preprocessor"></span><span class="preprocessor">#define TDS_CMD_SUCCEED 4047</span> 00205 <span class="preprocessor"></span><span class="preprocessor">#define TDS_CMD_FAIL 4048</span> 00206 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ROWFMT_RESULT 4049</span> 00207 <span class="preprocessor"></span><span class="preprocessor">#define TDS_COMPUTEFMT_RESULT 4050</span> 00208 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DESCRIBE_RESULT 4051</span> 00209 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DONE_RESULT 4052</span> 00210 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DONEPROC_RESULT 4053</span> 00211 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DONEINPROC_RESULT 4054</span> 00212 <span class="preprocessor"></span><span class="preprocessor">#define TDS_OTHERS_RESULT 4055</span> 00213 <span class="preprocessor"></span> 00214 <span class="keyword">enum</span> tds_token_results 00215 { 00216 TDS_TOKEN_RES_OTHERS, 00217 TDS_TOKEN_RES_ROWFMT, 00218 TDS_TOKEN_RES_COMPUTEFMT, 00219 TDS_TOKEN_RES_PARAMFMT, 00220 TDS_TOKEN_RES_DONE, 00221 TDS_TOKEN_RES_ROW, 00222 TDS_TOKEN_RES_COMPUTE, 00223 TDS_TOKEN_RES_PROC, 00224 TDS_TOKEN_RES_MSG 00225 }; 00226 00227 <span class="preprocessor">#define TDS_TOKEN_FLAG(flag) TDS_RETURN_##flag = (1 << (TDS_TOKEN_RES_##flag*2)), TDS_STOPAT_##flag = (2 << (TDS_TOKEN_RES_##flag*2))</span> 00228 <span class="preprocessor"></span> 00229 <span class="keyword">enum</span> tds_token_flags 00230 { 00231 TDS_HANDLE_ALL = 0, 00232 TDS_TOKEN_FLAG(OTHERS), 00233 TDS_TOKEN_FLAG(ROWFMT), 00234 TDS_TOKEN_FLAG(COMPUTEFMT), 00235 TDS_TOKEN_FLAG(PARAMFMT), 00236 TDS_TOKEN_FLAG(DONE), 00237 TDS_TOKEN_FLAG(ROW), 00238 TDS_TOKEN_FLAG(COMPUTE), 00239 TDS_TOKEN_FLAG(PROC), 00240 TDS_TOKEN_FLAG(MSG), 00241 TDS_TOKEN_RESULTS = TDS_RETURN_ROWFMT|TDS_RETURN_COMPUTEFMT|TDS_RETURN_DONE|TDS_STOPAT_ROW|TDS_STOPAT_COMPUTE|TDS_RETURN_PROC, 00242 TDS_TOKEN_TRAILING = TDS_STOPAT_ROWFMT|TDS_STOPAT_COMPUTEFMT|TDS_STOPAT_ROW|TDS_STOPAT_COMPUTE|TDS_STOPAT_MSG|TDS_STOPAT_OTHERS 00243 }; 00244 <a name="l00248"></a><a class="code" href="a00163.html#a711">00248</a> <span class="keyword">enum</span> <a class="code" href="a00163.html#a711">tds_end</a> 00249 { 00250 <a class="code" href="a00163.html#a711a343">TDS_DONE_FINAL</a> = 0x00 00251 , <a class="code" href="a00163.html#a711a344">TDS_DONE_MORE_RESULTS</a> = 0x01 00252 , <a class="code" href="a00163.html#a711a345">TDS_DONE_ERROR</a> = 0x02 00253 , <a class="code" href="a00163.html#a711a346">TDS_DONE_INXACT</a> = 0x04 00254 , <a class="code" href="a00163.html#a711a347">TDS_DONE_PROC</a> = 0x08 00255 , <a class="code" href="a00163.html#a711a348">TDS_DONE_COUNT</a> = 0x10 00256 , <a class="code" href="a00163.html#a711a349">TDS_DONE_CANCELLED</a> = 0x20 00257 , TDS_DONE_EVENT = 0x40 <span class="comment">/* part of an event notification. */</span> 00258 , <a class="code" href="a00163.html#a711a351">TDS_DONE_SRVERROR</a> = 0x100 00260 <span class="comment">/* after the above flags, a TDS_DONE packet has a field describing the state of the transaction */</span> 00261 , TDS_DONE_NO_TRAN = 0 <span class="comment">/* No transaction in effect */</span> 00262 , TDS_DONE_TRAN_SUCCEED = 1 <span class="comment">/* Transaction completed successfully */</span> 00263 , TDS_DONE_TRAN_PROGRESS= 2 <span class="comment">/* Transaction in progress */</span> 00264 , TDS_DONE_STMT_ABORT = 3 <span class="comment">/* A statement aborted */</span> 00265 , TDS_DONE_TRAN_ABORT = 4 <span class="comment">/* Transaction aborted */</span> 00266 }; 00267 00268 00269 <span class="comment">/*</span> 00270 <span class="comment"> * TDSERRNO is emitted by libtds to the client library's error handler</span> 00271 <span class="comment"> * (which may in turn call the client's error handler).</span> 00272 <span class="comment"> * These match the db-lib msgno, because the same values have the same meaning</span> 00273 <span class="comment"> * in db-lib and ODBC. ct-lib maps them to ct-lib numbers (todo). </span> 00274 <span class="comment"> */</span> 00275 <span class="keyword">typedef</span> <span class="keyword">enum</span> { TDSEICONVIU = 2400, 00276 TDSEICONVAVAIL = 2401, 00277 TDSEICONVO = 2402, 00278 TDSEICONVI = 2403, 00279 TDSEICONV2BIG = 2404, 00280 TDSESYNC = 20001, 00281 TDSEFCON = 20002, 00282 TDSETIME = 20003, 00283 TDSEREAD = 20004, 00284 TDSEWRIT = 20006, 00285 TDSESOCK = 20008, 00286 TDSECONN = 20009, 00287 TDSEPWD = 20014, 00288 TDSESEOF = 20017, 00289 TDSERPND = 20019, 00290 TDSEBTOK = 20020, 00291 TDSEOOB = 20022, 00292 TDSECLOS = 20056, 00293 TDSEUSCT = 20058, 00294 TDSEUTDS = 20146, 00295 TDSEEUNR = 20185, 00296 TDSECAP = 20203, 00297 TDSENEG = 20210, 00298 TDSEUMSG = 20212, 00299 TDSECAPTYP = 20213, 00300 TDSECLOSEIN = 20292 00301 } TDSERRNO; 00302 00303 <span class="comment">/*</span> 00304 <span class="comment"> * TDS_ERROR indicates a successful processing, but that a TDS_ERROR_TOKEN or TDS_EED_TOKEN error was encountered. </span> 00305 <span class="comment"> * TDS_FAIL indicates an unrecoverable failure.</span> 00306 <span class="comment"> */</span> 00307 <span class="preprocessor">#define TDS_ERROR 3</span> 00308 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DONT_RETURN 42</span> 00309 <span class="preprocessor"></span> 00310 <span class="preprocessor">#define TDS5_PARAMFMT2_TOKEN 32 </span><span class="comment">/* 0x20 */</span> 00311 <span class="preprocessor">#define TDS_LANGUAGE_TOKEN 33 </span><span class="comment">/* 0x21 TDS 5.0 only */</span> 00312 <span class="preprocessor">#define TDS_ORDERBY2_TOKEN 34 </span><span class="comment">/* 0x22 */</span> 00313 <span class="preprocessor">#define TDS_ROWFMT2_TOKEN 97 </span><span class="comment">/* 0x61 TDS 5.0 only */</span> 00314 <span class="preprocessor">#define TDS_LOGOUT_TOKEN 113 </span><span class="comment">/* 0x71 TDS 5.0 only? ct_close() */</span> 00315 <span class="preprocessor">#define TDS_RETURNSTATUS_TOKEN 121 </span><span class="comment">/* 0x79 */</span> 00316 <span class="preprocessor">#define TDS_PROCID_TOKEN 124 </span><span class="comment">/* 0x7C TDS 4.2 only - TDS_PROCID */</span> 00317 <span class="preprocessor">#define TDS7_RESULT_TOKEN 129 </span><span class="comment">/* 0x81 TDS 7.0 only */</span> 00318 <span class="preprocessor">#define TDS7_COMPUTE_RESULT_TOKEN 136 </span><span class="comment">/* 0x88 TDS 7.0 only */</span> 00319 <span class="preprocessor">#define TDS_COLNAME_TOKEN 160 </span><span class="comment">/* 0xA0 TDS 4.2 only */</span> 00320 <span class="preprocessor">#define TDS_COLFMT_TOKEN 161 </span><span class="comment">/* 0xA1 TDS 4.2 only - TDS_COLFMT */</span> 00321 <span class="preprocessor">#define TDS_DYNAMIC2_TOKEN 163 </span><span class="comment">/* 0xA3 */</span> 00322 <span class="preprocessor">#define TDS_TABNAME_TOKEN 164 </span><span class="comment">/* 0xA4 */</span> 00323 <span class="preprocessor">#define TDS_COLINFO_TOKEN 165 </span><span class="comment">/* 0xA5 */</span> 00324 <span class="preprocessor">#define TDS_OPTIONCMD_TOKEN 166 </span><span class="comment">/* 0xA6 */</span> 00325 <span class="preprocessor">#define TDS_COMPUTE_NAMES_TOKEN 167 </span><span class="comment">/* 0xA7 */</span> 00326 <span class="preprocessor">#define TDS_COMPUTE_RESULT_TOKEN 168 </span><span class="comment">/* 0xA8 */</span> 00327 <span class="preprocessor">#define TDS_ORDERBY_TOKEN 169 </span><span class="comment">/* 0xA9 TDS_ORDER */</span> 00328 <span class="preprocessor">#define TDS_ERROR_TOKEN 170 </span><span class="comment">/* 0xAA */</span> 00329 <span class="preprocessor">#define TDS_INFO_TOKEN 171 </span><span class="comment">/* 0xAB */</span> 00330 <span class="preprocessor">#define TDS_PARAM_TOKEN 172 </span><span class="comment">/* 0xAC RETURNVALUE? */</span> 00331 <span class="preprocessor">#define TDS_LOGINACK_TOKEN 173 </span><span class="comment">/* 0xAD */</span> 00332 <span class="preprocessor">#define TDS_CONTROL_TOKEN 174 </span><span class="comment">/* 0xAE TDS_CONTROL */</span> 00333 <span class="preprocessor">#define TDS_ROW_TOKEN 209 </span><span class="comment">/* 0xD1 */</span> 00334 <span class="preprocessor">#define TDS_CMP_ROW_TOKEN 211 </span><span class="comment">/* 0xD3 */</span> 00335 <span class="preprocessor">#define TDS5_PARAMS_TOKEN 215 </span><span class="comment">/* 0xD7 TDS 5.0 only */</span> 00336 <span class="preprocessor">#define TDS_CAPABILITY_TOKEN 226 </span><span class="comment">/* 0xE2 */</span> 00337 <span class="preprocessor">#define TDS_ENVCHANGE_TOKEN 227 </span><span class="comment">/* 0xE3 */</span> 00338 <span class="preprocessor">#define TDS_EED_TOKEN 229 </span><span class="comment">/* 0xE5 */</span> 00339 <span class="preprocessor">#define TDS_DBRPC_TOKEN 230 </span><span class="comment">/* 0xE6 */</span> 00340 <span class="preprocessor">#define TDS5_DYNAMIC_TOKEN 231 </span><span class="comment">/* 0xE7 TDS 5.0 only */</span> 00341 <span class="preprocessor">#define TDS5_PARAMFMT_TOKEN 236 </span><span class="comment">/* 0xEC TDS 5.0 only */</span> 00342 <span class="preprocessor">#define TDS_AUTH_TOKEN 237 </span><span class="comment">/* 0xED TDS 7.0 only */</span> 00343 <span class="preprocessor">#define TDS_RESULT_TOKEN 238 </span><span class="comment">/* 0xEE */</span> 00344 <span class="preprocessor">#define TDS_DONE_TOKEN 253 </span><span class="comment">/* 0xFD TDS_DONE */</span> 00345 <span class="preprocessor">#define TDS_DONEPROC_TOKEN 254 </span><span class="comment">/* 0xFE TDS_DONEPROC */</span> 00346 <span class="preprocessor">#define TDS_DONEINPROC_TOKEN 255 </span><span class="comment">/* 0xFF TDS_DONEINPROC */</span> 00347 00348 <span class="comment">/* CURSOR support: TDS 5.0 only*/</span> 00349 <span class="preprocessor">#define TDS_CURCLOSE_TOKEN 128 </span><span class="comment">/* 0x80 TDS 5.0 only */</span> 00350 <span class="preprocessor">#define TDS_CURDELETE_TOKEN 129 </span><span class="comment">/* 0x81 TDS 5.0 only */</span> 00351 <span class="preprocessor">#define TDS_CURFETCH_TOKEN 130 </span><span class="comment">/* 0x82 TDS 5.0 only */</span> 00352 <span class="preprocessor">#define TDS_CURINFO_TOKEN 131 </span><span class="comment">/* 0x83 TDS 5.0 only */</span> 00353 <span class="preprocessor">#define TDS_CUROPEN_TOKEN 132 </span><span class="comment">/* 0x84 TDS 5.0 only */</span> 00354 <span class="preprocessor">#define TDS_CURDECLARE_TOKEN 134 </span><span class="comment">/* 0x86 TDS 5.0 only */</span> 00355 00356 <span class="keyword">enum</span> { 00357 TDS_CUR_ISTAT_UNUSED = 0x00, 00358 TDS_CUR_ISTAT_DECLARED = 0x01, 00359 TDS_CUR_ISTAT_OPEN = 0x02, 00360 TDS_CUR_ISTAT_CLOSED = 0x04, 00361 TDS_CUR_ISTAT_RDONLY = 0x08, 00362 TDS_CUR_ISTAT_UPDATABLE = 0x10, 00363 TDS_CUR_ISTAT_ROWCNT = 0x20, 00364 TDS_CUR_ISTAT_DEALLOC = 0x40 00365 }; 00366 00367 <span class="comment">/* </span> 00368 <span class="comment"> * Cursor Declare, SetRows, Open and Close all return 0x83 token. </span> 00369 <span class="comment"> * But only SetRows includes the rowcount (4 byte) in the stream. </span> 00370 <span class="comment"> * So for Setrows we read the rowcount from the stream and not for others. </span> 00371 <span class="comment"> * These values are useful to determine when to read the rowcount from the packet</span> 00372 <span class="comment"> */</span> 00373 <span class="preprocessor">#define IS_DECLARE 100</span> 00374 <span class="preprocessor"></span><span class="preprocessor">#define IS_CURROW 200</span> 00375 <span class="preprocessor"></span><span class="preprocessor">#define IS_OPEN 300</span> 00376 <span class="preprocessor"></span><span class="preprocessor">#define IS_CLOSE 400</span> 00377 <span class="preprocessor"></span> 00378 <span class="comment">/* states for tds_process_messages() */</span> 00379 <span class="preprocessor">#define PROCESS_ROWS 0</span> 00380 <span class="preprocessor"></span><span class="preprocessor">#define PROCESS_RESULTS 1</span> 00381 <span class="preprocessor"></span><span class="preprocessor">#define CANCEL_PROCESS 2</span> 00382 <span class="preprocessor"></span><span class="preprocessor">#define GOTO_1ST_ROW 3</span> 00383 <span class="preprocessor"></span><span class="preprocessor">#define LOGIN 4</span> 00384 <span class="preprocessor"></span> 00385 <span class="comment">/* environment type field */</span> 00386 <span class="preprocessor">#define TDS_ENV_DATABASE 1</span> 00387 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_LANG 2</span> 00388 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_CHARSET 3</span> 00389 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_PACKSIZE 4</span> 00390 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_LCID 5</span> 00391 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_SQLCOLLATION 7</span> 00392 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_BEGINTRANS 8</span> 00393 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_COMMITTRANS 9</span> 00394 <span class="preprocessor"></span><span class="preprocessor">#define TDS_ENV_ROLLBACKTRANS 10</span> 00395 <span class="preprocessor"></span> 00396 <span class="comment">/* string types */</span> 00397 <span class="preprocessor">#define TDS_NULLTERM -9</span> 00398 <span class="preprocessor"></span> 00399 <span class="comment">/* Microsoft internal stored procedure id's */</span> 00400 00401 <span class="preprocessor">#define TDS_SP_CURSOR 1</span> 00402 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSOROPEN 2</span> 00403 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSORPREPARE 3</span> 00404 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSOREXECUTE 4</span> 00405 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSORPREPEXEC 5</span> 00406 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSORUNPREPARE 6</span> 00407 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSORFETCH 7</span> 00408 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSOROPTION 8</span> 00409 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_CURSORCLOSE 9</span> 00410 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_EXECUTESQL 10</span> 00411 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_PREPARE 11</span> 00412 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_EXECUTE 12</span> 00413 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_PREPEXEC 13</span> 00414 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_PREPEXECRPC 14</span> 00415 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SP_UNPREPARE 15</span> 00416 <span class="preprocessor"></span><span class="comment">/* </span> 00417 <span class="comment"> * <rant> Sybase does an awful job of this stuff, non null ints of size 1 2 </span> 00418 <span class="comment"> * and 4 have there own codes but nullable ints are lumped into INTN</span> 00419 <span class="comment"> * sheesh! </rant></span> 00420 <span class="comment"> */</span> 00421 <span class="keyword">typedef</span> <span class="keyword">enum</span> 00422 { 00423 SYBCHAR = 47, <span class="comment">/* 0x2F */</span> 00424 <span class="preprocessor">#define SYBCHAR SYBCHAR</span> 00425 <span class="preprocessor"></span> SYBVARCHAR = 39, <span class="comment">/* 0x27 */</span> 00426 <span class="preprocessor">#define SYBVARCHAR SYBVARCHAR</span> 00427 <span class="preprocessor"></span> SYBINTN = 38, <span class="comment">/* 0x26 */</span> 00428 <span class="preprocessor">#define SYBINTN SYBINTN</span> 00429 <span class="preprocessor"></span> SYBINT1 = 48, <span class="comment">/* 0x30 */</span> 00430 <span class="preprocessor">#define SYBINT1 SYBINT1</span> 00431 <span class="preprocessor"></span> SYBINT2 = 52, <span class="comment">/* 0x34 */</span> 00432 <span class="preprocessor">#define SYBINT2 SYBINT2</span> 00433 <span class="preprocessor"></span> SYBINT4 = 56, <span class="comment">/* 0x38 */</span> 00434 <span class="preprocessor">#define SYBINT4 SYBINT4</span> 00435 <span class="preprocessor"></span> SYBFLT8 = 62, <span class="comment">/* 0x3E */</span> 00436 <span class="preprocessor">#define SYBFLT8 SYBFLT8</span> 00437 <span class="preprocessor"></span> SYBDATETIME = 61, <span class="comment">/* 0x3D */</span> 00438 <span class="preprocessor">#define SYBDATETIME SYBDATETIME</span> 00439 <span class="preprocessor"></span> SYBBIT = 50, <span class="comment">/* 0x32 */</span> 00440 <span class="preprocessor">#define SYBBIT SYBBIT</span> 00441 <span class="preprocessor"></span> SYBTEXT = 35, <span class="comment">/* 0x23 */</span> 00442 <span class="preprocessor">#define SYBTEXT SYBTEXT</span> 00443 <span class="preprocessor"></span> SYBNTEXT = 99, <span class="comment">/* 0x63 */</span> 00444 <span class="preprocessor">#define SYBNTEXT SYBNTEXT</span> 00445 <span class="preprocessor"></span> SYBIMAGE = 34, <span class="comment">/* 0x22 */</span> 00446 <span class="preprocessor">#define SYBIMAGE SYBIMAGE</span> 00447 <span class="preprocessor"></span> SYBMONEY4 = 122, <span class="comment">/* 0x7A */</span> 00448 <span class="preprocessor">#define SYBMONEY4 SYBMONEY4</span> 00449 <span class="preprocessor"></span> SYBMONEY = 60, <span class="comment">/* 0x3C */</span> 00450 <span class="preprocessor">#define SYBMONEY SYBMONEY</span> 00451 <span class="preprocessor"></span> SYBDATETIME4 = 58, <span class="comment">/* 0x3A */</span> 00452 <span class="preprocessor">#define SYBDATETIME4 SYBDATETIME4</span> 00453 <span class="preprocessor"></span> SYBREAL = 59, <span class="comment">/* 0x3B */</span> 00454 <span class="preprocessor">#define SYBREAL SYBREAL</span> 00455 <span class="preprocessor"></span> SYBBINARY = 45, <span class="comment">/* 0x2D */</span> 00456 <span class="preprocessor">#define SYBBINARY SYBBINARY</span> 00457 <span class="preprocessor"></span> SYBVOID = 31, <span class="comment">/* 0x1F */</span> 00458 <span class="preprocessor">#define SYBVOID SYBVOID</span> 00459 <span class="preprocessor"></span> SYBVARBINARY = 37, <span class="comment">/* 0x25 */</span> 00460 <span class="preprocessor">#define SYBVARBINARY SYBVARBINARY</span> 00461 <span class="preprocessor"></span> SYBBITN = 104, <span class="comment">/* 0x68 */</span> 00462 <span class="preprocessor">#define SYBBITN SYBBITN</span> 00463 <span class="preprocessor"></span> SYBNUMERIC = 108, <span class="comment">/* 0x6C */</span> 00464 <span class="preprocessor">#define SYBNUMERIC SYBNUMERIC</span> 00465 <span class="preprocessor"></span> SYBDECIMAL = 106, <span class="comment">/* 0x6A */</span> 00466 <span class="preprocessor">#define SYBDECIMAL SYBDECIMAL</span> 00467 <span class="preprocessor"></span> SYBFLTN = 109, <span class="comment">/* 0x6D */</span> 00468 <span class="preprocessor">#define SYBFLTN SYBFLTN</span> 00469 <span class="preprocessor"></span> SYBMONEYN = 110, <span class="comment">/* 0x6E */</span> 00470 <span class="preprocessor">#define SYBMONEYN SYBMONEYN</span> 00471 <span class="preprocessor"></span> SYBDATETIMN = 111, <span class="comment">/* 0x6F */</span> 00472 <span class="preprocessor">#define SYBDATETIMN SYBDATETIMN</span> 00473 <span class="preprocessor"></span> 00474 <span class="comment">/*</span> 00475 <span class="comment"> * MS only types</span> 00476 <span class="comment"> */</span> 00477 SYBNVARCHAR = 103, <span class="comment">/* 0x67 */</span> 00478 <span class="preprocessor">#define SYBNVARCHAR SYBNVARCHAR</span> 00479 <span class="preprocessor"></span> SYBINT8 = 127, <span class="comment">/* 0x7F */</span> 00480 <span class="preprocessor">#define SYBINT8 SYBINT8</span> 00481 <span class="preprocessor"></span> XSYBCHAR = 175, <span class="comment">/* 0xAF */</span> 00482 <span class="preprocessor">#define XSYBCHAR XSYBCHAR</span> 00483 <span class="preprocessor"></span> XSYBVARCHAR = 167, <span class="comment">/* 0xA7 */</span> 00484 <span class="preprocessor">#define XSYBVARCHAR XSYBVARCHAR</span> 00485 <span class="preprocessor"></span> XSYBNVARCHAR = 231, <span class="comment">/* 0xE7 */</span> 00486 <span class="preprocessor">#define XSYBNVARCHAR XSYBNVARCHAR</span> 00487 <span class="preprocessor"></span> XSYBNCHAR = 239, <span class="comment">/* 0xEF */</span> 00488 <span class="preprocessor">#define XSYBNCHAR XSYBNCHAR</span> 00489 <span class="preprocessor"></span> XSYBVARBINARY = 165, <span class="comment">/* 0xA5 */</span> 00490 <span class="preprocessor">#define XSYBVARBINARY XSYBVARBINARY</span> 00491 <span class="preprocessor"></span> XSYBBINARY = 173, <span class="comment">/* 0xAD */</span> 00492 <span class="preprocessor">#define XSYBBINARY XSYBBINARY</span> 00493 <span class="preprocessor"></span> SYBUNIQUE = 36, <span class="comment">/* 0x24 */</span> 00494 <span class="preprocessor">#define SYBUNIQUE SYBUNIQUE</span> 00495 <span class="preprocessor"></span> SYBVARIANT = 98, <span class="comment">/* 0x62 */</span> 00496 <span class="preprocessor">#define SYBVARIANT SYBVARIANT</span> 00497 <span class="preprocessor"></span> 00498 <span class="comment">/*</span> 00499 <span class="comment"> * Sybase only types</span> 00500 <span class="comment"> */</span> 00501 SYBLONGBINARY = 225, <span class="comment">/* 0xE1 */</span> 00502 <span class="preprocessor">#define SYBLONGBINARY SYBLONGBINARY</span> 00503 <span class="preprocessor"></span> SYBUINT1 = 64, <span class="comment">/* 0x40 */</span> 00504 <span class="preprocessor">#define SYBUINT1 SYBUINT1</span> 00505 <span class="preprocessor"></span> SYBUINT2 = 65, <span class="comment">/* 0x41 */</span> 00506 <span class="preprocessor">#define SYBUINT2 SYBUINT2</span> 00507 <span class="preprocessor"></span> SYBUINT4 = 66, <span class="comment">/* 0x42 */</span> 00508 <span class="preprocessor">#define SYBUINT4 SYBUINT4</span> 00509 <span class="preprocessor"></span> SYBUINT8 = 67, <span class="comment">/* 0x43 */</span> 00510 <span class="preprocessor">#define SYBUINT8 SYBUINT8</span> 00511 <span class="preprocessor"></span> SYBBLOB = 36, <span class="comment">/* 0x24 */</span> 00512 <span class="preprocessor">#define SYBBLOB SYBBLOB</span> 00513 <span class="preprocessor"></span> SYBBOUNDARY = 104, <span class="comment">/* 0x68 */</span> 00514 <span class="preprocessor">#define SYBBOUNDARY SYBBOUNDARY</span> 00515 <span class="preprocessor"></span> SYBDATE = 49, <span class="comment">/* 0x31 */</span> 00516 <span class="preprocessor">#define SYBDATE SYBDATE</span> 00517 <span class="preprocessor"></span> SYBDATEN = 123, <span class="comment">/* 0x7B */</span> 00518 <span class="preprocessor">#define SYBDATEN SYBDATEN</span> 00519 <span class="preprocessor"></span> SYB5INT8 = 191, <span class="comment">/* 0xBF */</span> 00520 <span class="preprocessor">#define SYB5INT8 SYB5INT8</span> 00521 <span class="preprocessor"></span> SYBINTERVAL = 46, <span class="comment">/* 0x2E */</span> 00522 <span class="preprocessor">#define SYBINTERVAL SYBINTERVAL</span> 00523 <span class="preprocessor"></span> SYBLONGCHAR = 175, <span class="comment">/* 0xAF */</span> 00524 <span class="preprocessor">#define SYBLONGCHAR SYBLONGCHAR</span> 00525 <span class="preprocessor"></span> SYBSENSITIVITY = 103, <span class="comment">/* 0x67 */</span> 00526 <span class="preprocessor">#define SYBSENSITIVITY SYBSENSITIVITY</span> 00527 <span class="preprocessor"></span> SYBSINT1 = 176, <span class="comment">/* 0xB0 */</span> 00528 <span class="preprocessor">#define SYBSINT1 SYBSINT1</span> 00529 <span class="preprocessor"></span> SYBTIME = 51, <span class="comment">/* 0x33 */</span> 00530 <span class="preprocessor">#define SYBTIME SYBTIME</span> 00531 <span class="preprocessor"></span> SYBTIMEN = 147, <span class="comment">/* 0x93 */</span> 00532 <span class="preprocessor">#define SYBTIMEN SYBTIMEN</span> 00533 <span class="preprocessor"></span> SYBUINTN = 68, <span class="comment">/* 0x44 */</span> 00534 <span class="preprocessor">#define SYBUINTN SYBUINTN</span> 00535 <span class="preprocessor"></span> SYBUNITEXT = 174, <span class="comment">/* 0xAE */</span> 00536 <span class="preprocessor">#define SYBUNITEXT SYBUNITEXT</span> 00537 <span class="preprocessor"></span> SYBXML = 163, <span class="comment">/* 0xA3 */</span> 00538 <span class="preprocessor">#define SYBXML SYBXML</span> 00539 <span class="preprocessor"></span> 00540 } TDS_SERVER_TYPE; 00541 00542 00543 <span class="keyword">typedef</span> <span class="keyword">enum</span> 00544 { 00545 USER_UNICHAR_TYPE = 34, <span class="comment">/* 0x22 */</span> 00546 USER_UNIVARCHAR_TYPE = 35 <span class="comment">/* 0x23 */</span> 00547 } TDS_USER_TYPE; 00548 00549 <span class="preprocessor">#define SYBAOPCNT 0x4b</span> 00550 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPCNTU 0x4c</span> 00551 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPSUM 0x4d</span> 00552 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPSUMU 0x4e</span> 00553 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPAVG 0x4f</span> 00554 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPAVGU 0x50</span> 00555 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPMIN 0x51</span> 00556 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPMAX 0x52</span> 00557 <span class="preprocessor"></span> 00558 <span class="comment">/* mssql2k compute operator */</span> 00559 <span class="preprocessor">#define SYBAOPCNT_BIG 0x09</span> 00560 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPSTDEV 0x30</span> 00561 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPSTDEVP 0x31</span> 00562 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPVAR 0x32</span> 00563 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPVARP 0x33</span> 00564 <span class="preprocessor"></span><span class="preprocessor">#define SYBAOPCHECKSUM_AGG 0x72</span> 00565 <span class="preprocessor"></span> 00566 <a name="l00570"></a><a class="code" href="a00163.html#a716">00570</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> 00571 { 00572 TDS_OPT_SET = 1 <span class="comment">/* Set an option. */</span> 00573 , TDS_OPT_DEFAULT = 2 <span class="comment">/* Set option to its default value. */</span> 00574 , TDS_OPT_LIST = 3 <span class="comment">/* Request current setting of a specific option. */</span> 00575 , TDS_OPT_INFO = 4 <span class="comment">/* Report current setting of a specific option. */</span> 00576 } <a class="code" href="a00163.html#a716">TDS_OPTION_CMD</a>; 00577 00578 <span class="keyword">typedef</span> <span class="keyword">enum</span> 00579 { 00580 TDS_OPT_DATEFIRST = 1 <span class="comment">/* 0x01 */</span> 00581 , TDS_OPT_TEXTSIZE = 2 <span class="comment">/* 0x02 */</span> 00582 , TDS_OPT_STAT_TIME = 3 <span class="comment">/* 0x03 */</span> 00583 , TDS_OPT_STAT_IO = 4 <span class="comment">/* 0x04 */</span> 00584 , TDS_OPT_ROWCOUNT = 5 <span class="comment">/* 0x05 */</span> 00585 , TDS_OPT_NATLANG = 6 <span class="comment">/* 0x06 */</span> 00586 , TDS_OPT_DATEFORMAT = 7 <span class="comment">/* 0x07 */</span> 00587 , TDS_OPT_ISOLATION = 8 <span class="comment">/* 0x08 */</span> 00588 , TDS_OPT_AUTHON = 9 <span class="comment">/* 0x09 */</span> 00589 , TDS_OPT_CHARSET = 10 <span class="comment">/* 0x0a */</span> 00590 , TDS_OPT_SHOWPLAN = 13 <span class="comment">/* 0x0d */</span> 00591 , TDS_OPT_NOEXEC = 14 <span class="comment">/* 0x0e */</span> 00592 , TDS_OPT_ARITHIGNOREON = 15 <span class="comment">/* 0x0f */</span> 00593 , TDS_OPT_ARITHABORTON = 17 <span class="comment">/* 0x11 */</span> 00594 , TDS_OPT_PARSEONLY = 18 <span class="comment">/* 0x12 */</span> 00595 , TDS_OPT_GETDATA = 20 <span class="comment">/* 0x14 */</span> 00596 , TDS_OPT_NOCOUNT = 21 <span class="comment">/* 0x15 */</span> 00597 , TDS_OPT_FORCEPLAN = 23 <span class="comment">/* 0x17 */</span> 00598 , TDS_OPT_FORMATONLY = 24 <span class="comment">/* 0x18 */</span> 00599 , TDS_OPT_CHAINXACTS = 25 <span class="comment">/* 0x19 */</span> 00600 , TDS_OPT_CURCLOSEONXACT = 26 <span class="comment">/* 0x1a */</span> 00601 , TDS_OPT_FIPSFLAG = 27 <span class="comment">/* 0x1b */</span> 00602 , TDS_OPT_RESTREES = 28 <span class="comment">/* 0x1c */</span> 00603 , TDS_OPT_IDENTITYON = 29 <span class="comment">/* 0x1d */</span> 00604 , TDS_OPT_CURREAD = 30 <span class="comment">/* 0x1e */</span> 00605 , TDS_OPT_CURWRITE = 31 <span class="comment">/* 0x1f */</span> 00606 , TDS_OPT_IDENTITYOFF = 32 <span class="comment">/* 0x20 */</span> 00607 , TDS_OPT_AUTHOFF = 33 <span class="comment">/* 0x21 */</span> 00608 , TDS_OPT_ANSINULL = 34 <span class="comment">/* 0x22 */</span> 00609 , TDS_OPT_QUOTED_IDENT = 35 <span class="comment">/* 0x23 */</span> 00610 , TDS_OPT_ARITHIGNOREOFF = 36 <span class="comment">/* 0x24 */</span> 00611 , TDS_OPT_ARITHABORTOFF = 37 <span class="comment">/* 0x25 */</span> 00612 , TDS_OPT_TRUNCABORT = 38 <span class="comment">/* 0x26 */</span> 00613 } TDS_OPTION; 00614 00615 <span class="keyword">typedef</span> <span class="keyword">union </span>tds_option_arg 00616 { 00617 TDS_TINYINT ti; 00618 TDS_INT i; 00619 TDS_CHAR *c; 00620 } TDS_OPTION_ARG; 00621 00622 <span class="keyword">enum</span> { 00623 TDS_OPT_ARITHOVERFLOW = 0x01, 00624 TDS_OPT_NUMERICTRUNC = 0x02 00625 }; 00626 00627 <span class="keyword">enum</span> TDS_OPT_DATEFIRST_CHOICE 00628 { 00629 TDS_OPT_MONDAY = 1, TDS_OPT_TUESDAY = 2, TDS_OPT_WEDNESDAY = 3, TDS_OPT_THURSDAY = 4, TDS_OPT_FRIDAY = 5, TDS_OPT_SATURDAY = 00630 6, TDS_OPT_SUNDAY = 7 00631 }; 00632 00633 <span class="keyword">enum</span> TDS_OPT_DATEFORMAT_CHOICE 00634 { 00635 TDS_OPT_FMTMDY = 1, TDS_OPT_FMTDMY = 2, TDS_OPT_FMTYMD = 3, TDS_OPT_FMTYDM = 4, TDS_OPT_FMTMYD = 5, TDS_OPT_FMTDYM = 6 00636 }; 00637 <span class="keyword">enum</span> TDS_OPT_ISOLATION_CHOICE 00638 { 00639 TDS_OPT_LEVEL1 = 1, TDS_OPT_LEVEL3 = 3 00640 }; 00641 00642 <span class="keyword">typedef</span> <span class="keyword">enum</span> tds_packet_type 00643 { 00644 TDS_QUERY = 1, 00645 TDS_LOGIN = 2, 00646 TDS_RPC = 3, 00647 TDS_REPLY = 4, 00648 TDS_CANCEL = 6, 00649 TDS_BULK = 7, 00650 TDS_NORMAL = 15, 00651 TDS7_LOGIN = 16, 00652 TDS7_AUTH = 17, 00653 TDS8_PRELOGIN = 18 00654 } TDS_PACKET_TYPE; 00655 00656 <span class="keyword">typedef</span> <span class="keyword">enum</span> tds_encryption_level { 00657 TDS_ENCRYPTION_OFF, TDS_ENCRYPTION_REQUEST, TDS_ENCRYPTION_REQUIRE 00658 } TDS_ENCRYPTION_LEVEL; 00659 00660 <span class="preprocessor">#define TDS_ZERO_FREE(x) do {free((x)); (x) = NULL;} while(0)</span> 00661 <span class="preprocessor"></span><span class="preprocessor">#define TDS_VECTOR_SIZE(x) (sizeof(x)/sizeof(x[0]))</span> 00662 <span class="preprocessor"></span> 00663 <span class="comment">/*</span> 00664 <span class="comment"> * TODO use system macros for optimization</span> 00665 <span class="comment"> * See mcrypt for reference and linux kernel source for optimization</span> 00666 <span class="comment"> * check if unaligned access and use fast write/read when implemented</span> 00667 <span class="comment"> */</span> 00668 <span class="preprocessor">#define TDS_BYTE_SWAP16(value) \</span> 00669 <span class="preprocessor"> (((((unsigned short)value)<<8) & 0xFF00) | \</span> 00670 <span class="preprocessor"> ((((unsigned short)value)>>8) & 0x00FF))</span> 00671 <span class="preprocessor"></span> 00672 <span class="preprocessor">#define TDS_BYTE_SWAP32(value) \</span> 00673 <span class="preprocessor"> (((((unsigned long)value)<<24) & 0xFF000000) | \</span> 00674 <span class="preprocessor"> ((((unsigned long)value)<< 8) & 0x00FF0000) | \</span> 00675 <span class="preprocessor"> ((((unsigned long)value)>> 8) & 0x0000FF00) | \</span> 00676 <span class="preprocessor"> ((((unsigned long)value)>>24) & 0x000000FF))</span> 00677 <span class="preprocessor"></span> 00678 <span class="preprocessor">#define is_end_token(x) (x==TDS_DONE_TOKEN || \</span> 00679 <span class="preprocessor"> x==TDS_DONEPROC_TOKEN || \</span> 00680 <span class="preprocessor"> x==TDS_DONEINPROC_TOKEN)</span> 00681 <span class="preprocessor"></span> 00682 <span class="preprocessor">#define is_hard_end_token(x) (x==TDS_DONE_TOKEN || \</span> 00683 <span class="preprocessor"> x==TDS_DONEPROC_TOKEN)</span> 00684 <span class="preprocessor"></span> 00685 <span class="preprocessor">#define is_msg_token(x) (x==TDS_INFO_TOKEN || \</span> 00686 <span class="preprocessor"> x==TDS_ERROR_TOKEN || \</span> 00687 <span class="preprocessor"> x==TDS_EED_TOKEN)</span> 00688 <span class="preprocessor"></span> 00689 <span class="preprocessor">#define is_result_token(x) (x==TDS_RESULT_TOKEN || \</span> 00690 <span class="preprocessor"> x==TDS_ROWFMT2_TOKEN || \</span> 00691 <span class="preprocessor"> x==TDS7_RESULT_TOKEN || \</span> 00692 <span class="preprocessor"> x==TDS_COLFMT_TOKEN || \</span> 00693 <span class="preprocessor"> x==TDS_COLNAME_TOKEN || \</span> 00694 <span class="preprocessor"> x==TDS_RETURNSTATUS_TOKEN)</span> 00695 <span class="preprocessor"></span> 00696 <span class="comment">/* FIXME -- not a complete list */</span> 00697 <span class="preprocessor">#define is_fixed_type(x) (x==SYBINT1 || \</span> 00698 <span class="preprocessor"> x==SYBINT2 || \</span> 00699 <span class="preprocessor"> x==SYBINT4 || \</span> 00700 <span class="preprocessor"> x==SYBINT8 || \</span> 00701 <span class="preprocessor"> x==SYBREAL || \</span> 00702 <span class="preprocessor"> x==SYBFLT8 || \</span> 00703 <span class="preprocessor"> x==SYBDATETIME || \</span> 00704 <span class="preprocessor"> x==SYBDATETIME4 || \</span> 00705 <span class="preprocessor"> x==SYBBIT || \</span> 00706 <span class="preprocessor"> x==SYBMONEY || \</span> 00707 <span class="preprocessor"> x==SYBMONEY4 || \</span> 00708 <span class="preprocessor"> x==SYBVOID || \</span> 00709 <span class="preprocessor"> x==SYBUNIQUE)</span> 00710 <span class="preprocessor"></span><span class="preprocessor">#define is_nullable_type(x) ( \</span> 00711 <span class="preprocessor"> x==SYBBITN || \</span> 00712 <span class="preprocessor"> x==SYBINTN || \</span> 00713 <span class="preprocessor"> x==SYBFLTN || \</span> 00714 <span class="preprocessor"> x==SYBMONEYN || \</span> 00715 <span class="preprocessor"> x==SYBDATETIMN || \</span> 00716 <span class="preprocessor"> x==SYBVARCHAR || \</span> 00717 <span class="preprocessor"> x==SYBBINARY || \</span> 00718 <span class="preprocessor"> x==SYBVARBINARY || \</span> 00719 <span class="preprocessor"> x==SYBTEXT || \</span> 00720 <span class="preprocessor"> x==SYBNTEXT || \</span> 00721 <span class="preprocessor"> x==SYBIMAGE)</span> 00722 <span class="preprocessor"></span> 00723 <span class="preprocessor">#define is_variable_type(x) ( \</span> 00724 <span class="preprocessor"> (x)==SYBTEXT || \</span> 00725 <span class="preprocessor"> (x)==SYBIMAGE || \</span> 00726 <span class="preprocessor"> (x)==SYBNTEXT || \</span> 00727 <span class="preprocessor"> (x)==SYBCHAR || \</span> 00728 <span class="preprocessor"> (x)==SYBVARCHAR || \</span> 00729 <span class="preprocessor"> (x)==SYBBINARY || \</span> 00730 <span class="preprocessor"> (x)==SYBVARBINARY || \</span> 00731 <span class="preprocessor"> (x)==SYBLONGBINARY || \</span> 00732 <span class="preprocessor"> (x)==XSYBCHAR || \</span> 00733 <span class="preprocessor"> (x)==XSYBVARCHAR || \</span> 00734 <span class="preprocessor"> (x)==XSYBNVARCHAR || \</span> 00735 <span class="preprocessor"> (x)==XSYBNCHAR)</span> 00736 <span class="preprocessor"></span> 00737 <span class="preprocessor">#define is_blob_type(x) (x==SYBTEXT || x==SYBIMAGE || x==SYBNTEXT)</span> 00738 <span class="preprocessor"></span><span class="comment">/* large type means it has a two byte size field */</span> 00739 <span class="comment">/* define is_large_type(x) (x>128) */</span> 00740 <span class="preprocessor">#define is_numeric_type(x) (x==SYBNUMERIC || x==SYBDECIMAL)</span> 00741 <span class="preprocessor"></span><span class="preprocessor">#define is_unicode_type(x) (x==XSYBNVARCHAR || x==XSYBNCHAR || x==SYBNTEXT)</span> 00742 <span class="preprocessor"></span><span class="preprocessor">#define is_collate_type(x) (x==XSYBVARCHAR || x==XSYBCHAR || x==SYBTEXT || x==XSYBNVARCHAR || x==XSYBNCHAR || x==SYBNTEXT)</span> 00743 <span class="preprocessor"></span><span class="preprocessor">#define is_ascii_type(x) ( x==XSYBCHAR || x==XSYBVARCHAR || x==SYBTEXT || x==SYBCHAR || x==SYBVARCHAR)</span> 00744 <span class="preprocessor"></span><span class="preprocessor">#define is_binary_type(x) (x==SYBLONGBINARY)</span> 00745 <span class="preprocessor"></span><span class="preprocessor">#define is_char_type(x) (is_unicode_type(x) || is_ascii_type(x))</span> 00746 <span class="preprocessor"></span><span class="preprocessor">#define is_similar_type(x, y) ((is_char_type(x) && is_char_type(y)) || ((is_unicode_type(x) && is_unicode_type(y))))</span> 00747 <span class="preprocessor"></span> 00748 00749 <span class="preprocessor">#define TDS_MAX_CAPABILITY 22</span> 00750 <span class="preprocessor"></span><span class="preprocessor">#define MAXPRECISION 80</span> 00751 <span class="preprocessor"></span><span class="preprocessor">#define TDS_MAX_CONN 4096</span> 00752 <span class="preprocessor"></span><span class="preprocessor">#define TDS_MAX_DYNID_LEN 30</span> 00753 <span class="preprocessor"></span> 00754 <span class="comment">/* defaults to use if no others are found */</span> 00755 <span class="preprocessor">#define TDS_DEF_SERVER "SYBASE"</span> 00756 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_BLKSZ 512</span> 00757 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_CHARSET "iso_1"</span> 00758 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_LANG "us_english"</span> 00759 <span class="preprocessor"></span><span class="preprocessor">#if TDS42</span> 00760 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MAJOR 4</span> 00761 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MINOR 2</span> 00762 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_PORT 1433</span> 00763 <span class="preprocessor"></span><span class="preprocessor">#elif TDS46</span> 00764 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MAJOR 4</span> 00765 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MINOR 6</span> 00766 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_PORT 4000</span> 00767 <span class="preprocessor"></span><span class="preprocessor">#elif TDS70</span> 00768 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MAJOR 7</span> 00769 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MINOR 0</span> 00770 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_PORT 1433</span> 00771 <span class="preprocessor"></span><span class="preprocessor">#elif TDS80</span> 00772 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MAJOR 8</span> 00773 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MINOR 0</span> 00774 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_PORT 1433</span> 00775 <span class="preprocessor"></span><span class="preprocessor">#else</span> 00776 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MAJOR 5</span> 00777 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_MINOR 0</span> 00778 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DEF_PORT 4000</span> 00779 <span class="preprocessor"></span><span class="preprocessor">#endif</span> 00780 <span class="preprocessor"></span> 00781 <span class="comment">/* normalized strings from freetds.conf file */</span> 00782 <span class="preprocessor">#define TDS_STR_VERSION "tds version"</span> 00783 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_BLKSZ "initial block size"</span> 00784 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_SWAPDT "swap broken dates"</span> 00785 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_SWAPMNY "swap broken money"</span> 00786 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_DUMPFILE "dump file"</span> 00787 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_DEBUGLVL "debug level"</span> 00788 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_DEBUGFLAGS "debug flags"</span> 00789 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_TIMEOUT "timeout"</span> 00790 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_QUERY_TIMEOUT "query timeout"</span> 00791 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_CONNTIMEOUT "connect timeout"</span> 00792 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_HOSTNAME "hostname"</span> 00793 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_HOST "host"</span> 00794 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_PORT "port"</span> 00795 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_TEXTSZ "text size"</span> 00796 <span class="preprocessor"></span><span class="comment">/* for big endian hosts */</span> 00797 <span class="preprocessor">#define TDS_STR_EMUL_LE "emulate little endian"</span> 00798 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_CHARSET "charset"</span> 00799 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_CLCHARSET "client charset"</span> 00800 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_LANGUAGE "language"</span> 00801 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_APPENDMODE "dump file append"</span> 00802 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_DATEFMT "date format"</span> 00803 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_INSTANCE "instance"</span> 00804 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_ENCRYPTION "encryption"</span> 00805 <span class="preprocessor"></span><span class="comment">/* conf values */</span> 00806 <span class="preprocessor">#define TDS_STR_ENCRYPTION_OFF "off"</span> 00807 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_ENCRYPTION_REQUEST "request"</span> 00808 <span class="preprocessor"></span><span class="preprocessor">#define TDS_STR_ENCRYPTION_REQUIRE "require"</span> 00809 <span class="preprocessor"></span> 00810 00811 <span class="comment">/* TODO do a better check for alignment than this */</span> 00812 <span class="keyword">typedef</span> <span class="keyword">union</span> 00813 <span class="keyword"></span>{ 00814 <span class="keywordtype">void</span> *p; 00815 <span class="keywordtype">int</span> i; 00816 } tds_align_struct; 00817 00818 <span class="preprocessor">#define TDS_ALIGN_SIZE sizeof(tds_align_struct)</span> 00819 <span class="preprocessor"></span> 00820 <span class="preprocessor">#define TDS_MAX_LOGIN_STR_SZ 30</span> 00821 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span>tds_login 00822 { 00823 DSTR server_name; 00824 DSTR server_addr; 00825 <span class="keywordtype">int</span> port; 00826 TDS_TINYINT major_version; <span class="comment">/* TDS version */</span> 00827 TDS_TINYINT minor_version; <span class="comment">/* TDS version */</span> 00828 <span class="keywordtype">int</span> block_size; 00829 DSTR language; <span class="comment">/* ie us-english */</span> 00830 DSTR server_charset; <span class="comment">/* ie iso_1 */</span> 00831 TDS_INT connect_timeout; 00832 DSTR client_host_name; 00833 DSTR app_name; 00834 DSTR user_name; 00835 DSTR password; 00836 00837 DSTR library; <span class="comment">/* Ct-Library, DB-Library, TDS-Library or ODBC */</span> 00838 TDS_TINYINT bulk_copy; 00839 TDS_TINYINT suppress_language; 00840 TDS_TINYINT encryption_level; 00841 00842 TDS_INT query_timeout; 00843 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> capabilities[TDS_MAX_CAPABILITY]; 00844 DSTR client_charset; 00845 } TDSLOGIN; 00846 00847 <span class="keyword">typedef</span> <span class="keyword">struct </span>tds_connection 00848 { 00849 <span class="comment">/* first part of structure is the same of login one */</span> 00850 DSTR server_name; 00851 <span class="keywordtype">int</span> port; 00852 TDS_TINYINT major_version; 00853 TDS_TINYINT minor_version; 00854 <span class="keywordtype">int</span> block_size; 00855 DSTR language; 00856 DSTR server_charset; 00857 TDS_INT connect_timeout; 00858 DSTR client_host_name; 00859 DSTR server_host_name; 00860 DSTR app_name; 00861 DSTR user_name; 00862 DSTR password; 00863 DSTR library; 00864 TDS_TINYINT bulk_copy; 00865 TDS_TINYINT suppress_language; 00866 TDS_TINYINT encryption_level; 00867 00868 TDS_INT query_timeout; 00869 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> capabilities[TDS_MAX_CAPABILITY]; 00870 DSTR client_charset; 00871 00872 DSTR ip_addr; 00873 DSTR instance_name; 00874 DSTR database; 00875 DSTR dump_file; 00876 <span class="keywordtype">int</span> debug_flags; 00877 <span class="keywordtype">int</span> text_size; 00878 <span class="keywordtype">int</span> broken_dates; 00879 <span class="keywordtype">int</span> broken_money; 00880 <span class="keywordtype">int</span> emul_little_endian; 00881 } TDSCONNECTION; 00882 00883 <span class="keyword">typedef</span> <span class="keyword">struct </span>tds_locale 00884 { 00885 <span class="keywordtype">char</span> *language; 00886 <span class="keywordtype">char</span> *server_charset; 00887 <span class="keywordtype">char</span> *client_charset; 00888 <span class="keywordtype">char</span> *date_fmt; 00889 } TDSLOCALE; 00890 <a name="l00895"></a><a class="code" href="a00139.html">00895</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00139.html">tds_blob</a> 00896 { 00897 TDS_CHAR *textvalue; 00898 TDS_CHAR textptr[16]; 00899 TDS_CHAR timestamp[8]; 00900 } <a class="code" href="a00139.html">TDSBLOB</a>; 00901 <a name="l00905"></a><a class="code" href="a00138.html">00905</a> <span class="keyword">typedef</span> <span class="keyword">struct</span> 00906 <span class="keyword"></span>{ 00907 TDS_USMALLINT locale_id; <span class="comment">/* master..syslanguages.lcid */</span> 00908 TDS_USMALLINT flags; 00909 TDS_UCHAR charset_id; <span class="comment">/* or zero */</span> 00910 } <a class="code" href="a00138.html">TDS8_COLLATION</a>; 00911 00912 <span class="comment">/* SF stands for "sort flag" */</span> 00913 <span class="preprocessor">#define TDS_SF_BIN (TDS_USMALLINT) 0x100</span> 00914 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SF_WIDTH_INSENSITIVE (TDS_USMALLINT) 0x080</span> 00915 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SF_KATATYPE_INSENSITIVE (TDS_USMALLINT) 0x040</span> 00916 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SF_ACCENT_SENSITIVE (TDS_USMALLINT) 0x020</span> 00917 <span class="preprocessor"></span><span class="preprocessor">#define TDS_SF_CASE_INSENSITIVE (TDS_USMALLINT) 0x010</span> 00918 <span class="preprocessor"></span> 00919 <span class="comment">/* UT stands for user type */</span> 00920 <span class="preprocessor">#define TDS_UT_TIMESTAMP 80</span> 00921 <span class="preprocessor"></span> 00922 <a name="l00927"></a><a class="code" href="a00136.html">00927</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00136.html">_tds_encoding</a> 00928 { 00929 <span class="keyword">const</span> <span class="keywordtype">char</span> *name; 00930 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> min_bytes_per_char; 00931 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> max_bytes_per_char; 00932 } <a class="code" href="a00136.html">TDS_ENCODING</a>; 00933 00934 <span class="keyword">typedef</span> <span class="keyword">struct </span>_tds_bcpcoldata 00935 { 00936 TDS_UCHAR *data; 00937 TDS_INT datalen; 00938 TDS_INT is_null; 00939 } BCPCOLDATA; 00940 00941 00942 <span class="keyword">enum</span> 00943 { TDS_SYSNAME_SIZE = 512 }; 00944 <a name="l00948"></a><a class="code" href="a00140.html">00948</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00140.html">tds_column</a> 00949 { 00950 TDS_SMALLINT <a class="code" href="a00140.html#o30">column_type</a>; 00955 TDS_INT column_usertype; 00956 TDS_INT column_flags; 00957 00958 TDS_INT <a class="code" href="a00140.html#o26">column_size</a>; <a name="l00960"></a><a class="code" href="a00140.html#o33">00960</a> TDS_TINYINT <a class="code" href="a00140.html#o33">column_varint_size</a>; <a name="l00962"></a><a class="code" href="a00140.html#o24">00962</a> TDS_TINYINT <a class="code" href="a00140.html#o24">column_prec</a>; <a name="l00963"></a><a class="code" href="a00140.html#o25">00963</a> TDS_TINYINT <a class="code" href="a00140.html#o25">column_scale</a>; <a name="l00965"></a><a class="code" href="a00140.html#o18">00965</a> TDS_SMALLINT <a class="code" href="a00140.html#o18">column_namelen</a>; 00966 TDS_SMALLINT table_namelen; 00967 <span class="keyword">struct</span> 00968 <span class="keyword"> </span>{ <a name="l00969"></a><a class="code" href="a00140.html#o30">00969</a> TDS_SMALLINT <a class="code" href="a00140.html#o30">column_type</a>; <a name="l00970"></a><a class="code" href="a00140.html#o26">00970</a> TDS_INT <a class="code" href="a00140.html#o26">column_size</a>; 00971 } on_server; 00972 <a name="l00973"></a><a class="code" href="a00140.html#o4">00973</a> <span class="keyword">const</span> TDSICONV *<a class="code" href="a00140.html#o4">char_conv</a>; 00975 TDS_CHAR table_name[TDS_SYSNAME_SIZE]; 00976 TDS_CHAR column_name[TDS_SYSNAME_SIZE]; 00977 <span class="keywordtype">char</span> * table_column_name; 00978 00979 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *column_data; 00980 void (*column_data_free)(<span class="keyword">struct </span><a class="code" href="a00140.html">tds_column</a> *column); 00981 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> column_nullable:1; 00982 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> column_writeable:1; 00983 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> column_identity:1; 00984 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> column_key:1; 00985 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> column_hidden:1; 00986 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> column_output:1; 00987 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> column_timestamp:1; 00988 TDS_UCHAR column_collation[5]; 00989 00990 <span class="comment">/* additional fields flags for compute results */</span> 00991 TDS_TINYINT column_operator; 00992 TDS_SMALLINT column_operand; 00993 00994 <span class="comment">/* FIXME this is data related, not column */</span> <a name="l00996"></a><a class="code" href="a00140.html#o9">00996</a> TDS_INT <a class="code" href="a00140.html#o9">column_cur_size</a>; 00997 00998 <span class="comment">/* related to binding or info stored by client libraries */</span> 00999 <span class="comment">/* FIXME find a best place to store these data, some are unused */</span> 01000 TDS_SMALLINT column_bindtype; 01001 TDS_SMALLINT column_bindfmt; 01002 TDS_UINT column_bindlen; 01003 TDS_SMALLINT *column_nullbind; 01004 TDS_CHAR *column_varaddr; 01005 TDS_INT *column_lenbind; 01006 TDS_INT column_textpos; 01007 TDS_INT column_text_sqlgetdatapos; 01008 01009 BCPCOLDATA *bcp_column_data; <a name="l01018"></a><a class="code" href="a00140.html#o1">01018</a> TDS_INT <a class="code" href="a00140.html#o1">bcp_prefix_len</a>; 01019 TDS_INT bcp_term_len; 01020 TDS_CHAR *bcp_terminator; 01021 } <a class="code" href="a00140.html">TDSCOLUMN</a>; 01022 01023 <a name="l01025"></a><a class="code" href="a00143.html">01025</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00143.html">tds_result_info</a> 01026 { 01027 <span class="comment">/* TODO those fields can became a struct */</span> 01028 TDS_SMALLINT num_cols; 01029 <a class="code" href="a00140.html">TDSCOLUMN</a> **columns; 01030 TDS_INT row_size; 01031 TDS_INT ref_count; 01032 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *current_row; 01033 void (*row_free)(<span class="keyword">struct </span><a class="code" href="a00143.html">tds_result_info</a>* result, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *row); 01034 01035 TDS_SMALLINT rows_exist; 01036 <span class="comment">/* TODO remove ?? used only in dblib */</span> 01037 TDS_INT row_count; 01038 <span class="comment">/* TODO remove ?? used only in dblib */</span> 01039 TDS_TINYINT more_results; 01040 TDS_SMALLINT computeid; 01041 TDS_SMALLINT *bycolumns; 01042 TDS_SMALLINT by_cols; 01043 } <a class="code" href="a00143.html">TDSRESULTINFO</a>; 01044 <a name="l01046"></a><a class="code" href="a00163.html#a725">01046</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00163.html#a725">_TDS_STATE</a> 01047 { 01048 <a class="code" href="a00163.html#a725a515">TDS_IDLE</a>, 01049 <a class="code" href="a00163.html#a725a516">TDS_QUERYING</a>, 01050 <a class="code" href="a00163.html#a725a517">TDS_PENDING</a>, 01051 <a class="code" href="a00163.html#a725a518">TDS_READING</a>, 01052 <a class="code" href="a00163.html#a725a519">TDS_DEAD</a> 01053 } <a class="code" href="a00163.html#a305">TDS_STATE</a>; 01054 01055 <span class="preprocessor">#define TDS_DBG_FUNC __FILE__, ((__LINE__ << 4) | 7)</span> 01056 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_INFO2 __FILE__, ((__LINE__ << 4) | 6)</span> 01057 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_INFO1 __FILE__, ((__LINE__ << 4) | 5)</span> 01058 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_NETWORK __FILE__, ((__LINE__ << 4) | 4)</span> 01059 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_WARN __FILE__, ((__LINE__ << 4) | 3)</span> 01060 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_ERROR __FILE__, ((__LINE__ << 4) | 2)</span> 01061 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_SEVERE __FILE__, ((__LINE__ << 4) | 1)</span> 01062 <span class="preprocessor"></span> 01063 <span class="preprocessor">#define TDS_DBGFLAG_FUNC 0x80</span> 01064 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_INFO2 0x40</span> 01065 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_INFO1 0x20</span> 01066 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_NETWORK 0x10</span> 01067 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_WARN 0x08</span> 01068 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_ERROR 0x04</span> 01069 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_SEVERE 0x02</span> 01070 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_ALLLVL 0xfff</span> 01071 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_PID 0x1000</span> 01072 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_TIME 0x2000</span> 01073 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_SOURCE 0x4000</span> 01074 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBGFLAG_THREAD 0x8000</span> 01075 <span class="preprocessor"></span> <a name="l01081"></a><a class="code" href="a00163.html#a726">01081</a> <span class="keyword">enum</span> <a class="code" href="a00163.html#a726">TDS_DBG_LOG_STATE</a> 01082 { 01083 <a class="code" href="a00163.html#a726a520">TDS_DBG_LOGIN</a> = (1 << 0) 01085 , <a class="code" href="a00163.html#a726a521">TDS_DBG_API</a> = (1 << 1) 01086 , <a class="code" href="a00163.html#a726a522">TDS_DBG_ASYNC</a> = (1 << 2) 01087 , <a class="code" href="a00163.html#a726a523">TDS_DBG_DIAG</a> = (1 << 3) 01088 , TDS_DBG_error = (1 << 4) 01089 <span class="comment">/* TODO: ^^^^^ make upper case when old #defines (above) are removed */</span> 01090 <span class="comment">/* Log FreeTDS runtime/logic error occurs. */</span> 01091 , <a class="code" href="a00163.html#a726a525">TDS_DBG_PACKET</a> = (1 << 5) 01092 , <a class="code" href="a00163.html#a726a526">TDS_DBG_LIBTDS</a> = (1 << 6) 01093 , <a class="code" href="a00163.html#a726a527">TDS_DBG_CONFIG</a> = (1 << 7) 01094 , <a class="code" href="a00163.html#a726a528">TDS_DBG_DEFAULT</a> = 0xFE 01095 }; 01096 01097 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00143.html">tds_result_info</a> TDSCOMPUTEINFO; 01098 01099 <span class="keyword">typedef</span> <a class="code" href="a00143.html">TDSRESULTINFO</a> <a class="code" href="a00143.html">TDSPARAMINFO</a>; 01100 01101 <span class="keyword">typedef</span> <span class="keyword">struct </span>tds_message 01102 { 01103 TDS_CHAR *server; 01104 TDS_CHAR *message; 01105 TDS_CHAR *proc_name; 01106 TDS_CHAR *sql_state; 01107 TDS_UINT msgno; 01108 TDS_INT line_number; 01109 <span class="comment">/* -1 .. 255 */</span> 01110 TDS_SMALLINT state; 01111 TDS_TINYINT priv_msg_type; 01112 TDS_TINYINT severity; 01113 <span class="comment">/* for library-generated errors */</span> 01114 <span class="keywordtype">int</span> oserr; 01115 } TDSMESSAGE; 01116 01117 <span class="keyword">typedef</span> <span class="keyword">struct </span>tds_upd_col 01118 { 01119 <span class="keyword">struct </span>tds_upd_col *next; 01120 TDS_INT colnamelength; 01121 <span class="keywordtype">char</span> * columnname; 01122 } TDSUPDCOL; 01123 01124 <span class="keyword">typedef</span> <span class="keyword">enum</span> { 01125 TDS_CURSOR_STATE_UNACTIONED = 0 <span class="comment">/* initial value */</span> 01126 , TDS_CURSOR_STATE_REQUESTED = 1 <span class="comment">/* called by ct_cursor */</span> 01127 , TDS_CURSOR_STATE_SENT = 2 <span class="comment">/* sent to server */</span> 01128 , TDS_CURSOR_STATE_ACTIONED = 3 <span class="comment">/* acknowledged by server */</span> 01129 } TDS_CURSOR_STATE; 01130 01131 <span class="keyword">typedef</span> <span class="keyword">struct </span>_tds_cursor_status 01132 { 01133 TDS_CURSOR_STATE declare; 01134 TDS_CURSOR_STATE cursor_row; 01135 TDS_CURSOR_STATE open; 01136 TDS_CURSOR_STATE fetch; 01137 TDS_CURSOR_STATE close; 01138 TDS_CURSOR_STATE dealloc; 01139 } TDS_CURSOR_STATUS; 01140 01141 <span class="keyword">typedef</span> <span class="keyword">enum</span> _tds_cursor_operation 01142 { 01143 TDS_CURSOR_POSITION = 0, 01144 TDS_CURSOR_UPDATE = 1, 01145 TDS_CURSOR_DELETE = 2, 01146 TDS_CURSOR_INSERT = 4 01147 } TDS_CURSOR_OPERATION; 01148 01149 <span class="keyword">typedef</span> <span class="keyword">enum</span> _tds_cursor_fetch 01150 { 01151 TDS_CURSOR_FETCH_NEXT = 1, 01152 TDS_CURSOR_FETCH_PREV, 01153 TDS_CURSOR_FETCH_FIRST, 01154 TDS_CURSOR_FETCH_LAST, 01155 TDS_CURSOR_FETCH_ABSOLUTE, 01156 TDS_CURSOR_FETCH_RELATIVE 01157 } TDS_CURSOR_FETCH; 01158 <a name="l01162"></a><a class="code" href="a00135.html">01162</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00135.html">_tds_cursor</a> 01163 { <a name="l01164"></a><a class="code" href="a00135.html#o6">01164</a> <span class="keyword">struct </span><a class="code" href="a00135.html">_tds_cursor</a> *<a class="code" href="a00135.html#o6">next</a>; <a name="l01165"></a><a class="code" href="a00135.html#o10">01165</a> TDS_INT <a class="code" href="a00135.html#o10">ref_count</a>; <a name="l01166"></a><a class="code" href="a00135.html#o3">01166</a> TDS_TINYINT <a class="code" href="a00135.html#o3">cursor_name_len</a>; <a name="l01167"></a><a class="code" href="a00135.html#o2">01167</a> <span class="keywordtype">char</span> *<a class="code" href="a00135.html#o2">cursor_name</a>; <a name="l01168"></a><a class="code" href="a00135.html#o1">01168</a> TDS_INT <a class="code" href="a00135.html#o1">cursor_id</a>; <a name="l01169"></a><a class="code" href="a00135.html#o7">01169</a> TDS_TINYINT <a class="code" href="a00135.html#o7">options</a>; <a name="l01170"></a><a class="code" href="a00135.html#o5">01170</a> TDS_TINYINT <a class="code" href="a00135.html#o5">hasargs</a>; <a name="l01171"></a><a class="code" href="a00135.html#o9">01171</a> TDS_USMALLINT <a class="code" href="a00135.html#o9">query_len</a>; <a name="l01172"></a><a class="code" href="a00135.html#o8">01172</a> <span class="keywordtype">char</span> *<a class="code" href="a00135.html#o8">query</a>; 01173 <span class="comment">/* TODO for updatable columns */</span> 01174 <span class="comment">/* TDS_TINYINT number_upd_cols; */</span> 01175 <span class="comment">/* TDSUPDCOL *cur_col_list; */</span> <a name="l01176"></a><a class="code" href="a00135.html#o4">01176</a> TDS_INT <a class="code" href="a00135.html#o4">cursor_rows</a>; 01177 <span class="comment">/* TDSPARAMINFO *params; */</span> <a name="l01178"></a><a class="code" href="a00135.html#o13">01178</a> TDS_CURSOR_STATUS <a class="code" href="a00135.html#o13">status</a>; 01179 TDS_SMALLINT srv_status; 01180 <a class="code" href="a00143.html">TDSRESULTINFO</a> *res_info; <a name="l01181"></a><a class="code" href="a00135.html#o14">01181</a> TDS_INT <a class="code" href="a00135.html#o14">type</a>, <a class="code" href="a00135.html#o0">concurrency</a>; 01182 } <a class="code" href="a00135.html">TDSCURSOR</a>; 01183 <a name="l01187"></a><a class="code" href="a00142.html">01187</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00142.html">tds_env</a> 01188 { 01189 <span class="keywordtype">int</span> block_size; 01190 <span class="keywordtype">char</span> *language; 01191 <span class="keywordtype">char</span> *charset; 01192 <span class="keywordtype">char</span> *database; 01193 } <a class="code" href="a00142.html">TDSENV</a>; 01194 <a name="l01198"></a><a class="code" href="a00141.html">01198</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00141.html">tds_dynamic</a> 01199 { <a name="l01200"></a><a class="code" href="a00141.html#o3">01200</a> <span class="keyword">struct </span><a class="code" href="a00141.html">tds_dynamic</a> *<a class="code" href="a00141.html#o3">next</a>; <a name="l01206"></a><a class="code" href="a00141.html#o2">01206</a> <span class="keywordtype">char</span> <span class="keywordtype">id</span>[30]; 01207 <span class="keywordtype">int</span> dyn_state; <a name="l01209"></a><a class="code" href="a00141.html#o4">01209</a> TDS_INT <a class="code" href="a00141.html#o4">num_id</a>; <a name="l01210"></a><a class="code" href="a00141.html#o7">01210</a> TDSPARAMINFO *<a class="code" href="a00141.html#o7">res_info</a>; <a name="l01218"></a><a class="code" href="a00141.html#o5">01218</a> TDSPARAMINFO *<a class="code" href="a00141.html#o5">params</a>; <a name="l01224"></a><a class="code" href="a00141.html#o1">01224</a> <span class="keywordtype">int</span> <a class="code" href="a00141.html#o1">emulated</a>; <a name="l01226"></a><a class="code" href="a00141.html#o6">01226</a> <span class="keywordtype">char</span> *<a class="code" href="a00141.html#o6">query</a>; 01227 } <a class="code" href="a00141.html">TDSDYNAMIC</a>; 01228 01229 <span class="keyword">typedef</span> <span class="keyword">enum</span> { 01230 TDS_MULTIPLE_QUERY, 01231 TDS_MULTIPLE_EXECUTE, 01232 TDS_MULTIPLE_RPC 01233 } TDS_MULTIPLE_TYPE; 01234 01235 <span class="keyword">typedef</span> <span class="keyword">struct </span>tds_multiple 01236 { 01237 TDS_MULTIPLE_TYPE type; 01238 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags; 01239 } TDSMULTIPLE; 01240 01241 <span class="comment">/* forward declaration */</span> 01242 <span class="keyword">typedef</span> <span class="keyword">struct </span>tds_context TDSCONTEXT; 01243 01244 <span class="keyword">struct </span>tds_context 01245 { 01246 TDSLOCALE *locale; 01247 <span class="keywordtype">void</span> *parent; 01248 <span class="comment">/* handlers */</span> 01249 int (*msg_handler) (<span class="keyword">const</span> TDSCONTEXT *, TDSSOCKET *, TDSMESSAGE *); 01250 int (*err_handler) (<span class="keyword">const</span> TDSCONTEXT *, TDSSOCKET *, TDSMESSAGE *); 01251 int (*int_handler) (<span class="keywordtype">void</span> *); 01252 }; 01253 01254 <span class="keyword">enum</span> TDS_ICONV_ENTRY 01255 { 01256 client2ucs2 01257 , client2server_chardata 01258 , iso2server_metadata 01259 , initial_char_conv_count <span class="comment">/* keep last */</span> 01260 }; 01261 01262 <span class="keyword">struct </span>tds_authentication 01263 { 01264 TDS_UCHAR *packet; 01265 <span class="keywordtype">int</span> packet_len; 01266 int (*free)(TDSSOCKET * tds, <span class="keyword">struct </span>tds_authentication * auth); 01267 int (*handle_next)(TDSSOCKET * tds, <span class="keyword">struct </span>tds_authentication * auth, size_t len); 01268 }; 01269 01270 <span class="keyword">typedef</span> <span class="keyword">struct </span>tds_authentication TDSAUTHENTICATION; 01271 <a name="l01275"></a><a class="code" href="a00144.html">01275</a> <span class="keyword">struct </span><a class="code" href="a00144.html">tds_socket</a> 01276 { 01277 <span class="comment">/* fixed and connect time */</span> <a name="l01279"></a><a class="code" href="a00144.html#o42">01279</a> TDS_SYS_SOCKET <a class="code" href="a00144.html#o42">s</a>; 01280 TDS_SMALLINT major_version; 01281 TDS_SMALLINT minor_version; <a name="l01283"></a><a class="code" href="a00144.html#o37">01283</a> TDS_UINT <a class="code" href="a00144.html#o37">product_version</a>; 01284 <span class="keywordtype">char</span> *product_name; 01285 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> capabilities[TDS_MAX_CAPABILITY]; 01286 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> broken_dates; 01287 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> option_flag2; 01288 <span class="comment">/* in/out buffers */</span> <a name="l01290"></a><a class="code" href="a00144.html#o18">01290</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<a class="code" href="a00144.html#o18">in_buf</a>; <a name="l01292"></a><a class="code" href="a00144.html#o31">01292</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<a class="code" href="a00144.html#o31">out_buf</a>; <a name="l01294"></a><a class="code" href="a00144.html#o19">01294</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00144.html#o19">in_buf_max</a>; <a name="l01296"></a><a class="code" href="a00144.html#o23">01296</a> <span class="keywordtype">unsigned</span> <a class="code" href="a00144.html#o23">in_pos</a>; <a name="l01298"></a><a class="code" href="a00144.html#o33">01298</a> <span class="keywordtype">unsigned</span> <a class="code" href="a00144.html#o33">out_pos</a>; <a name="l01300"></a><a class="code" href="a00144.html#o22">01300</a> <span class="keywordtype">unsigned</span> <a class="code" href="a00144.html#o22">in_len</a>; 01301 <span class="comment">/* TODO remove blocksize from env and use out_len ?? */</span> 01302 <span class="comment">/* unsigned out_len; */</span> <a name="l01304"></a><a class="code" href="a00144.html#o21">01304</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00144.html#o21">in_flag</a>; <a name="l01306"></a><a class="code" href="a00144.html#o32">01306</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00144.html#o32">out_flag</a>; <a name="l01308"></a><a class="code" href="a00144.html#o25">01308</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00144.html#o25">last_packet</a>; 01309 <span class="keywordtype">void</span> *parent; <a name="l01315"></a><a class="code" href="a00144.html#o10">01315</a> <a class="code" href="a00143.html">TDSRESULTINFO</a> *<a class="code" href="a00144.html#o10">current_results</a>; 01316 <a class="code" href="a00143.html">TDSRESULTINFO</a> *res_info; 01317 TDS_INT num_comp_info; 01318 TDSCOMPUTEINFO **comp_info; 01319 TDSPARAMINFO *param_info; <a name="l01320"></a><a class="code" href="a00144.html#o8">01320</a> <a class="code" href="a00135.html">TDSCURSOR</a> *<a class="code" href="a00144.html#o8">cur_cursor</a>; <a name="l01321"></a><a class="code" href="a00144.html#o11">01321</a> <a class="code" href="a00135.html">TDSCURSOR</a> *<a class="code" href="a00144.html#o11">cursors</a>; <a name="l01322"></a><a class="code" href="a00144.html#o17">01322</a> TDS_TINYINT <a class="code" href="a00144.html#o17">has_status</a>; <a name="l01323"></a><a class="code" href="a00144.html#o40">01323</a> TDS_INT <a class="code" href="a00144.html#o40">ret_status</a>; 01324 <a class="code" href="a00163.html#a305">TDS_STATE</a> state; <a name="l01326"></a><a class="code" href="a00144.html#o20">01326</a> <span class="keyword">volatile</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00144.html#o20">in_cancel</a>; <a name="l01328"></a><a class="code" href="a00144.html#o41">01328</a> TDS_INT8 <a class="code" href="a00144.html#o41">rows_affected</a>; 01329 <span class="comment">/* timeout stuff from Jeff */</span> 01330 TDS_INT query_timeout; 01331 <a class="code" href="a00142.html">TDSENV</a> env; 01332 01333 <span class="comment">/* dynamic placeholder stuff */</span> <a name="l01334"></a><a class="code" href="a00144.html#o9">01334</a> <span class="comment">/*@dependent@*/</span> <a class="code" href="a00141.html">TDSDYNAMIC</a> *<a class="code" href="a00144.html#o9">cur_dyn</a>; <a name="l01335"></a><a class="code" href="a00144.html#o13">01335</a> <a class="code" href="a00141.html">TDSDYNAMIC</a> *<a class="code" href="a00144.html#o13">dyns</a>; 01337 <span class="keywordtype">int</span> emul_little_endian; 01338 <span class="keywordtype">char</span> *date_fmt; 01339 <span class="keyword">const</span> TDSCONTEXT *tds_ctx; 01340 <span class="keywordtype">int</span> char_conv_count; 01341 TDSICONV **char_convs; 01342 <a name="l01344"></a><a class="code" href="a00144.html#o7">01344</a> TDSCONNECTION *<a class="code" href="a00144.html#o7">connection</a>; 01345 01346 <span class="keywordtype">int</span> spid; 01347 TDS_UCHAR collation[5]; 01348 TDS_UCHAR tds9_transaction[8]; 01349 void (*env_chg_func) (TDSSOCKET * tds, <span class="keywordtype">int</span> type, <span class="keywordtype">char</span> *oldval, <span class="keywordtype">char</span> *newval); 01350 <span class="keywordtype">int</span> internal_sp_called; 01351 01352 <span class="keywordtype">void</span> *tls_session; 01353 <span class="keywordtype">void</span> *tls_credentials; 01354 TDSAUTHENTICATION *authentication; 01355 <span class="keywordtype">int</span> option_value; 01356 }; 01357 01358 <span class="keywordtype">int</span> tds_init_write_buf(TDSSOCKET * tds); 01359 <span class="keywordtype">void</span> tds_free_result_info(<a class="code" href="a00143.html">TDSRESULTINFO</a> * info); 01360 <span class="keywordtype">void</span> tds_free_socket(TDSSOCKET * tds); 01361 <span class="keywordtype">void</span> tds_free_connection(TDSCONNECTION * connection); 01362 <span class="keywordtype">void</span> tds_free_all_results(TDSSOCKET * tds); 01363 <span class="keywordtype">void</span> tds_free_results(<a class="code" href="a00143.html">TDSRESULTINFO</a> * res_info); 01364 <span class="keywordtype">void</span> tds_free_param_results(TDSPARAMINFO * param_info); 01365 <span class="keywordtype">void</span> <a class="code" href="a00289.html#ga5">tds_free_param_result</a>(TDSPARAMINFO * param_info); 01366 <span class="keywordtype">void</span> tds_free_msg(TDSMESSAGE * message); 01367 <span class="keywordtype">void</span> tds_cursor_deallocated(TDSSOCKET *tds, <a class="code" href="a00135.html">TDSCURSOR</a> *cursor); 01368 <span class="keywordtype">void</span> tds_release_cursor(TDSSOCKET *tds, <a class="code" href="a00135.html">TDSCURSOR</a> *cursor); 01369 <span class="keywordtype">void</span> tds_free_bcp_column_data(BCPCOLDATA * coldata); 01370 01371 <span class="keywordtype">int</span> tds_put_n(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">int</span> n); 01372 <span class="keywordtype">int</span> <a class="code" href="a00291.html#ga22">tds_put_string</a>(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len); 01373 <span class="keywordtype">int</span> tds_put_int(TDSSOCKET * tds, TDS_INT i); 01374 <span class="keywordtype">int</span> tds_put_int8(TDSSOCKET * tds, TDS_INT8 i); 01375 <span class="keywordtype">int</span> tds_put_smallint(TDSSOCKET * tds, TDS_SMALLINT si); <a name="l01377"></a><a class="code" href="a00163.html#a253">01377</a> <span class="preprocessor">#define tds_put_tinyint(tds, ti) tds_put_byte(tds,ti)</span> 01378 <span class="preprocessor"></span><span class="keywordtype">int</span> tds_put_byte(TDSSOCKET * tds, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c); 01379 <a class="code" href="a00143.html">TDSRESULTINFO</a> *tds_alloc_results(<span class="keywordtype">int</span> num_cols); 01380 TDSCOMPUTEINFO **tds_alloc_compute_results(TDSSOCKET * tds, <span class="keywordtype">int</span> num_cols, <span class="keywordtype">int</span> by_cols); 01381 TDSCONTEXT *tds_alloc_context(<span class="keywordtype">void</span> * parent); 01382 <span class="keywordtype">void</span> tds_free_context(TDSCONTEXT * locale); 01383 TDSSOCKET *tds_alloc_socket(TDSCONTEXT * context, <span class="keywordtype">int</span> bufsize); 01384 01385 <span class="comment">/* config.c */</span> 01386 <span class="keyword">const</span> <a class="code" href="a00134.html">TDS_COMPILETIME_SETTINGS</a> *<a class="code" href="a00286.html#ga24">tds_get_compiletime_settings</a>(<span class="keywordtype">void</span>); 01387 <span class="keyword">typedef</span> void (*TDSCONFPARSE) (<span class="keyword">const</span> <span class="keywordtype">char</span> *option, <span class="keyword">const</span> <span class="keywordtype">char</span> *value, <span class="keywordtype">void</span> *param); 01388 <span class="keywordtype">int</span> <a class="code" href="a00286.html#ga8">tds_read_conf_section</a>(FILE * in, <span class="keyword">const</span> <span class="keywordtype">char</span> *section, TDSCONFPARSE tds_conf_parse, <span class="keywordtype">void</span> *parse_param); 01389 <span class="keywordtype">int</span> <a class="code" href="a00286.html#ga4">tds_read_conf_file</a>(TDSCONNECTION * connection, <span class="keyword">const</span> <span class="keywordtype">char</span> *server); 01390 TDSCONNECTION *<a class="code" href="a00286.html#ga0">tds_read_config_info</a>(TDSSOCKET * tds, TDSLOGIN * login, TDSLOCALE * locale); 01391 <span class="keywordtype">void</span> <a class="code" href="a00286.html#ga1">tds_fix_connection</a>(TDSCONNECTION * connection); 01392 <span class="keywordtype">void</span> <a class="code" href="a00286.html#ga15">tds_config_verstr</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *tdsver, TDSCONNECTION * connection); 01393 <span class="keywordtype">void</span> <a class="code" href="a00286.html#ga17">tds_lookup_host</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *servername, <span class="keywordtype">char</span> *ip); 01394 <span class="keywordtype">int</span> <a class="code" href="a00286.html#ga16">tds_set_interfaces_file_loc</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *interfloc); 01395 01396 TDSLOCALE *tds_get_locale(<span class="keywordtype">void</span>); 01397 <span class="keywordtype">int</span> <a class="code" href="a00289.html#ga12">tds_alloc_row</a>(<a class="code" href="a00143.html">TDSRESULTINFO</a> * res_info); 01398 <span class="keywordtype">int</span> tds_alloc_compute_row(TDSCOMPUTEINFO * res_info); 01399 BCPCOLDATA * tds_alloc_bcp_column_data(<span class="keywordtype">int</span> column_size); 01400 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *tds7_crypt_pass(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *clear_pass, <span class="keywordtype">int</span> len, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *crypt_pass); 01401 <a class="code" href="a00141.html">TDSDYNAMIC</a> *<a class="code" href="a00293.html#ga30">tds_lookup_dynamic</a>(TDSSOCKET * tds, <span class="keywordtype">char</span> *<span class="keywordtype">id</span>); 01402 <span class="comment">/*@observer@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *tds_prtype(<span class="keywordtype">int</span> token); 01403 01404 01405 01406 <span class="comment">/* iconv.c */</span> 01407 <span class="keywordtype">void</span> tds_iconv_open(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset); 01408 <span class="keywordtype">void</span> tds_iconv_close(TDSSOCKET * tds); 01409 <span class="keywordtype">void</span> tds_srv_charset_changed(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset); 01410 <span class="keywordtype">void</span> tds7_srv_charset_changed(TDSSOCKET * tds, <span class="keywordtype">int</span> sql_collate, <span class="keywordtype">int</span> lcid); 01411 <span class="keywordtype">int</span> tds_iconv_alloc(TDSSOCKET * tds); 01412 <span class="keywordtype">void</span> tds_iconv_free(TDSSOCKET * tds); 01413 TDSICONV *<a class="code" href="a00288.html#ga20">tds_iconv_from_collate</a>(TDSSOCKET * tds, <span class="keywordtype">int</span> sql_collate, <span class="keywordtype">int</span> lcid); 01414 01415 <span class="comment">/* threadsafe.c */</span> 01416 <span class="keywordtype">char</span> *tds_timestamp_str(<span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> maxlen); 01417 <span class="keyword">struct </span>hostent *tds_gethostbyname_r(<span class="keyword">const</span> <span class="keywordtype">char</span> *servername, <span class="keyword">struct</span> hostent *result, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> buflen, <span class="keywordtype">int</span> *h_errnop); 01418 <span class="keyword">struct </span>hostent *tds_gethostbyaddr_r(<span class="keyword">const</span> <span class="keywordtype">char</span> *addr, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> type, <span class="keyword">struct</span> hostent *result, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> buflen, 01419 <span class="keywordtype">int</span> *h_errnop); 01420 <span class="keyword">struct </span>servent *tds_getservbyname_r(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> *proto, <span class="keyword">struct</span> servent *result, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> buflen); 01421 <span class="preprocessor">#ifdef INADDR_NONE</span> 01422 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">char</span> *tds_inet_ntoa_r(<span class="keyword">struct</span> in_addr iaddr, <span class="keywordtype">char</span> *ip, size_t len); 01423 <span class="preprocessor">#endif</span> 01424 <span class="preprocessor"></span><span class="keywordtype">char</span> *tds_get_homedir(<span class="keywordtype">void</span>); 01425 01426 <span class="comment">/* mem.c */</span> 01427 TDSPARAMINFO *<a class="code" href="a00289.html#ga4">tds_alloc_param_result</a>(TDSPARAMINFO * old_param); 01428 <span class="keywordtype">void</span> <a class="code" href="a00289.html#ga2">tds_free_input_params</a>(<a class="code" href="a00141.html">TDSDYNAMIC</a> * dyn); 01429 <span class="keywordtype">void</span> <a class="code" href="a00289.html#ga3">tds_free_dynamic</a>(TDSSOCKET * tds, <a class="code" href="a00141.html">TDSDYNAMIC</a> * dyn); 01430 TDSSOCKET *tds_realloc_socket(TDSSOCKET * tds, <span class="keywordtype">int</span> bufsize); 01431 <span class="keywordtype">char</span> *tds_alloc_client_sqlstate(<span class="keywordtype">int</span> msgno); 01432 <span class="keywordtype">char</span> *tds_alloc_lookup_sqlstate(TDSSOCKET * tds, <span class="keywordtype">int</span> msgno); 01433 TDSLOGIN *tds_alloc_login(<span class="keywordtype">void</span>); 01434 <a class="code" href="a00141.html">TDSDYNAMIC</a> *<a class="code" href="a00289.html#ga1">tds_alloc_dynamic</a>(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span>); 01435 <span class="keywordtype">void</span> tds_free_login(TDSLOGIN * login); 01436 TDSCONNECTION *<a class="code" href="a00289.html#ga23">tds_alloc_connection</a>(TDSLOCALE * locale); 01437 TDSLOCALE *tds_alloc_locale(<span class="keywordtype">void</span>); 01438 <span class="keywordtype">void</span> *<a class="code" href="a00289.html#ga7">tds_alloc_param_data</a>(<a class="code" href="a00140.html">TDSCOLUMN</a> * curparam); 01439 <span class="keywordtype">void</span> tds_free_locale(TDSLOCALE * locale); 01440 <a class="code" href="a00135.html">TDSCURSOR</a> * tds_alloc_cursor(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, TDS_INT namelen, <span class="keyword">const</span> <span class="keywordtype">char</span> *query, TDS_INT querylen); 01441 <span class="keywordtype">void</span> tds_free_row(<a class="code" href="a00143.html">TDSRESULTINFO</a> * res_info, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *row); 01442 01443 <span class="comment">/* login.c */</span> 01444 <span class="keywordtype">void</span> tds_set_packet(TDSLOGIN * tds_login, <span class="keywordtype">int</span> packet_size); 01445 <span class="keywordtype">void</span> tds_set_port(TDSLOGIN * tds_login, <span class="keywordtype">int</span> port); 01446 <span class="keywordtype">void</span> tds_set_passwd(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *password); 01447 <span class="keywordtype">void</span> tds_set_bulk(TDSLOGIN * tds_login, TDS_TINYINT enabled); 01448 <span class="keywordtype">void</span> tds_set_user(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *username); 01449 <span class="keywordtype">void</span> tds_set_app(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *application); 01450 <span class="keywordtype">void</span> tds_set_host(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *hostname); 01451 <span class="keywordtype">void</span> tds_set_server_addr(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *server_addr); 01452 <span class="keywordtype">void</span> tds_set_library(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *library); 01453 <span class="keywordtype">void</span> tds_set_server(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *server); 01454 <span class="keywordtype">void</span> tds_set_client_charset(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *charset); 01455 <span class="keywordtype">void</span> tds_set_language(TDSLOGIN * tds_login, <span class="keyword">const</span> <span class="keywordtype">char</span> *language); 01456 <span class="keywordtype">void</span> tds_set_version(TDSLOGIN * tds_login, TDS_TINYINT major_ver, TDS_TINYINT minor_ver); 01457 <span class="keywordtype">void</span> tds_set_capabilities(TDSLOGIN * tds_login, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *capabilities, <span class="keywordtype">int</span> size); 01458 <span class="keywordtype">int</span> tds_connect(TDSSOCKET * tds, TDSCONNECTION * connection); 01459 01460 <span class="comment">/* query.c */</span> 01461 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga4">tds_submit_query</a>(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *query); 01462 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga6">tds_submit_query_params</a>(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *query, TDSPARAMINFO * params); 01463 <span class="keywordtype">int</span> tds_submit_queryf(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *queryf, ...); 01464 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga21">tds_submit_prepare</a>(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *query, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span>, <a class="code" href="a00141.html">TDSDYNAMIC</a> ** dyn_out, TDSPARAMINFO * params); 01465 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga22">tds_submit_execdirect</a>(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *query, TDSPARAMINFO * params); 01466 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga27">tds_submit_execute</a>(TDSSOCKET * tds, <a class="code" href="a00141.html">TDSDYNAMIC</a> * dyn); 01467 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga32">tds_send_cancel</a>(TDSSOCKET * tds); 01468 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00290.html#ga10">tds_next_placeholder</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *start); 01469 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga11">tds_count_placeholders</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *query); 01470 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga29">tds_get_dynid</a>(TDSSOCKET * tds, <span class="keywordtype">char</span> **<span class="keywordtype">id</span>); 01471 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga30">tds_submit_unprepare</a>(TDSSOCKET * tds, <a class="code" href="a00141.html">TDSDYNAMIC</a> * dyn); 01472 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga31">tds_submit_rpc</a>(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *rpc_name, TDSPARAMINFO * params); 01473 <span class="keywordtype">int</span> tds_submit_optioncmd(TDSSOCKET * tds, TDS_OPTION_CMD command, TDS_OPTION option, TDS_OPTION_ARG *param, TDS_INT param_size); 01474 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga34">tds_quote_id</a>(TDSSOCKET * tds, <span class="keywordtype">char</span> *buffer, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span>, <span class="keywordtype">int</span> idlen); 01475 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga35">tds_quote_string</a>(TDSSOCKET * tds, <span class="keywordtype">char</span> *buffer, <span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len); 01476 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00290.html#ga9">tds_skip_quoted</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *s); 01477 01478 <span class="keywordtype">int</span> tds_cursor_declare(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor, TDSPARAMINFO *params, <span class="keywordtype">int</span> *send); 01479 <span class="keywordtype">int</span> tds_cursor_setrows(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor, <span class="keywordtype">int</span> *send); 01480 <span class="keywordtype">int</span> tds_cursor_open(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor, TDSPARAMINFO *params, <span class="keywordtype">int</span> *send); 01481 <span class="keywordtype">int</span> tds_cursor_fetch(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor, TDS_CURSOR_FETCH fetch_type, TDS_INT i_row); 01482 <span class="keywordtype">int</span> tds_cursor_close(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor); 01483 <span class="keywordtype">int</span> <a class="code" href="a00290.html#ga45">tds_cursor_dealloc</a>(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor); 01484 <span class="keywordtype">int</span> tds_cursor_update(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor, TDS_CURSOR_OPERATION op, TDS_INT i_row, TDSPARAMINFO * params); 01485 <span class="keywordtype">int</span> tds_cursor_setname(TDSSOCKET * tds, <a class="code" href="a00135.html">TDSCURSOR</a> * cursor); 01486 01487 <span class="keywordtype">int</span> tds_multiple_init(TDSSOCKET *tds, TDSMULTIPLE *multiple, TDS_MULTIPLE_TYPE type); 01488 <span class="keywordtype">int</span> tds_multiple_done(TDSSOCKET *tds, TDSMULTIPLE *multiple); 01489 <span class="keywordtype">int</span> tds_multiple_query(TDSSOCKET *tds, TDSMULTIPLE *multiple, <span class="keyword">const</span> <span class="keywordtype">char</span> *query, TDSPARAMINFO * params); 01490 <span class="keywordtype">int</span> tds_multiple_execute(TDSSOCKET *tds, TDSMULTIPLE *multiple, <a class="code" href="a00141.html">TDSDYNAMIC</a> * dyn); 01491 01492 <span class="comment">/* token.c */</span> 01493 <span class="keywordtype">int</span> <a class="code" href="a00293.html#ga29">tds_process_cancel</a>(TDSSOCKET * tds); 01494 <span class="keywordtype">void</span> tds_swap_datatype(<span class="keywordtype">int</span> coltype, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf); 01495 <span class="keywordtype">void</span> tds_swap_numeric(TDS_NUMERIC *num); 01496 <span class="keywordtype">int</span> <a class="code" href="a00293.html#ga34">tds_get_token_size</a>(<span class="keywordtype">int</span> marker); 01497 <span class="keywordtype">int</span> <a class="code" href="a00293.html#ga2">tds_process_login_tokens</a>(TDSSOCKET * tds); 01498 <span class="keywordtype">int</span> <a class="code" href="a00293.html#ga5">tds_process_simple_query</a>(TDSSOCKET * tds); 01499 <span class="keywordtype">int</span> tds5_send_optioncmd(TDSSOCKET * tds, TDS_OPTION_CMD tds_command, TDS_OPTION tds_option, TDS_OPTION_ARG * tds_argument, 01500 TDS_INT * tds_argsize); 01501 <span class="keywordtype">int</span> <a class="code" href="a00293.html#ga4">tds_process_tokens</a>(TDSSOCKET * tds, <span class="comment">/*@out@*/</span> TDS_INT * result_type, <span class="comment">/*@out@*/</span> <span class="keywordtype">int</span> *done_flags, <span class="keywordtype">unsigned</span> flag); 01502 01503 <span class="comment">/* data.c */</span> 01504 <span class="keywordtype">void</span> tds_set_param_type(TDSSOCKET * tds, <a class="code" href="a00140.html">TDSCOLUMN</a> * curcol, TDS_SERVER_TYPE type); 01505 <span class="keywordtype">void</span> tds_set_column_type(TDSSOCKET * tds, <a class="code" href="a00140.html">TDSCOLUMN</a> * curcol, <span class="keywordtype">int</span> type); 01506 01507 01508 <span class="comment">/* tds_convert.c */</span> 01509 TDS_INT <a class="code" href="a00287.html#ga42">tds_datecrack</a>(TDS_INT datetype, <span class="keyword">const</span> <span class="keywordtype">void</span> *di, <a class="code" href="a00145.html">TDSDATEREC</a> * dr); 01510 <span class="keywordtype">int</span> <a class="code" href="a00287.html#ga17">tds_get_conversion_type</a>(<span class="keywordtype">int</span> srctype, <span class="keywordtype">int</span> colsize); 01511 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> tds_hex_digits[]; 01512 01513 <span class="comment">/* write.c */</span> 01514 <span class="keywordtype">int</span> <a class="code" href="a00291.html#ga29">tds_flush_packet</a>(TDSSOCKET * tds); 01515 <span class="keywordtype">int</span> tds_put_buf(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> dsize, <span class="keywordtype">int</span> ssize); 01516 01517 <span class="comment">/* read.c */</span> 01518 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> tds_get_byte(TDSSOCKET * tds); 01519 <span class="keywordtype">void</span> <a class="code" href="a00291.html#ga11">tds_unget_byte</a>(TDSSOCKET * tds); 01520 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> tds_peek(TDSSOCKET * tds); 01521 TDS_SMALLINT <a class="code" href="a00291.html#ga13">tds_get_smallint</a>(TDSSOCKET * tds); 01522 TDS_INT <a class="code" href="a00291.html#ga14">tds_get_int</a>(TDSSOCKET * tds); 01523 TDS_INT8 tds_get_int8(TDSSOCKET * tds); 01524 <span class="keywordtype">int</span> <a class="code" href="a00291.html#ga16">tds_get_string</a>(TDSSOCKET * tds, <span class="keywordtype">int</span> string_len, <span class="keywordtype">char</span> *dest, size_t dest_size); 01525 <span class="keywordtype">int</span> <a class="code" href="a00291.html#ga17">tds_get_char_data</a>(TDSSOCKET * tds, <span class="keywordtype">char</span> *dest, size_t wire_size, <a class="code" href="a00140.html">TDSCOLUMN</a> * curcol); 01526 <span class="keywordtype">void</span> *<a class="code" href="a00291.html#ga18">tds_get_n</a>(TDSSOCKET * tds, <span class="comment">/*@out@*/</span> <span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> *dest, <span class="keywordtype">int</span> n); 01527 <span class="keywordtype">int</span> <a class="code" href="a00291.html#ga19">tds_get_size_by_type</a>(<span class="keywordtype">int</span> servertype); 01528 01529 01530 <span class="comment">/* util.c */</span> 01531 <span class="keywordtype">int</span> tdserror (<span class="keyword">const</span> TDSCONTEXT * tds_ctx, TDSSOCKET * tds, <span class="keywordtype">int</span> msgno, <span class="keywordtype">int</span> errnum); 01532 <a class="code" href="a00163.html#a305">TDS_STATE</a> tds_set_state(TDSSOCKET * tds, TDS_STATE state); 01533 <span class="keywordtype">void</span> tds_set_parent(TDSSOCKET * tds, <span class="keywordtype">void</span> *the_parent); 01534 <span class="keywordtype">void</span> *tds_get_parent(TDSSOCKET * tds); 01535 <span class="keywordtype">int</span> tds_swap_bytes(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> bytes); 01536 <span class="keywordtype">int</span> tds_version(TDSSOCKET * <a class="code" href="a00144.html">tds_socket</a>, <span class="keywordtype">char</span> *pversion_string); 01537 <span class="keywordtype">void</span> tdsdump_off(<span class="keywordtype">void</span>); 01538 <span class="keywordtype">void</span> tdsdump_on(<span class="keywordtype">void</span>); 01539 <span class="keywordtype">int</span> tdsdump_open(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename); 01540 <span class="keywordtype">void</span> tdsdump_close(<span class="keywordtype">void</span>); 01541 <span class="keywordtype">void</span> tdsdump_dump_buf(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level_line, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg, <span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">int</span> length); 01542 <span class="keywordtype">void</span> tdsdump_log(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level_line, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...) 01543 #<span class="keywordflow">if</span> defined(__GNUC__) && __GNUC__ >= 2 01544 __attribute__ ((__format__ (__printf__, 3, 4))) 01545 #endif 01546 ; 01547 <span class="keyword">extern</span> <span class="keywordtype">int</span> tds_debug_flags; 01548 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tds_gettime_ms(<span class="keywordtype">void</span>); 01549 01550 <span class="comment">/* net.c */</span> 01551 <span class="keywordtype">int</span> tds_open_socket(TDSSOCKET * tds, <span class="keyword">const</span> <span class="keywordtype">char</span> *ip_addr, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> port, <span class="keywordtype">int</span> timeout); 01552 <span class="keywordtype">int</span> tds_close_socket(TDSSOCKET * tds); 01553 <span class="keywordtype">int</span> <a class="code" href="a00291.html#ga6">tds_read_packet</a>(TDSSOCKET * tds); 01554 <span class="keywordtype">int</span> tds_write_packet(TDSSOCKET * tds, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">final</span>); 01555 <span class="keywordtype">int</span> <a class="code" href="a00291.html#ga9">tds7_get_instance_port</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *ip_addr, <span class="keyword">const</span> <span class="keywordtype">char</span> *instance); 01556 <span class="keywordtype">int</span> tds_ssl_init(TDSSOCKET *tds); 01557 <span class="keywordtype">void</span> tds_ssl_deinit(TDSSOCKET *tds); 01558 01559 01560 01561 <span class="comment">/* vstrbuild.c */</span> 01562 <span class="keywordtype">int</span> tds_vstrbuild(<span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> buflen, <span class="keywordtype">int</span> *resultlen, <span class="keywordtype">char</span> *text, <span class="keywordtype">int</span> textlen, <span class="keyword">const</span> <span class="keywordtype">char</span> *formats, <span class="keywordtype">int</span> formatlen, 01563 va_list ap); 01564 01565 <span class="comment">/* numeric.c */</span> 01566 <span class="keywordtype">char</span> *tds_money_to_string(<span class="keyword">const</span> TDS_MONEY * money, <span class="keywordtype">char</span> *s); 01567 TDS_INT tds_numeric_to_string(<span class="keyword">const</span> TDS_NUMERIC * numeric, <span class="keywordtype">char</span> *s); 01568 TDS_INT tds_numeric_change_prec_scale(TDS_NUMERIC * numeric, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> new_prec, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> new_scale); 01569 01570 <span class="comment">/* getmac.c */</span> 01571 <span class="keywordtype">void</span> tds_getmac(<span class="keywordtype">int</span> s, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> mac[6]); 01572 01573 TDSAUTHENTICATION * <a class="code" href="a00285.html#ga9">tds_ntlm_get_auth</a>(TDSSOCKET * tds); 01574 TDSAUTHENTICATION * tds_gss_get_auth(TDSSOCKET * tds); 01575 01576 <span class="preprocessor">#define IS_TDS42(x) (x->major_version==4 && x->minor_version==2)</span> 01577 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS46(x) (x->major_version==4 && x->minor_version==6)</span> 01578 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS50(x) (x->major_version==5 && x->minor_version==0)</span> 01579 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS70(x) (x->major_version==7 && x->minor_version==0)</span> 01580 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS80(x) (x->major_version==8 && x->minor_version==0)</span> 01581 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS90(x) (x->major_version==9 && x->minor_version==0)</span> 01582 <span class="preprocessor"></span> 01583 <span class="preprocessor">#define IS_TDS7_PLUS(x) ((x)->major_version>=7)</span> 01584 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS8_PLUS(x) ((x)->major_version>=8)</span> 01585 <span class="preprocessor"></span> 01586 <span class="preprocessor">#define IS_TDSDEAD(x) (((x) == NULL) || TDS_IS_SOCKET_INVALID((x)->s))</span> 01587 <span class="preprocessor"></span> <a name="l01589"></a><a class="code" href="a00163.html#a263">01589</a> <span class="preprocessor">#define TDS_IS_SYBASE(x) (!(x->product_version & 0x80000000u))</span> 01590 <span class="preprocessor"></span> <a name="l01591"></a><a class="code" href="a00163.html#a264">01591</a> <span class="preprocessor">#define TDS_IS_MSSQL(x) ((x->product_version & 0x80000000u)!=0)</span> 01592 <span class="preprocessor"></span> <a name="l01596"></a><a class="code" href="a00163.html#a265">01596</a> <span class="preprocessor">#define TDS_MS_VER(maj,min,x) (0x80000000u|((maj)<<24)|((min)<<16)|(x))</span> 01597 <span class="preprocessor"></span> 01598 <span class="comment">/* TODO test if not similar to ms one*/</span> <a name="l01600"></a><a class="code" href="a00163.html#a266">01600</a> <span class="preprocessor">#define TDS_SYB_VER(maj,min,x) (((maj)<<24)|((min)<<16)|(x)<<8)</span> 01601 <span class="preprocessor"></span> 01602 <span class="preprocessor">#ifdef __cplusplus</span> 01603 <span class="preprocessor"></span><span class="preprocessor">#if 0</span> 01604 <span class="preprocessor"></span>{ 01605 <span class="preprocessor">#endif</span> 01606 <span class="preprocessor"></span>} 01607 <span class="preprocessor">#endif</span> 01608 <span class="preprocessor"></span> 01609 <span class="preprocessor">#endif </span><span class="comment">/* _tds_h_ */</span> </pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed May 7 19:22:09 2008 for FreeTDS API by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address> </body> </html>