Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-release > by-pkgid > f0bc842dcf666302badcfd2545f3387c > files > 87

libfreetds0-doc-0.82-12.mga1.i586.rpm

<!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&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;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 &lt;stdarg.h&gt;</span>
00026 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
00027 <span class="preprocessor">#include &lt;time.h&gt;</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 &lt;&lt; (TDS_TOKEN_RES_##flag*2)), TDS_STOPAT_##flag = (2 &lt;&lt; (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"> * &lt;rant&gt; 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! &lt;/rant&gt;</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)&lt;&lt;8) &amp; 0xFF00)   | \</span>
00670 <span class="preprocessor">          ((((unsigned short)value)&gt;&gt;8) &amp; 0x00FF))</span>
00671 <span class="preprocessor"></span>
00672 <span class="preprocessor">#define TDS_BYTE_SWAP32(value)                     \</span>
00673 <span class="preprocessor">         (((((unsigned long)value)&lt;&lt;24) &amp; 0xFF000000)  | \</span>
00674 <span class="preprocessor">          ((((unsigned long)value)&lt;&lt; 8) &amp; 0x00FF0000)  | \</span>
00675 <span class="preprocessor">          ((((unsigned long)value)&gt;&gt; 8) &amp; 0x0000FF00)  | \</span>
00676 <span class="preprocessor">          ((((unsigned long)value)&gt;&gt;24) &amp; 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&gt;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) &amp;&amp; is_char_type(y)) || ((is_unicode_type(x) &amp;&amp; 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__ &lt;&lt; 4) | 7)</span>
01056 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_INFO2   __FILE__, ((__LINE__ &lt;&lt; 4) | 6)</span>
01057 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_INFO1   __FILE__, ((__LINE__ &lt;&lt; 4) | 5)</span>
01058 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_NETWORK __FILE__, ((__LINE__ &lt;&lt; 4) | 4)</span>
01059 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_WARN    __FILE__, ((__LINE__ &lt;&lt; 4) | 3)</span>
01060 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_ERROR   __FILE__, ((__LINE__ &lt;&lt; 4) | 2)</span>
01061 <span class="preprocessor"></span><span class="preprocessor">#define TDS_DBG_SEVERE  __FILE__, ((__LINE__ &lt;&lt; 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 &lt;&lt; 0)     
01085         , <a class="code" href="a00163.html#a726a521">TDS_DBG_API</a> =    (1 &lt;&lt; 1)     
01086         , <a class="code" href="a00163.html#a726a522">TDS_DBG_ASYNC</a> =  (1 &lt;&lt; 2)     
01087         , <a class="code" href="a00163.html#a726a523">TDS_DBG_DIAG</a> =   (1 &lt;&lt; 3)     
01088         , TDS_DBG_error =  (1 &lt;&lt; 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 &lt;&lt; 5)     
01092         , <a class="code" href="a00163.html#a726a526">TDS_DBG_LIBTDS</a> = (1 &lt;&lt; 6)     
01093         , <a class="code" href="a00163.html#a726a527">TDS_DBG_CONFIG</a> = (1 &lt;&lt; 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__) &amp;&amp; __GNUC__ &gt;= 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-&gt;major_version==4 &amp;&amp; x-&gt;minor_version==2)</span>
01577 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS46(x) (x-&gt;major_version==4 &amp;&amp; x-&gt;minor_version==6)</span>
01578 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS50(x) (x-&gt;major_version==5 &amp;&amp; x-&gt;minor_version==0)</span>
01579 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS70(x) (x-&gt;major_version==7 &amp;&amp; x-&gt;minor_version==0)</span>
01580 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS80(x) (x-&gt;major_version==8 &amp;&amp; x-&gt;minor_version==0)</span>
01581 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS90(x) (x-&gt;major_version==9 &amp;&amp; x-&gt;minor_version==0)</span>
01582 <span class="preprocessor"></span>
01583 <span class="preprocessor">#define IS_TDS7_PLUS(x) ((x)-&gt;major_version&gt;=7)</span>
01584 <span class="preprocessor"></span><span class="preprocessor">#define IS_TDS8_PLUS(x) ((x)-&gt;major_version&gt;=8)</span>
01585 <span class="preprocessor"></span>
01586 <span class="preprocessor">#define IS_TDSDEAD(x) (((x) == NULL) || TDS_IS_SOCKET_INVALID((x)-&gt;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-&gt;product_version &amp; 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-&gt;product_version &amp; 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)&lt;&lt;24)|((min)&lt;&lt;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)&lt;&lt;24)|((min)&lt;&lt;16)|(x)&lt;&lt;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&nbsp;
<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>