File: sybdb.h

package info (click to toggle)
freetds 1.3.17%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 9,104 kB
  • sloc: ansic: 98,429; sh: 5,044; xml: 4,472; sql: 1,488; makefile: 1,077; perl: 509; php: 22
file content (1332 lines) | stat: -rw-r--r-- 65,093 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
/* FreeTDS - Library of routines accessing Sybase and Microsoft databases
 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  Brian Bruns
 * Copyright (C) 2010, 2011  Frediano Ziglio
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

/** \file ../include/sybdb.h
 *  \brief Primary include file for db-lib applications.
 *  
 *  Declares macros, functions, enumerated types, and defined tokens 
 *  used by the db-lib API.
 */

#ifndef _sybdb_h_
#define _sybdb_h_

#include "tds_sysdep_public.h"

#undef TDS_STATIC_CAST
#ifdef __cplusplus
#define TDS_STATIC_CAST(type, a) static_cast<type>(a)
extern "C"
{
#if 0
}
#endif
#else
#define TDS_STATIC_CAST(type, a) ((type)(a))
#endif

#ifdef FALSE
#undef FALSE
#endif
#ifdef TRUE
#undef TRUE
#endif
#define FALSE 0
#define TRUE  1

#define DBSAVE   1
#define DBNOSAVE 0
#define DBNOERR  -1

#define INT_EXIT	0
#define INT_CONTINUE	1
#define INT_CANCEL	2
#define INT_TIMEOUT	3

#define DBMAXNUMLEN 33
/* https://msdn.microsoft.com/en-us/library/ms176061.aspx */
#define DBMAXNAME   128

/**
 * DBVERSION_xxx are used with dbsetversion()
 */
#define DBVERSION_UNKNOWN 0
#define DBVERSION_46      1
#define DBVERSION_100     2
#define DBVERSION_42      3
#define DBVERSION_70      4
#define DBVERSION_71      5
#define DBVERSION_72      6
#define DBVERSION_73      7
#define DBVERSION_74      8

/* these two are defined by Microsoft for dbsetlversion() */
#define DBVER42 	  DBVERSION_42
#define DBVER60 	  DBVERSION_70	/* our best approximation */

/**
 * DBTDS_xxx are returned by DBTDS()
 * The integer values of the constants are poorly chosen.  
 */
#define DBTDS_UNKNOWN           0
#define DBTDS_2_0               1	/* pre 4.0 SQL Server */
#define DBTDS_3_4               2	/* Microsoft SQL Server (3.0) */
#define DBTDS_4_0               3	/* 4.0 SQL Server */
#define DBTDS_4_2               4	/* 4.2 SQL Server */
#define DBTDS_4_6               5	/* 2.0 OpenServer and 4.6 SQL Server. */
#define DBTDS_4_9_5             6	/* 4.9.5 (NCR) SQL Server */
#define DBTDS_5_0               7	/* 5.0 SQL Server */
#define DBTDS_7_0               8	/* Microsoft SQL Server 7.0 */
#define DBTDS_8_0               9	/* Microsoft SQL Server 2000 */
#define DBTDS_9_0               10	/* Microsoft SQL Server 2005 */
#define DBTDS_7_1               9	/* Microsoft SQL Server 2000 */
#define DBTDS_7_2               10	/* Microsoft SQL Server 2005 */
#define DBTDS_7_3               11	/* Microsoft SQL Server 2008 */
#define DBTDS_7_4               12	/* Microsoft SQL Server 2012/2014 */

#define DBTXPLEN 16

#define BCPMAXERRS 1
#define BCPFIRST 2
#define BCPLAST 3
#define BCPBATCH 4
#define BCPKEEPIDENTITY	8

#define BCPLABELED 5
#define BCPHINTS 6

#define DBCMDNONE 0
#define DBCMDPEND 1
#define DBCMDSENT 2

typedef int RETCODE;

typedef void DBCURSOR;
typedef void DBXLATE;
typedef void DBSORTORDER;
typedef void DBLOGINFO;
typedef void *DBVOIDPTR;
typedef short SHORT;
typedef unsigned short USHORT;
typedef int (*INTFUNCPTR) (void *, ...);
typedef int (*DBWAITFUNC) (void);
typedef DBWAITFUNC(*DB_DBBUSY_FUNC) (void *dbproc);
typedef void (*DB_DBIDLE_FUNC) (DBWAITFUNC dfunc, void *dbproc);
typedef int (*DB_DBCHKINTR_FUNC) (void *dbproc);
typedef int (*DB_DBHNDLINTR_FUNC) (void *dbproc);

#ifndef __INCvxWorksh
/* VxWorks already defines STATUS and BOOL. Compiler gets mad if you 
** redefine them. */
/* __INCvxWorksh will get #defined by std. include files included from tds.h
*/
#ifdef STATUS
/* On DU4.0d we get a conflicting STATUS definition from arpa/nameser.h
   when _REENTRANT is defined.
*/
#undef STATUS
#endif
typedef int STATUS;
#if !defined(_WINDEF_) && !defined(_WINDEF_H) && !defined(DOS32X)
typedef int BOOL;
#endif
#endif

#ifndef _tds_h_
/* copied from tds.h */
/* TODO find a best way... */
enum
{
	SYBCHAR = 47,		/* 0x2F */
#define SYBCHAR	SYBCHAR
	SYBVARCHAR = 39,	/* 0x27 */
#define SYBVARCHAR	SYBVARCHAR
	SYBINTN = 38,		/* 0x26 */
#define SYBINTN	SYBINTN
	SYBINT1 = 48,		/* 0x30 */
#define SYBINT1	SYBINT1
	SYBINT2 = 52,		/* 0x34 */
#define SYBINT2	SYBINT2
	SYBINT4 = 56,		/* 0x38 */
#define SYBINT4	SYBINT4
	SYBINT8 = 127,		/* 0x7F */
#define SYBINT8	SYBINT8
	SYBFLT8 = 62,		/* 0x3E */
#define SYBFLT8	SYBFLT8
	SYBDATETIME = 61,	/* 0x3D */
#define SYBDATETIME	SYBDATETIME
	SYBBIT = 50,		/* 0x32 */
#define SYBBIT	SYBBIT
	SYBBITN = 104,		/* 0x68 */
#define SYBBITN	SYBBITN
	SYBTEXT = 35,		/* 0x23 */
#define SYBTEXT	SYBTEXT
	SYBNTEXT = 99,		/* 0x63 */
#define SYBNTEXT	SYBNTEXT
	SYBIMAGE = 34,		/* 0x22 */
#define SYBIMAGE	SYBIMAGE
	SYBMONEY4 = 122,	/* 0x7A */
#define SYBMONEY4	SYBMONEY4
	SYBMONEY = 60,		/* 0x3C */
#define SYBMONEY	SYBMONEY
	SYBDATETIME4 = 58,	/* 0x3A */
#define SYBDATETIME4	SYBDATETIME4
	SYBREAL = 59,		/* 0x3B */
#define SYBREAL	SYBREAL
	SYBBINARY = 45,		/* 0x2D */
#define SYBBINARY	SYBBINARY
	SYBVOID = 31,		/* 0x1F */
#define SYBVOID	SYBVOID
	SYBVARBINARY = 37,	/* 0x25 */
#define SYBVARBINARY	SYBVARBINARY
	SYBNUMERIC = 108,	/* 0x6C */
#define SYBNUMERIC	SYBNUMERIC
	SYBDECIMAL = 106,	/* 0x6A */
#define SYBDECIMAL	SYBDECIMAL
	SYBFLTN = 109,		/* 0x6D */
#define SYBFLTN	SYBFLTN
	SYBMONEYN = 110,	/* 0x6E */
#define SYBMONEYN	SYBMONEYN
	SYBDATETIMN = 111,	/* 0x6F */
#define SYBDATETIMN	SYBDATETIMN
	SYBNVARCHAR = 103,	/* 0x67 */
#define SYBNVARCHAR	SYBNVARCHAR
	SYBDATE = 49,		/* 0x31 */
#define SYBDATE SYBDATE
	SYBTIME = 51,		/* 0x33 */
#define SYBTIME SYBTIME
	SYBBIGDATETIME = 187,	/* 0xBB */
#define SYBBIGDATETIME SYBBIGDATETIME
	SYBBIGTIME = 188,	/* 0xBC */
#define SYBBIGTIME SYBBIGTIME
	SYBMSDATE = 40,		/* 0x28 */
#define SYBMSDATE SYBMSDATE
	SYBMSTIME = 41,		/* 0x29 */
#define SYBMSTIME SYBMSTIME
	SYBMSDATETIME2 = 42,	/* 0x2A */
#define SYBMSDATETIME2 SYBMSDATETIME2
	SYBMSDATETIMEOFFSET = 43, /* 0x2B */
#define SYBMSDATETIMEOFFSET SYBMSDATETIMEOFFSET
};

#define SYBAOPCNT  0x4b
#define SYBAOPCNTU 0x4c
#define SYBAOPSUM  0x4d
#define SYBAOPSUMU 0x4e
#define SYBAOPAVG  0x4f
#define SYBAOPAVGU 0x50
#define SYBAOPMIN  0x51
#define SYBAOPMAX  0x52

/* mssql2k compute operator */
#define SYBAOPCNT_BIG		0x09
#define SYBAOPSTDEV		0x30
#define SYBAOPSTDEVP		0x31
#define SYBAOPVAR		0x32
#define SYBAOPVARP		0x33
#define SYBAOPCHECKSUM_AGG	0x72

#endif

typedef unsigned char DBBOOL;
typedef char DBCHAR;
typedef unsigned char DBBIT;
typedef unsigned char DBTINYINT;
typedef int16_t DBSMALLINT;
typedef int32_t DBINT;
typedef int64_t DBBIGINT;
typedef unsigned char DBBINARY;
typedef tds_sysdep_real32_type DBREAL;
typedef tds_sysdep_real64_type DBFLT8;
typedef uint16_t DBUSMALLINT;
typedef uint32_t DBUINT;
typedef uint64_t DBUBIGINT;

typedef struct 
{
	DBSMALLINT len;
	char  str[256];
} DBVARYCHAR;

typedef struct
{
	DBSMALLINT len;
	unsigned char  array[256];
} DBVARYBIN;

typedef struct
{
	unsigned char precision;
	unsigned char scale;
	unsigned char array[33];
} DBNUMERIC;

typedef DBNUMERIC DBDECIMAL;

typedef struct
{
	DBINT mnyhigh;
	DBUINT mnylow;
} DBMONEY;

typedef struct
{
	DBINT mny4;
} DBMONEY4;

typedef struct
{
	DBINT dtdays;
	DBINT dttime;
} DBDATETIME;

typedef struct
{
	DBUSMALLINT days;	/* days since Jan-1-1900 */
	DBUSMALLINT minutes;	/* minutes since midnight */
} DBDATETIME4;

typedef struct
{
	DBUBIGINT  time;	/**< time, 7 digit precision */
	DBINT      date;	/**< date, 0 = 1900-01-01 */
	DBSMALLINT offset;	/**< time offset */
	DBUSMALLINT time_prec:3;
/* fix a problem with some public headers defining _res */
#undef _res
	DBUSMALLINT _res:10;
	DBUSMALLINT has_time:1;
	DBUSMALLINT has_date:1;
	DBUSMALLINT has_offset:1;
} DBDATETIMEALL;

#ifdef MSDBLIB
# define SQLCHAR SYBCHAR
	typedef struct
	{
		DBUSMALLINT numdays;
		DBUSMALLINT nummins;
	} DBDATETIM4;
#endif

typedef struct tds_dblib_loginrec LOGINREC;

#ifndef DOS32X
typedef unsigned char BYTE;
#endif

typedef struct dbtypeinfo
{
	DBINT precision;
	DBINT scale;
} DBTYPEINFO;

struct dbstring
{
	BYTE *strtext;
	DBINT strtotlen;
	struct dbstring *strnext;
};
typedef struct dbstring DBSTRING;

/* Used by dbcolinfo */
enum
{ MAXCOLNAMELEN = 512 }; /* duplicates TDS_SYSNAME_SIZE */
typedef enum { CI_REGULAR=1, CI_ALTERNATE=2, CI_CURSOR=3 } CI_TYPE;

typedef struct 
{ 
    DBINT SizeOfStruct; 
    DBCHAR  Name[MAXCOLNAMELEN+2]; 
    DBCHAR  ActualName[MAXCOLNAMELEN+2]; 
    DBCHAR  TableName[MAXCOLNAMELEN+2]; 
    SHORT Type; 
    DBINT UserType; 
    DBINT MaxLength; 
    BYTE  Precision; 
    BYTE  Scale; 
    BOOL  VarLength; 
    BYTE  Null; 
    BYTE  CaseSensitive; 
    BYTE  Updatable; 
    BOOL  Identity; 

} DBCOL; 

typedef struct
{
    DBINT SizeOfStruct;
    DBCHAR  Name[MAXCOLNAMELEN+2];
    DBCHAR  ActualName[MAXCOLNAMELEN+2];
    DBCHAR  TableName[MAXCOLNAMELEN+2];
    SHORT Type;
    DBINT UserType;
    DBINT MaxLength;
    BYTE  Precision;
    BYTE  Scale;
    BOOL  VarLength;
    BYTE  Null;
    BYTE  CaseSensitive;
    BYTE  Updatable;
    BOOL  Identity;
    SHORT ServerType;
    DBINT ServerMaxLength;
    DBCHAR  ServerTypeDeclaration[256];
} DBCOL2;
/* end dbcolinfo stuff */



/* a large list of options, DBTEXTSIZE is needed by sybtcl */
#define DBPARSEONLY      0
#define DBESTIMATE       1
#define DBSHOWPLAN       2
#define DBNOEXEC         3
#define DBARITHIGNORE    4
#define DBNOCOUNT        5
#define DBARITHABORT     6
#define DBTEXTLIMIT      7
#define DBBROWSE         8
#define DBOFFSET         9
#define DBSTAT          10
#define DBERRLVL        11
#define DBCONFIRM       12
#define DBSTORPROCID    13
#define DBBUFFER        14
#define DBNOAUTOFREE    15
#define DBROWCOUNT      16
#define DBTEXTSIZE      17
#define DBNATLANG       18
#define DBDATEFORMAT    19
#define DBPRPAD         20
#define DBPRCOLSEP      21
#define DBPRLINELEN     22
#define DBPRLINESEP     23
#define DBLFCONVERT     24
#define DBDATEFIRST	25
#define DBCHAINXACTS	26
#define DBFIPSFLAG	27
#define DBISOLATION	28
#define DBAUTH		29
#define DBIDENTITY	30
#define DBNOIDCOL       31
#define DBDATESHORT	32
#define DBCLIENTCURSORS	33
#define DBSETTIME 	34
#define DBQUOTEDIDENT 	35

#define DBNUMOPTIONS  36

#define DBPADOFF       0
#define DBPADON        1

#define OFF            0
#define ON             1

#define NOSUCHOPTION   2

#define MAXOPTTEXT    32

typedef struct tds_dblib_dbprocess DBPROCESS;

/*
 * Sybase & Microsoft use different names for the dbdaterec members. 
 * Keep these two structures physically identical in memory.  
 * dbdatecrack() casts one to the other for ease of implementation. 
 *
 * Giving credit where credit is due, we can acknowledge that
 * Microsoft chose the better names here, hands down.  ("datedmonth"?!)
 */
struct tds_microsoft_dbdaterec
{
	DBINT year;		/* 1753 - 9999  	   */
	DBINT quarter;		/* 1 - 4 		   */
	DBINT month;		/* 1 - 12 		   */
	DBINT day;		/* 1 - 31 		   */
	DBINT dayofyear;	/* 1 - 366 		   */
	DBINT week;            	/* 1 - 54 (for leap years) */
	DBINT weekday;		/* 1 - 7 (Mon. - Sun.)     */
	DBINT hour;		/* 0 - 23 		   */
	DBINT minute;		/* 0 - 59 		   */
	DBINT second;		/* 0 - 59 		   */
	DBINT millisecond;	/* 0 - 999 		   */
	DBINT tzone;		/* -840 - 840		   */
};					

struct tds_sybase_dbdaterec
{
	DBINT dateyear;		/* 1900 and counting	  */ 
	DBINT quarter;		/* 0 - 3 (Microsoft only) */
	DBINT datemonth;	/* 0 - 11   	     	  */
	DBINT datedmonth;	/* 1 - 31   	     	  */
	DBINT datedyear;	/* 1 - 366  	     	  */
	DBINT week;            	/* 1 - 54 (Microsoft only) */
	DBINT datedweek;	/* 0 - 6    	     	  */
	DBINT datehour; 	/* 0 - 23   	     	  */
	DBINT dateminute;	/* 0 - 59   	     	  */
	DBINT datesecond;	/* 0 - 59   	     	  */
	DBINT datemsecond;	/* 0 - 999  	     	  */
	DBINT datetzone;	/* -840 - 840 	     	  */
};

struct tds_microsoft_dbdaterec2
{
	DBINT year;		/* 1753 - 9999  	   */
	DBINT quarter;		/* 1 - 4 		   */
	DBINT month;		/* 1 - 12 		   */
	DBINT day;		/* 1 - 31 		   */
	DBINT dayofyear;	/* 1 - 366 		   */
	DBINT week;            	/* 1 - 54 (for leap years) */
	DBINT weekday;		/* 1 - 7 (Mon. - Sun.)     */
	DBINT hour;		/* 0 - 23 		   */
	DBINT minute;		/* 0 - 59 		   */
	DBINT second;		/* 0 - 59 		   */
	DBINT nanosecond;	/* 0 - 999999999	   */
	DBINT tzone;		/* 0 - 127  (Sybase only)  */
};

struct tds_sybase_dbdaterec2
{
	DBINT dateyear;		/* 1900 and counting	  */
	DBINT quarter;		/* 0 - 3 (Microsoft only) */
	DBINT datemonth;	/* 0 - 11   	     	  */
	DBINT datedmonth;	/* 1 - 31   	     	  */
	DBINT datedyear;	/* 1 - 366  	     	  */
	DBINT week;            	/* 1 - 54 (Microsoft only) */
	DBINT datedweek;	/* 0 - 6    	     	  */
	DBINT datehour; 	/* 0 - 23   	     	  */
	DBINT dateminute;	/* 0 - 59   	     	  */
	DBINT datesecond;	/* 0 - 59   	     	  */
	DBINT datensecond;	/* 0 - 999999999  	  */
	DBINT datetzone;	/* 0 - 127  	     	  */
};


#ifdef MSDBLIB
typedef struct tds_microsoft_dbdaterec  DBDATEREC;
typedef struct tds_microsoft_dbdaterec2 DBDATEREC2;
#else
typedef struct tds_sybase_dbdaterec  DBDATEREC;
typedef struct tds_sybase_dbdaterec2 DBDATEREC2;
#endif

typedef int (*EHANDLEFUNC) (DBPROCESS * dbproc, int severity, int dberr, int oserr, char *dberrstr, char *oserrstr);

typedef int (*MHANDLEFUNC) (DBPROCESS * dbproc, DBINT msgno, int msgstate, int severity, char *msgtext, char *srvname,
			    char *proc, int line);

/* dbpoll() result codes, sybtcl needs DBRESULT */
#define DBRESULT       1
#define DBNOTIFICATION 2
#define DBTIMEOUT      3
#define DBINTERRUPT    4

/* more sybtcl needs: */
#define DBTXTSLEN    8

/* bind types */
#define CHARBIND          0
#define STRINGBIND        1
#define NTBSTRINGBIND     2
#define VARYCHARBIND      3
#define VARYBINBIND	  4
#define TINYBIND          6
#define SMALLBIND         7
#define INTBIND           8
#define FLT8BIND          9
#define REALBIND          10
#define DATETIMEBIND      11
#define SMALLDATETIMEBIND 12
#define MONEYBIND         13
#define SMALLMONEYBIND    14
#define BINARYBIND        15
#define BITBIND           16
#define NUMERICBIND       17
#define DECIMALBIND       18
#define SRCNUMERICBIND    19
#define SRCDECIMALBIND    20
#define DATEBIND          21
#define TIMEBIND          22
#define BIGDATETIMEBIND   23
#define BIGTIMEBIND       24
#define BIGINTBIND        30
#define DATETIME2BIND     31
#define MAXBINDTYPES      32	/* keep last */

#define DBPRCOLSEP  21
#define DBPRLINELEN 22
#define DBRPCNORETURN 0
#define DBRPCRETURN 1
#define DBRPCDEFAULT 2

#define REG_ROW         -1
#define MORE_ROWS       -1
#define NO_MORE_ROWS    -2
#define BUF_FULL        -3
#define NO_MORE_RESULTS 2
#define SUCCEED         1
#define FAIL            0

#define DB_IN  1
#define DB_OUT 2
#define DB_QUERYOUT 3

#define DBSINGLE 0
#define DBDOUBLE 1
#define DBBOTH   2

/* remote procedure call (rpc) options */
#define DBRPCRECOMPILE	TDS_STATIC_CAST(DBSMALLINT, 0x0001)
#define DBRPCRESET 	TDS_STATIC_CAST(DBSMALLINT, 0x0002)
#define DBRPCCURSOR 	TDS_STATIC_CAST(DBSMALLINT, 0x0008)

#if defined(DBLIB_UNIMPLEMENTED)
DBBOOL db12hour(DBPROCESS * dbprocess, const char language[]);

DBBOOL dbcolbrowse(DBPROCESS * dbprocess, int colnum);

RETCODE dbcursor(DBCURSOR * hc, DBINT optype, DBINT bufno, BYTE * table, BYTE * values);
RETCODE dbcursorbind(DBCURSOR * hc, int col, int vartype, DBINT varlen, DBINT * poutlen, BYTE * pvaraddr, DBTYPEINFO * typeinfo);
void dbcursorclose(DBCURSOR * hc);
RETCODE dbcursorcolinfo(DBCURSOR * hc, DBINT column, DBCHAR * colname, DBINT * coltype, DBINT * collen, DBINT * usertype);
RETCODE dbcursorfetch(DBCURSOR * hc, DBINT fetchtype, DBINT rownum);
RETCODE dbcursorinfo(DBCURSOR * hc, DBINT * ncols, DBINT * nrows);
DBCURSOR *dbcursoropen(DBPROCESS * dbprocess, BYTE * stmt, SHORT scollopt, SHORT concuropt, USHORT nrows, DBINT * pstatus);

int dbdate4cmp(DBPROCESS * dbprocess, DBDATETIME4 * d1, DBDATETIME4 * d2);
RETCODE dbdate4zero(DBPROCESS * dbprocess, DBDATETIME4 * d1);
RETCODE dbdatechar(DBPROCESS * dbprocess, char *buf, int datepart, int value);
int dbdatename(DBPROCESS * dbprocess, char *buf, int date, DBDATETIME * datetime);
char *dateorder(DBPROCESS * dbprocess, char *language);
DBINT dbdatepart(DBPROCESS * dbprocess, int datepart, DBDATETIME * datetime);
RETCODE dbdatezero(DBPROCESS * dbprocess, DBDATETIME * d1);
char *dbdayname(DBPROCESS * dbprocess, char *language, int daynum);

int dbgetoff(DBPROCESS * dbprocess, DBUSMALLINT offtype, int startfrom);

char *dbqual(DBPROCESS * dbprocess, int tabnum, char *tabname);
void dbfreequal(char *qualptr);

DBSORTORDER *dbloadsort(DBPROCESS * dbprocess);
RETCODE dbfreesort(DBPROCESS * dbprocess, DBSORTORDER * sortorder);

RETCODE dbload_xlate(DBPROCESS * dbprocess, char *srv_charset, char *clt_name, DBXLATE ** xlt_tosrv, DBXLATE ** xlt_todisp);

RETCODE dbmny4divide(DBPROCESS * dbproc, DBMONEY4 * m1, DBMONEY4 * m2, DBMONEY4 * quotient);
RETCODE dbmny4mul(DBPROCESS * dbproc, DBMONEY4 * m1, DBMONEY4 * m2, DBMONEY4 * prod);
RETCODE dbmnyadd(DBPROCESS * dbproc, DBMONEY * m1, DBMONEY * m2, DBMONEY * sum);
RETCODE dbmnydivide(DBPROCESS * dbproc, DBMONEY * m1, DBMONEY * m2, DBMONEY * quotient);
RETCODE dbmnydown(DBPROCESS * dbproc, DBMONEY * mnyptr, int divisor, int *remainder);
RETCODE dbmnyinit(DBPROCESS * dbproc, DBMONEY * mnyptr, int trim, DBBOOL * negative);
RETCODE dbmnyndigit(DBPROCESS * dbproc, DBMONEY * mnyptr, DBCHAR * value, DBBOOL * zero);
RETCODE dbmnymul(DBPROCESS * dbproc, DBMONEY * m1, DBMONEY * m2, DBMONEY * prod);
RETCODE dbmnydigit(DBPROCESS * dbprocess, DBMONEY * m1, DBCHAR * value, DBBOOL * zero);
RETCODE dbmnyscale(DBPROCESS * dbproc, DBMONEY * dest, int multiplier, int addend);


RETCODE dbnpcreate(DBPROCESS * dbprocess);
RETCODE dbnpdefine(DBPROCESS * dbprocess, DBCHAR * procedure_name, DBSMALLINT namelen);

int DBNUMORDERS(DBPROCESS * dbprocess);

RETCODE dbpoll(DBPROCESS * dbproc, long milliseconds, DBPROCESS ** ready_dbproc, int *return_reason);
int dbordercol(DBPROCESS * dbprocess, int order);

RETCODE dbregdrop(DBPROCESS * dbprocess, DBCHAR * procnm, DBSMALLINT namelen);
RETCODE dbregexec(DBPROCESS * dbproc, DBUSMALLINT options);
RETCODE dbreghandle(DBPROCESS * dbprocess, DBCHAR * procnm, DBSMALLINT namelen, INTFUNCPTR handler);
RETCODE dbreginit(DBPROCESS * dbproc, DBCHAR * procedure_name, DBSMALLINT namelen);
RETCODE dbreglist(DBPROCESS * dbproc);
RETCODE dbregnowatch(DBPROCESS * dbprocess, DBCHAR * procnm, DBSMALLINT namelen);
RETCODE dbregparam(DBPROCESS * dbproc, char *param_name, int type, DBINT datalen, BYTE * data);
RETCODE dbregwatch(DBPROCESS * dbprocess, DBCHAR * procnm, DBSMALLINT namelen, DBUSMALLINT options);
RETCODE dbregwatchlist(DBPROCESS * dbprocess);

void dbrpwclr(LOGINREC * login);
RETCODE dbrpwset(LOGINREC * login, char *srvname, char *password, int pwlen);

DBINT dbreadpage(DBPROCESS * dbprocess, char *p_dbname, DBINT pageno, BYTE * buf);
RETCODE dbwritepage(DBPROCESS * dbprocess, char *p_dbname, DBINT pageno, DBINT size, BYTE * buf);

RETCODE dbsetdeflang(char *language);

int dbstrcmp(DBPROCESS * dbprocess, char *s1, int l1, char *s2, int l2, DBSORTORDER * sort);
int dbstrsort(DBPROCESS * dbprocess, char *s1, int l1, char *s2, int l2, DBSORTORDER * sort);

DBBOOL dbtabbrowse(DBPROCESS * dbprocess, int tabnum);
int dbtabcount(DBPROCESS * dbprocess);
char *dbtabname(DBPROCESS * dbprocess, int tabnum);
char *dbtabsource(DBPROCESS * dbprocess, int colnum, int *tabnum);

RETCODE dbsendpassthru(DBPROCESS * dbprocess, DBVOIDPTR bufp);
RETCODE dbrecvpassthru(DBPROCESS * dbprocess, DBVOIDPTR * bufp);

RETCODE dbgetloginfo(DBPROCESS * dbprocess, DBLOGINFO ** loginfo);
RETCODE dbsetloginfo(LOGINREC * loginrec, DBLOGINFO * loginfo);

int dbtsnewlen(DBPROCESS * dbprocess);
DBBINARY *dbtsnewval(DBPROCESS * dbprocess);
RETCODE dbtsput(DBPROCESS * dbprocess, DBBINARY * newts, int newtslen, int tabnum, char *tabname);

RETCODE dbfree_xlate(DBPROCESS * dbprocess, DBXLATE * xlt_tosrv, DBXLATE * clt_todisp);
int dbxlate(DBPROCESS * dbprocess, char *src, int srclen, char *dest, int destlen, DBXLATE * xlt, int *srcbytes_used,
	    DBBOOL srcend, int status);

RETCODE bcp_moretext(DBPROCESS * dbproc, DBINT size, BYTE * text);
RETCODE bcp_writefmt(DBPROCESS * dbproc, const char filename[]);

void build_xact_string(char *xact_name, char *service_name, DBINT commid, char *result);
RETCODE remove_xact(DBPROCESS * connect, DBINT commid, int n);
RETCODE abort_xact(DBPROCESS * connect, DBINT commid);
void close_commit(DBPROCESS * connect);
RETCODE commit_xact(DBPROCESS * connect, DBINT commid);
DBPROCESS *open_commit(LOGINREC * login, char *servername);
RETCODE scan_xact(DBPROCESS * connect, DBINT commid);
DBINT start_xact(DBPROCESS * connect, char *application_name, char *xact_name, int site_count);
DBINT stat_xact(DBPROCESS * connect, DBINT commid);

#endif /* define unimplemented */

BYTE *dbadata(DBPROCESS * dbproc, int computeid, int column);
DBINT dbadlen(DBPROCESS * dbproc, int computeid, int column);
RETCODE dbaltbind(DBPROCESS * dbprocess, int computeid, int column, int vartype, DBINT varlen, BYTE * varaddr);
RETCODE dbaltbind_ps(DBPROCESS * dbprocess, int computeid, int column, int vartype, DBINT varlen, BYTE * varaddr,
		     DBTYPEINFO * typeinfo);
int dbaltcolid(DBPROCESS * dbproc, int computeid, int column);
DBINT dbaltlen(DBPROCESS * dbproc, int computeid, int column);
int dbaltop(DBPROCESS * dbproc, int computeid, int column);
int dbalttype(DBPROCESS * dbproc, int computeid, int column);
DBINT dbaltutype(DBPROCESS * dbproc, int computeid, int column);
RETCODE dbanullbind(DBPROCESS * dbprocess, int computeid, int column, DBINT * indicator);
RETCODE dbbind(DBPROCESS * dbproc, int column, int vartype, DBINT varlen, BYTE * varaddr);
RETCODE dbbind_ps(DBPROCESS * dbprocess, int column, int vartype, DBINT varlen, BYTE * varaddr, DBTYPEINFO * typeinfo);
int dbbufsize(DBPROCESS * dbprocess);
BYTE *dbbylist(DBPROCESS * dbproc, int computeid, int *size);
RETCODE dbcancel(DBPROCESS * dbproc);
RETCODE dbcanquery(DBPROCESS * dbproc);
char *dbchange(DBPROCESS * dbprocess);
DBBOOL dbcharsetconv(DBPROCESS * dbprocess);
void dbclose(DBPROCESS * dbproc);
void dbclrbuf(DBPROCESS * dbproc, DBINT n);
RETCODE dbclropt(DBPROCESS * dbproc, int option, const char param[]);
RETCODE dbcmd(DBPROCESS * dbproc, const char cmdstring[]);
RETCODE dbcmdrow(DBPROCESS * dbproc);

#define DBCMDROW(x) dbcmdrow((x))
RETCODE dbtablecolinfo (DBPROCESS *dbproc, DBINT column, DBCOL *pdbcol );
RETCODE	dbcolinfo (DBPROCESS *dbproc, CI_TYPE type, DBINT column, DBINT computeid, DBCOL *pdbcol);
DBINT dbcollen(DBPROCESS * dbproc, int column);
char *dbcolname(DBPROCESS * dbproc, int column);
const char *dbacolname(DBPROCESS * dbproc, int computeid, int column);
char *dbcolsource(DBPROCESS * dbproc, int colnum);
int dbcoltype(DBPROCESS * dbproc, int column);
DBTYPEINFO *dbcoltypeinfo(DBPROCESS * dbproc, int column);
DBINT dbcolutype(DBPROCESS * dbprocess, int column);
DBINT dbconvert(DBPROCESS * dbproc, int srctype, const BYTE * src, DBINT srclen, int desttype, BYTE * dest, DBINT destlen);
DBINT dbconvert_ps(DBPROCESS * dbprocess, int srctype, const BYTE * src, DBINT srclen, int desttype, BYTE * dest, DBINT destlen,
		   DBTYPEINFO * typeinfo);
BOOL dbiscount(DBPROCESS * dbproc);
DBINT dbcount(DBPROCESS * dbproc);

#define DBCOUNT(x) dbcount((x))
int dbcurcmd(DBPROCESS * dbproc);

#define DBCURCMD(x) dbcurcmd((x))
DBINT dbcurrow(DBPROCESS * dbproc);

#define DBCURROW(x) dbcurrow((x))
BYTE *dbdata(DBPROCESS * dbproc, int column);
int dbdatecmp(DBPROCESS * dbproc, DBDATETIME * d1, DBDATETIME * d2);
RETCODE dbdatecrack(DBPROCESS * dbproc, DBDATEREC * di, DBDATETIME * dt);
RETCODE dbanydatecrack(DBPROCESS * dbproc, DBDATEREC2 * di, int type, const void *data);
DBINT dbdatlen(DBPROCESS * dbproc, int column);
DBBOOL dbdead(DBPROCESS * dbproc);

#define DBDEAD(x) dbdead((x))
EHANDLEFUNC dberrhandle(EHANDLEFUNC handler);
void dbexit(void);
RETCODE dbfcmd(DBPROCESS * dbproc, const char *fmt, ...);
DBINT dbfirstrow(DBPROCESS * dbproc);

#define DBFIRSTROW(x) dbfirstrow((x))
void dbfreebuf(DBPROCESS * dbproc);
char *dbgetchar(DBPROCESS * dbprocess, int n);
char *dbgetcharset(DBPROCESS * dbprocess);
int dbgetlusername(LOGINREC * login, BYTE * name_buffer, int buffer_len);
int dbgetmaxprocs(void);
char *dbgetnatlanf(DBPROCESS * dbprocess);
int dbgetpacket(DBPROCESS * dbproc);
RETCODE dbgetrow(DBPROCESS * dbproc, DBINT row);
int dbgettime(void);
#define DBGETTIME dbgettime
BYTE *dbgetuserdata(DBPROCESS * dbproc);
DBBOOL dbhasretstat(DBPROCESS * dbproc);
RETCODE dbinit(void);
int dbiordesc(DBPROCESS * dbproc);

#define DBIORDESC(x) dbiordesc((x))
int dbiowdesc(DBPROCESS * dbproc);

#define DBIOWDESC(x) dbiowdesc((x))
DBBOOL dbisavail(DBPROCESS * dbprocess);

#define DBISAVAIL(x) dbisavail((x))
DBBOOL dbisopt(DBPROCESS * dbproc, int option, const char param[]);
DBINT dblastrow(DBPROCESS * dbproc);

#define DBLASTROW(x) dblastrow((x))
LOGINREC *dblogin(void);
void dbloginfree(LOGINREC * login);

int dbmny4cmp(DBPROCESS * dbproc, DBMONEY4 * m1, DBMONEY4 * m2);
int dbmnycmp(DBPROCESS * dbproc, DBMONEY * m1, DBMONEY * m2);

RETCODE dbmny4add(DBPROCESS * dbproc, DBMONEY4 * m1, DBMONEY4 * m2, DBMONEY4 * sum);
RETCODE dbmnydec(DBPROCESS * dbproc, DBMONEY * mnyptr);
RETCODE dbmnyinc(DBPROCESS * dbproc, DBMONEY * mnyptr);
RETCODE dbmnymaxpos(DBPROCESS * dbproc, DBMONEY * dest);
RETCODE dbmnymaxneg(DBPROCESS * dbproc, DBMONEY * dest);
RETCODE dbmny4minus(DBPROCESS * dbproc, DBMONEY4 * src, DBMONEY4 * dest);
RETCODE dbmnyminus(DBPROCESS * dbproc, DBMONEY * src, DBMONEY * dest);
RETCODE dbmny4sub(DBPROCESS * dbproc, DBMONEY4 * m1, DBMONEY4 * m2, DBMONEY4 * diff);
RETCODE dbmnysub(DBPROCESS * dbproc, DBMONEY * m1, DBMONEY * m2, DBMONEY * diff);

RETCODE dbmny4copy(DBPROCESS * dbprocess, DBMONEY4 * m1, DBMONEY4 * m2);
RETCODE dbmnycopy(DBPROCESS * dbproc, DBMONEY * src, DBMONEY * dest);

RETCODE dbmny4zero(DBPROCESS * dbproc, DBMONEY4 * dest);
RETCODE dbmnyzero(DBPROCESS * dbproc, DBMONEY * dest);

const char *dbmonthname(DBPROCESS * dbproc, char *language, int monthnum, DBBOOL shortform);
RETCODE dbmorecmds(DBPROCESS * dbproc);

#define DBMORECMDS(x) dbmorecmds((x))
RETCODE dbmoretext(DBPROCESS * dbproc, DBINT size, const BYTE text[]);
MHANDLEFUNC dbmsghandle(MHANDLEFUNC handler);
char *dbname(DBPROCESS * dbproc);
STATUS dbnextrow(DBPROCESS * dbproc);
RETCODE dbnullbind(DBPROCESS * dbproc, int column, DBINT * indicator);
int dbnumalts(DBPROCESS * dbproc, int computeid);
int dbnumcols(DBPROCESS * dbproc);
int dbnumcompute(DBPROCESS * dbprocess);
int dbnumrets(DBPROCESS * dbproc);
DBPROCESS *tdsdbopen(LOGINREC * login, const char *server, int msdblib);
DBPROCESS *dbopen(LOGINREC * login, const char *server);

/* pivot functions */
struct col_t;
void dbpivot_count (struct col_t *output, const struct col_t *input);
void dbpivot_sum (struct col_t *output, const struct col_t *input);
void dbpivot_min (struct col_t *output, const struct col_t *input);
void dbpivot_max (struct col_t *output, const struct col_t *input);

struct pivot_t;
typedef void (*DBPIVOT_FUNC)(struct col_t *output, const struct col_t *input);
struct pivot_t * dbrows_pivoted(DBPROCESS *dbproc);
STATUS dbnextrow_pivoted(DBPROCESS *dbproc, struct pivot_t *pp);
RETCODE dbpivot(DBPROCESS *dbproc, int nkeys, int *keys, int ncols, int *cols, DBPIVOT_FUNC func, int val);

DBPIVOT_FUNC dbpivot_lookup_name( const char name[] );

#ifdef MSDBLIB
#define   dbopen(x,y) tdsdbopen((x),(y), 1)
#else
#define   dbopen(x,y) tdsdbopen((x),(y), 0)
#endif

/* fix PHP problem */
#ifdef PHP_SYBASE_DBOPEN
#undef PHP_SYBASE_DBOPEN
#define PHP_SYBASE_DBOPEN dbopen
#endif

void dbprhead(DBPROCESS * dbproc);
DBINT dbprcollen(DBPROCESS * dbproc, int column);
RETCODE dbprrow(DBPROCESS * dbproc);
const char *dbprtype(int token);
DBBOOL DRBUF(DBPROCESS * dbprocess);
STATUS dbreadtext(DBPROCESS * dbproc, void *buf, DBINT bufsize);
void dbrecftos(const char filename[]);
RETCODE dbresults(DBPROCESS * dbproc);
RETCODE dbresults_r(DBPROCESS * dbproc, int recursive);
BYTE *dbretdata(DBPROCESS * dbproc, int retnum);
int dbretlen(DBPROCESS * dbproc, int retnum);
char *dbretname(DBPROCESS * dbproc, int retnum);
DBINT dbretstatus(DBPROCESS * dbproc);
int dbrettype(DBPROCESS * dbproc, int retnum);
RETCODE dbrows(DBPROCESS * dbproc);

#define DBROWS(x) dbrows((x))
STATUS dbrowtype(DBPROCESS * dbprocess);

#define DBROWTYPE(x) dbrowtype((x))
RETCODE dbrpcinit(DBPROCESS * dbproc, const char rpcname[], DBSMALLINT options);
RETCODE dbrpcparam(DBPROCESS * dbproc, const char paramname[], BYTE status, int type, DBINT maxlen, DBINT datalen, BYTE * value);
RETCODE dbrpcsend(DBPROCESS * dbproc);
RETCODE dbsafestr(DBPROCESS * dbproc, const char *src, DBINT srclen, char *dest, DBINT destlen, int quotetype);
RETCODE *dbsechandle(DBINT type, INTFUNCPTR handler);
char *dbservcharset(DBPROCESS * dbprocess);
void dbsetavail(DBPROCESS * dbprocess);
void dbsetbusy(DBPROCESS * dbprocess, DB_DBBUSY_FUNC busyfunc);
RETCODE dbsetdefcharset(char *charset);
void dbsetidle(DBPROCESS * dbprocess, DB_DBIDLE_FUNC idlefunc);
void dbsetifile(char *filename);
void dbsetinterrupt(DBPROCESS * dbproc, DB_DBCHKINTR_FUNC chkintr, DB_DBHNDLINTR_FUNC hndlintr);
RETCODE dbsetlogintime(int seconds);
RETCODE dbsetmaxprocs(int maxprocs);
RETCODE dbsetnull(DBPROCESS * dbprocess, int bindtype, int bindlen, BYTE * bindval);
RETCODE dbsetopt(DBPROCESS * dbproc, int option, const char *char_param, int int_param);
STATUS dbsetrow(DBPROCESS * dbprocess, DBINT row);
RETCODE dbsettime(int seconds);
void dbsetuserdata(DBPROCESS * dbproc, BYTE * ptr);
RETCODE dbsetversion(DBINT version);

int dbspid(DBPROCESS * dbproc);
RETCODE dbspr1row(DBPROCESS * dbproc, char *buffer, DBINT buf_len);
DBINT dbspr1rowlen(DBPROCESS * dbproc);
RETCODE dbsprhead(DBPROCESS * dbproc, char *buffer, DBINT buf_len);
RETCODE dbsprline(DBPROCESS * dbproc, char *buffer, DBINT buf_len, DBCHAR line_char);
RETCODE dbsqlexec(DBPROCESS * dbproc);
RETCODE dbsqlok(DBPROCESS * dbproc);
RETCODE dbsqlsend(DBPROCESS * dbproc);
int dbstrbuild(DBPROCESS * dbproc, char *charbuf, int bufsize, char *text, char *formats, ...);
RETCODE dbstrcpy(DBPROCESS * dbproc, int start, int numbytes, char *dest);
int dbstrlen(DBPROCESS * dbproc);
DBINT dbvarylen(DBPROCESS * dbproc, int column);

#define SYBEVERDOWN	  100	/* TDS version downgraded . */
#define SYBEICONVIU	 2400	/* Some character(s) could not be converted into client's character set. */
#define SYBEICONVAVAIL	 2401	/* Character set conversion is not available between client character set '%.*s' and server character set '%.*s'.*/
#define SYBEICONVO	 2402	/* Error converting characters into server's character set. Some character(s) could not be converted.*/
#define SYBEICONVI	 2403	/* Some character(s) could not be converted into client's character set.  Unconverted bytes were changed to question marks ('?').*/
#define SYBEICONV2BIG	 2404	/* Buffer overflow converting characters from client into server's character set.*/
				/* cf. doc/dblib_errors.txt for more iconv error values. */
				/* Reserve a few slots for other iconv-related issues. */
#define SYBETDSVER	 2410 	/* Cannot bcp with TDSVER < 5.0 */
#define SYBEPORT	 2500	/* Both port and instance specified */
#define SYBESYNC        20001	/* Read attempted while out of synchronization with SQL Server. */
#define SYBEFCON        20002	/* SQL Server connection failed. */
#define SYBETIME        20003	/* SQL Server connection timed out. */
#define SYBEREAD        20004	/* Read from SQL Server failed. */
#define SYBEBUFL        20005	/* DB-LIBRARY internal error - send buffer length corrupted. */
#define SYBEWRIT        20006	/* Write to SQL Server failed. */
#define SYBEVMS         20007	/* Sendflush: VMS I/O error. */
#define SYBESOCK        20008	/* Unable to open socket */
#define SYBECONN        20009	/* Unable to connect socket -- SQL Server is unavailable or does not exist. */
#define SYBEMEM         20010	/* Unable to allocate sufficient memory */
#define SYBEDBPS        20011	/* Maximum number of DBPROCESSes already allocated. */
#define SYBEINTF        20012	/* Server name not found in interface file */
#define SYBEUHST        20013	/* Unknown host machine name */
#define SYBEPWD         20014	/* Incorrect password. */
#define SYBEOPIN        20015	/* Could not open interface file. */
#define SYBEINLN        20016	/* Interface file: unexpected end-of-line. */
#define SYBESEOF        20017	/* Unexpected EOF from SQL Server. */
#define SYBESMSG        20018	/* General SQL Server error: Check messages from the SQL Server. */
#define SYBERPND        20019	/* Attempt to initiate a new SQL Server operation with results pending. */
#define SYBEBTOK        20020	/* Bad token from SQL Server: Data-stream processing out of sync. */
#define SYBEITIM        20021	/* Illegal timeout value specified. */
#define SYBEOOB         20022	/* Error in sending out-of-band data to SQL Server. */
#define SYBEBTYP        20023	/* Unknown bind type passed to DB-LIBRARY function. */
#define SYBEBNCR        20024	/* Attempt to bind user variable to a non-existent compute row. */
#define SYBEIICL        20025	/* Illegal integer column length returned by SQL Server. Legal integer lengths are 1, 2, and 4 bytes. */
#define SYBECNOR        20026	/* Column number out of range. */
#define SYBENPRM        20027	/* NULL parameter not allowed for this dboption. */
#define SYBEUVDT        20028	/* Unknown variable-length datatype encountered. */
#define SYBEUFDT        20029	/* Unknown fixed-length datatype encountered. */
#define SYBEWAID        20030	/* DB-LIBRARY internal error: ALTFMT following ALTNAME has wrong id. */
#define SYBECDNS        20031	/* Datastream indicates that a compute column is derived from a non-existent select-list member. */
#define SYBEABNC        20032	/* Attempt to bind to a non-existent column. */
#define SYBEABMT        20033	/* User attempted a dbbind() with mismatched column and variable types. */
#define SYBEABNP        20034	/* Attempt to bind using NULL pointers. */
#define SYBEAAMT        20035	/* User attempted a dbaltbind() with mismatched column and variable types. */
#define SYBENXID        20036	/* The Server did not grant us a distributed-transaction ID. */
#define SYBERXID        20037	/* The Server did not recognize our distributed-transaction ID. */
#define SYBEICN         20038	/* Invalid computeid or compute column number. */
#define SYBENMOB        20039	/* No such member of 'order by' clause. */
#define SYBEAPUT        20040	/* Attempt to print unknown token. */
#define SYBEASNL        20041	/* Attempt to set fields in a null loginrec. */
#define SYBENTLL        20042	/* Name too long for loginrec field. */
#define SYBEASUL        20043	/* Attempt to set unknown loginrec field. */
#define SYBERDNR        20044	/* Attempt to retrieve data from a non-existent row. */
#define SYBENSIP        20045	/* Negative starting index passed to dbstrcpy(). */
#define SYBEABNV        20046	/* Attempt to bind to a NULL program variable. */
#define SYBEDDNE        20047	/* DBPROCESS is dead or not enabled. */
#define SYBECUFL        20048	/* Data-conversion resulted in underflow. */
#define SYBECOFL        20049	/* Data-conversion resulted in overflow. */
#define SYBECSYN        20050	/* Attempt to convert data stopped by syntax error in source field. */
#define SYBECLPR        20051	/* Data-conversion resulted in loss of precision. */
#define SYBECNOV        20052	/* Attempt to set variable to NULL resulted in overflow. */
#define SYBERDCN        20053	/* Requested data-conversion does not exist. */
#define SYBESFOV        20054	/* dbsafestr() overflowed its destination buffer. */
#define SYBEUNT         20055	/* Unknown network type found in interface file. */
#define SYBECLOS        20056	/* Error in closing network connection. */
#define SYBEUAVE        20057	/* Unable to allocate VMS event flag. */
#define SYBEUSCT        20058	/* Unable to set communications timer. */
#define SYBEEQVA        20059	/* Error in queueing VMS AST routine. */
#define SYBEUDTY        20060	/* Unknown datatype encountered. */
#define SYBETSIT        20061	/* Attempt to call dbtsput() with an invalid timestamp. */
#define SYBEAUTN        20062	/* Attempt to update the timestamp of a table which has no timestamp column. */
#define SYBEBDIO        20063	/* Bad bulk-copy direction.  Must be either IN or OUT. */
#define SYBEBCNT        20064	/* Attempt to use Bulk Copy with a non-existent Server table. */
#define SYBEIFNB        20065	/* Illegal field number passed to bcp_control(). */
#define SYBETTS         20066	/* The table which bulk-copy is attempting to copy to a host-file is shorter than the number of rows which bulk-copy was instructed to skip. */
#define SYBEKBCO        20067	/* 1000 rows successfully bulk-copied to host-file. */
#define SYBEBBCI        20068	/* Batch successfully bulk-copied to SQL Server. */
#define SYBEKBCI        20069	/* Bcp: 1000 rows sent to SQL Server. */
#define SYBEBCRE        20070	/* I/O error while reading bcp data-file. */
#define SYBETPTN        20071	/* Syntax error: only two periods are permitted in table names. */
#define SYBEBCWE        20072	/* I/O error while writing bcp data-file. */
#define SYBEBCNN        20073	/* Attempt to bulk-copy a NULL value into Server column %d,  which does not accept NULL values. */
#define SYBEBCOR        20074	/* Attempt to bulk-copy an oversized row to the SQL Server. */
#define SYBEBCIS        20075	/* Attempt to bulk-copy an illegally-sized column value to the SQL Server. */
#define SYBEBCPI        20076	/* bcp_init() must be called before any other bcp routines. */
#define SYBEBCPN        20077	/* bcp_bind(), bcp_collen(), bcp_colptr(), bcp_moretext() and bcp_sendrow() may be used only after bcp_init() has been called with the copy direction set to DB_IN. */
#define SYBEBCPB        20078	/* bcp_bind(), bcp_moretext() and bcp_sendrow() may NOT be used after bcp_init() has been passed a non-NULL input file name. */
#define SYBEVDPT        20079	/* For bulk copy, all variable-length data must have either a length-prefix or a terminator specified. */
#define SYBEBIVI        20080	/* bcp_columns(), bcp_colfmt() and bcp_colfmt_ps() may be used only after bcp_init() has been passed a valid input file. */
#define SYBEBCBC        20081	/* bcp_columns() must be called before bcp_colfmt() and bcp_colfmt_ps(). */
#define SYBEBCFO        20082	/* Bcp host-files must contain at least one column. */
#define SYBEBCVH        20083	/* bcp_exec() may be called only after bcp_init() has been passed a valid host file. */
#define SYBEBCUO        20084	/* Bcp: Unable to open host data-file. */
#define SYBEBCUC        20085	/* Bcp: Unable to close host data-file. */
#define SYBEBUOE        20086	/* Bcp: Unable to open error-file. */
#define SYBEBUCE        20087	/* Bcp: Unable to close error-file. */
#define SYBEBWEF        20088	/* I/O error while writing bcp error-file. */
#define SYBEASTF        20089	/* VMS: Unable to setmode for control_c ast. */
#define SYBEUACS        20090	/* VMS: Unable to assign channel to sys$command. */
#define SYBEASEC        20091	/* Attempt to send an empty command buffer to the SQL Server. */
#define SYBETMTD        20092	/* Attempt to send too much TEXT data via the dbmoretext() call. */
#define SYBENTTN        20093	/* Attempt to use dbtxtsput() to put a new text-timestamp into a non-existent data row. */
#define SYBEDNTI        20094	/* Attempt to use dbtxtsput() to put a new text-timestamp into a column whose datatype is neither SYBTEXT nor SYBIMAGE. */
#define SYBEBTMT        20095	/* Attempt to send too much TEXT data via the bcp_moretext() call. */
#define SYBEORPF        20096	/* Attempt to set remote password would overflow the login-record's remote-password field. */
#define SYBEUVBF        20097	/* Attempt to read an unknown version of BCP format-file. */
#define SYBEBUOF        20098	/* Bcp: Unable to open format-file. */
#define SYBEBUCF        20099	/* Bcp: Unable to close format-file. */
#define SYBEBRFF        20100	/* I/O error while reading bcp format-file. */
#define SYBEBWFF        20101	/* I/O error while writing bcp format-file. */
#define SYBEBUDF        20102	/* Bcp: Unrecognized datatype found in format-file. */
#define SYBEBIHC        20103	/* Incorrect host-column number found in bcp format-file. */
#define SYBEBEOF        20104	/* Unexpected EOF encountered in BCP data-file. */
#define SYBEBCNL        20105	/* Negative length-prefix found in BCP data-file. */
#define SYBEBCSI        20106	/* Host-file columns may be skipped only when copying INto the Server. */
#define SYBEBCIT        20107	/* It's illegal to use BCP terminators with program variables other than SYBCHAR, SYBBINARY, SYBTEXT, or SYBIMAGE. */
#define SYBEBCSA        20108	/* The BCP hostfile '%s' contains only %ld rows. Skipping all of these rows is not allowed. */
#define SYBENULL        20109	/* NULL DBPROCESS pointer passed to DB-Library. */
#define SYBEUNAM        20110	/* Unable to get current username from operating system. */
#define SYBEBCRO        20111	/* The BCP hostfile '%s' contains only %ld rows. It was impossible to read the requested %ld rows. */
#define SYBEMPLL        20112	/* Attempt to set maximum number of DBPROCESSes lower than 1. */
#define SYBERPIL        20113	/* It is illegal to pass -1 to dbrpcparam() for the datalen of parameters which are of type SYBCHAR, SYBVARCHAR, SYBBINARY, or SYBVARBINARY. */
#define SYBERPUL        20114	/* When passing a SYBINTN, SYBDATETIMN, SYBMONEYN, or SYBFLTN parameter via dbrpcparam(), it's necessary to specify the parameter's maximum or actual length, so that DB-Library can recognize it as a SYBINT1, SYBINT2, SYBINT4, SYBMONEY, or SYBMONEY4, etc. */
#define SYBEUNOP        20115	/* Unknown option passed to dbsetopt(). */
#define SYBECRNC        20116	/* The current row is not a result of compute clause %d, so it is illegal to attempt to extract that data from this row. */
#define SYBERTCC        20117	/* dbreadtext() may not be used to receive the results of a query which contains a COMPUTE clause. */
#define SYBERTSC        20118	/* dbreadtext() may only be used to receive the results of a query which contains a single result column. */
#define SYBEUCRR        20119	/* Internal software error: Unknown connection result reported by                                                 * dbpasswd(). */
#define SYBERPNA        20120	/* The RPC facility is available only when using a SQL Server whose version number is 4.0 or greater. */
#define SYBEOPNA        20121	/* The text/image facility is available only when using a SQL Server whose version number is 4.0 or greater. */
#define SYBEFGTL        20122	/* Bcp: Row number of the first row to be copied cannot be greater than the row number for the last row to be copied.  */
#define SYBECWLL        20123	/* Attempt to set column width less than 1.  */
#define SYBEUFDS        20124	/* Unrecognized format encountered in dbstrbuild(). */
#define SYBEUCPT        20125	/* Unrecognized custom-format parameter-type encountered in dbstrbuild(). */
#define SYBETMCF        20126	/* Attempt to install too many custom formats via dbfmtinstall(). */
#define SYBEAICF        20127	/* Error in attempting to install custom format. */
#define SYBEADST        20128	/* Error in attempting to determine the size of a pair of translation tables. */
#define SYBEALTT        20129	/* Error in attempting to load a pair of translation tables. */
#define SYBEAPCT        20130	/* Error in attempting to perform a character-set translation. */
#define SYBEXOCI        20131	/* A character-set translation overflowed its destination buffer while using bcp to copy data from a host-file to the SQL Server. */
#define SYBEFSHD        20132	/* Error in attempting to find the Sybase home directory. */
#define SYBEAOLF        20133	/* Error in attempting to open a localization file. */
#define SYBEARDI        20134	/* Error in attempting to read datetime information from a localization file. */
#define SYBEURCI        20135	/* Unable to read copyright information from the dblib localization file. */
#define SYBEARDL        20136	/* Error in attempting to read the dblib.loc localization file. */
#define SYBEURMI        20137	/* Unable to read money-format information from the dblib localization file. */
#define SYBEUREM        20138	/* Unable to read error mnemonic from the dblib localization file. */
#define SYBEURES        20139	/* Unable to read error string from the dblib localization file. */
#define SYBEUREI        20140	/* Unable to read error information from the dblib localization file. */
#define SYBEOREN        20141	/* Warning: an out-of-range error-number was encountered in dblib.loc. The maximum permissible error-number is defined as DBERRCOUNT in sybdb.h. */
#define SYBEISOI        20142	/* Invalid sort-order information found. */
#define SYBEIDCL        20143	/* Illegal datetime column length returned by DataServer. Legal datetime lengths are 4 and 8 bytes. */
#define SYBEIMCL        20144	/* Illegal money column length returned by DataServer. Legal money lengths are 4 and 8 bytes. */
#define SYBEIFCL        20145	/* Illegal floating-point column length returned by DataServer. Legal floating-point lengths are 4 and 8 bytes. */
#define SYBEUTDS        20146	/* Unrecognized TDS version received from SQL Server. */
#define SYBEBUFF        20147	/* Bcp: Unable to create format-file. */
#define SYBEACNV        20148	/* Attemp to do conversion with NULL destination variable. */
#define SYBEDPOR        20149	/* Out-of-range datepart constant. */
#define SYBENDC         20150	/* Cannot have negative component in date in numeric form. */
#define SYBEMVOR        20151	/* Month values must be between 1 and 12. */
#define SYBEDVOR        20152	/* Day values must be between 1 and 7. */
#define SYBENBVP        20153	/* Cannot pass dbsetnull() a NULL bindval pointer. */
#define SYBESPID        20154	/* Called dbspid() with a NULL dbproc. */
#define SYBENDTP        20155	/* Called dbdatecrack() with a NULL datetime  parameter. */
#define SYBEXTN         20156	/* The xlt_todisp and xlt_tosrv parameters to dbfree_xlate() were NULL. */
#define SYBEXTDN        20157	/* Warning:  the xlt_todisp parameter to dbfree_xlate() was NULL.  The space associated with the xlt_tosrv parameter has been freed. */
#define SYBEXTSN        20158	/* Warning:  the xlt_tosrv parameter to dbfree_xlate() was NULL.  The space associated with the xlt_todisp parameter has been freed. */
#define SYBENUM         20159	/* Incorrect number of arguments given  to DB-Library.  */
#define SYBETYPE        20160	/* Invalid argument type given to DB-Library. */
#define SYBEGENOS       20161	/* General Operating System Error. */
#define SYBEPAGE        20162	/* wrong resource type or length given for  dbpage() operation.  */
#define SYBEOPTNO       20163	/* Option is not allowed or is unreconized */
#define SYBEETD         20164	/* Failure to send the expected amount of  TEXT or IMAGE data via dbmoretext(). */
#define SYBERTYPE       20165	/* Invalid resource type given to DB-Library. */
#define SYBERFILE       20166	/* "Can not open resource file." */
#define SYBEFMODE       20167	/* Read/Write/Append mode denied on file. */
#define SYBESLCT        20168	/* Could not select or copy field specified */
#define SYBEZTXT        20169	/* Attempt to send zero length TEXT or  IMAGE to dataserver via dbwritetext(). */
#define SYBENTST        20170	/* The file being opened must be a stream_lf. */
#define SYBEOSSL        20171	/* Operating system login level not in range of Secure SQL Server */
#define SYBEESSL        20172	/* Login security level entered does not agree with operating system level */
#define SYBENLNL        20173	/* Program not linked with specified network library. */
#define SYBENHAN        20174	/* called dbrecvpassthru() with a NULL handler parameter. */
#define SYBENBUF        20175	/* called dbsendpassthru() with a NULL buf pointer. */
#define SYBENULP        20176	/* Called %s with a NULL %s parameter. */
#define SYBENOTI        20177	/* No event handler installed. */
#define SYBEEVOP        20178	/* Called dbregwatch() with a bad options parameter. */
#define SYBENEHA        20179	/* Called dbreghandle() with a NULL handler parameter. */
#define SYBETRAN        20180	/* DBPROCESS is being used for another transaction. */
#define SYBEEVST        20181	/* Must initiate a transaction before calling dbregparam(). */
#define SYBEEINI        20182	/* Must call dbreginit() before dbregraise(). */
#define SYBEECRT        20183	/* Must call dbregdefine() before dbregcreate(). */
#define SYBEECAN        20184	/* Attempted to cancel unrequested event notification. */
#define SYBEEUNR        20185	/* Unsolicited event notification received. */
#define SYBERPCS        20186	/* Must call dbrpcinit() before dbrpcparam(). */
#define SYBETPAR        20187	/* No SYBTEXT or SYBIMAGE parameters were defined. */
#define SYBETEXS        20188	/* Called dbmoretext() with a bad size parameter. */
#define SYBETRAC        20189	/* Attempted to turn off a trace flag that was not on. */
#define SYBETRAS        20190	/* DB-Library internal error - trace structure not found. */
#define SYBEPRTF        20191	/* dbtracestring() may only be called from a printfunc(). */
#define SYBETRSN        20192	/* Bad numbytes parameter passed to dbtracestring(). */
#define SYBEBPKS        20193	/* In DBSETLPACKET(), the packet size parameter must be between 0 and 999999. */
#define SYBEIPV         20194	/* %1! is an illegal value for the %2! parameter of %3!. */
#define SYBEMOV         20195	/* Money arithmetic resulted in overflow in function %1!. */
#define SYBEDIVZ        20196	/* Attempt to divide by $0.00 in function %1!. */
#define SYBEASTL        20197	/* Synchronous I/O attempted at AST level. */
#define SYBESEFA        20198	/* DBSETNOTIFS cannot be called if connections are present. */
#define SYBEPOLL        20199	/* Only one dbpoll() can be active at a time. */
#define SYBENOEV        20200	/* dbpoll() cannot be called if registered procedure notifications have been disabled. */
#define SYBEBADPK       20201	/* Packet size of %1! not supported. -- size of %2! used instead. */
#define SYBESECURE      20202	/* Secure Server function not supported in this version. */
#define SYBECAP         20203	/* DB-Library capabilities not accepted by the Server. */
#define SYBEFUNC        20204	/* Functionality not supported at the specified version level. */
#define SYBERESP        20205	/* Response function address passed to dbresponse() must be non-NULL. */
#define SYBEIVERS       20206	/* Illegal version level specified. */
#define SYBEONCE        20207	/* Function can be called only once. */
#define SYBERPNULL      20208	/* value parameter for dbprcparam() can be NULL, only if the datalen parameter is 0 */
#define SYBERPTXTIM     20209	/* RPC parameters cannot be of type Text/Image. */
#define SYBENEG         20210	/* Negotiated login attempt failed. */
#define SYBELBLEN       20211	/* Security labels should be less than 256 characters long. */
#define SYBEUMSG        20212	/* Unknown message-id in MSG datastream. */
#define SYBECAPTYP      20213	/* Unexpected capability type in CAPABILITY datastream. */
#define SYBEBNUM        20214	/* Bad numbytes parameter passed to dbstrcpy() */
#define SYBEBBL         20215	/* Bad bindlen parameter passed to dbsetnull() */
#define SYBEBPREC       20216	/* Illegal precision specified */
#define SYBEBSCALE      20217	/* Illegal scale specified */
#define SYBECDOMAIN     20218	/* Source field value is not within the domain of legal values. */
#define SYBECINTERNAL   20219	/* Internal Conversion error. */
#define SYBEBTYPSRV     20220	/* Datatype is not supported by the server. */
#define SYBEBCSET       20221	/* Unknown character-set encountered." */
#define SYBEFENC        20222	/* Password Encryption failed." */
#define SYBEFRES        20223	/* Challenge-Response function failed.", */
#define SYBEISRVPREC    20224	/* Illegal precision value returned by the server. */
#define SYBEISRVSCL     20225	/* Illegal scale value returned by the server. */
#define SYBEINUMCL      20226	/* Invalid numeric column length returned by the server. */
#define SYBEIDECCL      20227	/* Invalid decimal column length returned by the server. */
#define SYBEBCMTXT      20228	/* bcp_moretext() may be used only when there is at least one text or image column in the server table. */
#define SYBEBCPREC      20229	/* Column %1!: Illegal precision value encountered. */
#define SYBEBCBNPR      20230	/* bcp_bind(): if varaddr is NULL, prefixlen must be 0 and no terminator should be specified. */
#define SYBEBCBNTYP     20231	/* bcp_bind(): if varaddr is NULL and varlen greater than 0, the table column type must be SYBTEXT or SYBIMAGE and the program variable type must be SYBTEXT, SYBCHAR, SYBIMAGE or SYBBINARY. */
#define SYBEBCSNTYP     20232	/* column number %1!: if varaddr is NULL and varlen greater than 0, the table column type must be SYBTEXT or SYBIMAGE and the program variable type must be SYBTEXT, SYBCHAR, SYBIMAGE or SYBBINARY. */
#define SYBEBCPCTYP     20233	/* bcp_colfmt(): If table_colnum is 0, host_type cannot be 0. */
#define SYBEBCVLEN      20234	/* varlen should be greater than or equal to -1. */
#define SYBEBCHLEN      20235	/* host_collen should be greater than or equal to -1. */
#define SYBEBCBPREF     20236	/* Illegal prefix length. Legal values are 0, 1, 2 or 4. */
#define SYBEBCPREF      20237	/* Illegal prefix length. Legal values are -1, 0, 1, 2 or 4. */
#define SYBEBCITBNM     20238	/* bcp_init(): tblname parameter cannot be NULL. */
#define SYBEBCITBLEN    20239	/* bcp_init(): tblname parameter is too long. */
#define SYBEBCSNDROW    20240	/* bcp_sendrow() may NOT be called unless all text data for the previous row has been sent using bcp_moretext(). */
#define SYBEBPROCOL     20241	/* bcp protocol error: returned column count differs from the actual number of columns received. */
#define SYBEBPRODEF     20242	/* bcp protocol error: expected default information and got none. */
#define SYBEBPRONUMDEF  20243	/* bcp protocol error: expected number of defaults differs from the actual number of defaults received. */
#define SYBEBPRODEFID   20244	/* bcp protocol error: default column id and actual column id are not same */
#define SYBEBPRONODEF   20245	/* bcp protocol error:  default value received for column that does not have default. */
#define SYBEBPRODEFTYP  20246	/* bcp protocol error:  default value datatype differs from column datatype. */
#define SYBEBPROEXTDEF  20247	/* bcp protocol error: more than one row of default information received. */
#define SYBEBPROEXTRES  20248	/* bcp protocol error: unexpected set of results received. */
#define SYBEBPROBADDEF  20249	/* bcp protocol error: illegal default column id received. */
#define SYBEBPROBADTYP  20250	/* bcp protocol error: unknown column datatype. */
#define SYBEBPROBADLEN  20251	/* bcp protocol error: illegal datatype length received. */
#define SYBEBPROBADPREC 20252	/* bcp protocol error: illegal precision value received. */
#define SYBEBPROBADSCL  20253	/* bcp protocol error: illegal scale value received. */
#define SYBEBADTYPE     20254	/* Illegal value for type parameter  given to %1!. */
#define SYBECRSNORES    20255	/* Cursor statement generated no results. */
#define SYBECRSNOIND    20256	/* One of the tables involved in the cursor  statement does not have a unique index. */
#define SYBECRSVIEW     20257	/* A view cannot be joined with another table  or a view in a cursor statement. */
#define SYBECRSVIIND    20258	/* The view used in the cursor statement does  not include all the unique index columns of  the underlying tables. */
#define SYBECRSORD      20259	/* Only fully keyset driven cursors can have 'order by', ' group by', or 'having' phrases. */
#define SYBECRSBUFR     20260	/* Row buffering should not be turned on when  using cursor APIs. */
#define SYBECRSNOFREE   20261	/* The DBNOAUTOFREE option should not be  turned on when using cursor APIs. */
#define SYBECRSDIS      20262	/* Cursor statement contains one of the  disallowed phrases 'compute', 'union', 'for browse', or 'select into'. */
#define SYBECRSAGR      20263	/* Aggregate functions are not allowed in a  cursor statement. */
#define SYBECRSFRAND    20264	/* Fetch types RANDOM and RELATIVE can only be  used within the keyset of keyset driven  cursors. */
#define SYBECRSFLAST    20265	/* Fetch type LAST requires fully keyset  driven cursors. */
#define SYBECRSBROL     20266	/* Backward scrolling cannot be used in a  forward scrolling cursor. */
#define SYBECRSFROWN    20267	/* Row number to be fetched is outside valid  range. */
#define SYBECRSBSKEY    20268	/* Keyset cannot be scrolled backward in mixed  cursors with a previous fetch type. */
#define SYBECRSRO       20269	/* Data locking or modifications cannot be  made in a READONLY cursor. */
#define SYBECRSNOCOUNT  20270	/* The DBNOCOUNT option should not be  turned on when doing updates or deletes with  dbcursor(). */
#define SYBECRSTAB      20271	/* Table name must be determined in operations  involving data locking or modifications. */
#define SYBECRSUPDNB    20272	/* Update or insert operations cannot use bind  variables when binding type is NOBIND. */
#define SYBECRSNOWHERE  20273	/* A WHERE clause is not allowed in a cursor  update or insert. */
#define SYBECRSSET      20274	/* A SET clause is required for a cursor  update or insert.  */
#define SYBECRSUPDTAB   20275	/* Update or insert operations using bind  variables require single table cursors. */
#define SYBECRSNOUPD    20276	/* Update or delete operation did not affect  any rows. */
#define SYBECRSINV      20277	/* Invalid cursor statement. */
#define SYBECRSNOKEYS   20278	/* The entire keyset must be defined for KEYSET cursors. */
#define SYBECRSNOBIND   20279	/* Cursor bind must be called prior to updating cursor */
#define SYBECRSFTYPE    20280	/* Unknown fetch type. */
#define SYBECRSINVALID  20281	/* The cursor handle is invalid. */
#define SYBECRSMROWS    20282	/* Multiple rows are returned, only one is expected. */
#define SYBECRSNROWS    20283	/* No rows returned, at least one is expected. */
#define SYBECRSNOLEN    20284	/* No unique index found. */
#define SYBECRSNOPTCC   20285	/* No OPTCC was found. */
#define SYBECRSNORDER   20286	/* The order of clauses must be from, where, and order by. */
#define SYBECRSNOTABLE  20287	/* Table name is NULL. */
#define SYBECRSNUNIQUE  20288	/* No unique keys associated with this view. */
#define SYBECRSVAR      20289	/* There is no valid address associated with this bind. */
#define SYBENOVALUE     20290	/* Security labels require both a name and a value */
#define SYBEVOIDRET     20291	/* Parameter of type SYBVOID cannot  be a return parameter. */
#define SYBECLOSEIN     20292	/* Unable to close interface file. */
#define SYBEBOOL        20293	/* Boolean parameters must be TRUE or FALSE. */
#define SYBEBCPOPT      20294	/* The  option cannot be called while a bulk copy operation is progress. */
#define SYBEERRLABEL    20295	/* An illegal value was returned from the security label handler. */
#define SYBEATTNACK     20296	/* Timed out waiting for server to acknowledge attention." */
#define SYBEBBFL        20297	/* -001- Batch failed in bulk-copy to SQL Server */
#define SYBEDCL         20298	/* -004- DCL Error */
#define SYBECS          20299	/* -004- cs context Error */
#define SYBEBULKINSERT  20599	/* cannot build bulk insert statement */
#define SYBECOLSIZE     22000   /* Invalid column information structure size */

int dbtds(DBPROCESS * dbprocess);

#define DBTDS(a)                dbtds(a)
DBINT dbtextsize(DBPROCESS * dbprocess);
DBBINARY *dbtxptr(DBPROCESS * dbproc, int column);
DBBINARY *dbtxtimestamp(DBPROCESS * dbproc, int column);
DBBINARY *dbtxtsnewval(DBPROCESS * dbprocess);
RETCODE dbtxtsput(DBPROCESS * dbprocess, DBBINARY newtxts, int colnum);
RETCODE dbuse(DBPROCESS * dbproc, const char *name);
const char *dbversion(void);
DBBOOL dbwillconvert(int srctype, int desttype);
RETCODE dbwritetext(DBPROCESS * dbproc, char *objname, DBBINARY * textptr, DBTINYINT textptrlen, DBBINARY * timestamp,
		    DBBOOL log, DBINT size, BYTE * text);

/* LOGINREC manipulation */
RETCODE dbsetlname(LOGINREC * login, const char *value, int which);
RETCODE dbsetlbool(LOGINREC * login, int value, int which);
RETCODE dbsetlshort(LOGINREC * login, int value, int which);
RETCODE dbsetllong(LOGINREC * login, long value, int which);
RETCODE dbsetlversion (LOGINREC * login, BYTE version);

#define DBSETHOST		1
#define DBSETLHOST(x,y)		dbsetlname((x), (y), DBSETHOST)
#define dbsetlhost(x,y)		dbsetlname((x), (y), DBSETHOST)
#define DBSETUSER		2
#define DBSETLUSER(x,y)		dbsetlname((x), (y), DBSETUSER)
#define dbsetluser(x,y)		dbsetlname((x), (y), DBSETUSER)
#define DBSETPWD		3
#define DBSETLPWD(x,y)		dbsetlname((x), (y), DBSETPWD)
#define dbsetlpwd(x,y)		dbsetlname((x), (y), DBSETPWD)
#if defined(DBLIB_UNIMPLEMENTED)
# define DBSETHID		4	/* not implemented */
# define DBSETLHID(x,y)		dbsetlname((x), (y), DBSETHID)
#endif
#define DBSETAPP		5
#define DBSETLAPP(x,y)		dbsetlname((x), (y), DBSETAPP)
#define dbsetlapp(x,y)		dbsetlname((x), (y), DBSETAPP)
#define DBSETBCP		6
#define BCP_SETL(x,y)		dbsetlbool((x), (y), DBSETBCP)
#define DBSETLSECURE(x)		dbsetlbool((x), (1), DBSETBCP)
#define DBSETNATLANG		7	
#define DBSETLNATLANG(x,y)	dbsetlname((x), (y), DBSETNATLANG)
#define dbsetlnatlang(x,y)	dbsetlname((x), (y), DBSETNATLANG)
#if defined(DBLIB_UNIMPLEMENTED)
# define DBSETNOSHORT		8	/* not implemented */
# define DBSETLNOSHORT(x,y)	dbsetlbool((x), (y), DBSETNOSHORT)
# define DBSETHIER		9	/* not implemented */
# define DBSETLHIER(x,y)	dbsetlshort((x), (y), DBSETHIER)
#endif
#define DBSETCHARSET		10
#define DBSETLCHARSET(x,y)	dbsetlname((x), (y), DBSETCHARSET)
#define DBSETPACKET		11
#define DBSETLPACKET(x,y)	dbsetllong((x), (y), DBSETPACKET)
#define dbsetlpacket(x,y)	dbsetllong((x), (y), DBSETPACKET)
#define DBSETENCRYPT		12
#define DBSETLENCRYPT(x,y)	dbsetlbool((x), (y), DBSETENCRYPT)
#define DBSETLABELED		13
#define DBSETLLABELED(x,y)	dbsetlbool((x), (y), DBSETLABELED)
#define BCP_SETLABELED(x,y)	dbsetlbool((x), (y), DBSETLABELED)
#define DBSETDBNAME		14
#define DBSETLDBNAME(x,y)	dbsetlname((x), (y), DBSETDBNAME)
#define DBSETLVERSION(login, version) dbsetlversion((login), (version))
#define DBSETNETWORKAUTH	101
#define DBSETLNETWORKAUTH(x, y)	dbsetlbool((x), (y), DBSETNETWORKAUTH)
#define DBSETMUTUALAUTH		102
#define DBSETLMUTUALAUTH(x, y)	dbsetlbool((x), (y), DBSETMUTUALAUTH)
#define DBSETSERVERPRINCIPAL	103
#define DBSETLSERVERPRINCIPAL(x,y)	dbsetlname((x), (y), DBSETSERVERPRINCIPAL)
/* settings from here are purely FreeTDS extensions */
#define DBSETUTF16		1001
#define DBSETLUTF16(x,y)	dbsetlbool((x), (y), DBSETUTF16)
#define DBSETNTLMV2		1002
#define DBSETLNTLMV2(x,y)	dbsetlbool((x), (y), DBSETNTLMV2)
#define DBSETREADONLY		1003
#define DBSETLREADONLY(x,y)	dbsetlbool((x), (y), DBSETREADONLY)
#define DBSETDELEGATION		1004
#define DBSETLDELEGATION(x, y)	dbsetlbool((x), (y), DBSETDELEGATION)

RETCODE bcp_init(DBPROCESS * dbproc, const char *tblname, const char *hfile, const char *errfile, int direction);
DBINT bcp_done(DBPROCESS * dbproc);

DBINT bcp_batch(DBPROCESS * dbproc);
RETCODE bcp_bind(DBPROCESS * dbproc, BYTE * varaddr, int prefixlen, DBINT varlen, BYTE * terminator, int termlen, int type,
		 int table_column);
RETCODE bcp_collen(DBPROCESS * dbproc, DBINT varlen, int table_column);
RETCODE bcp_columns(DBPROCESS * dbproc, int host_colcount);
RETCODE bcp_colfmt(DBPROCESS * dbproc, int host_column, int host_type, int host_prefixlen, DBINT host_collen,
		   const BYTE * host_term, int host_termlen, int colnum);
RETCODE bcp_colfmt_ps(DBPROCESS * dbproc, int host_column, int host_type, int host_prefixlen, DBINT host_collen,
		      BYTE * host_term, int host_termlen, int colnum, DBTYPEINFO * typeinfo);
RETCODE bcp_colptr(DBPROCESS * dbproc, BYTE * colptr, int table_column);
RETCODE bcp_control(DBPROCESS * dbproc, int field, DBINT value);
int bcp_getbatchsize(DBPROCESS * dbproc); /* FreeTDS only */
RETCODE bcp_exec(DBPROCESS * dbproc, DBINT * rows_copied);
DBBOOL bcp_getl(LOGINREC * login);
RETCODE bcp_options(DBPROCESS * dbproc, int option, BYTE * value, int valuelen);
RETCODE bcp_readfmt(DBPROCESS * dbproc, const char filename[]);
RETCODE bcp_sendrow(DBPROCESS * dbproc);

#ifdef __cplusplus
#if 0
{
#endif
}
#endif

#endif