1 /* FreeTDS - Library of routines accessing Sybase and Microsoft databases 2 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Brian Bruns 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Boston, MA 02111-1307, USA. 18 */ 19 20 #ifndef _cspublic_h_ 21 #define _cspublic_h_ 22 23 #include <cstypes.h> 24 25 #undef TDS_STATIC_CAST 26 #ifdef __cplusplus 27 #define TDS_STATIC_CAST(type, a) static_cast<type>(a) 28 extern "C" 29 { 30 #if 0 31 } 32 #endif 33 #else 34 #define TDS_STATIC_CAST(type, a) ((type)(a)) 35 #endif 36 37 static const char rcsid_cspublic_h[] = "$Id: cspublic.h 534676 2017-05-01 15:21:53Z ucko $"; 38 static const void *const no_unused_cspublic_h_warn[] = { rcsid_cspublic_h, no_unused_cspublic_h_warn }; 39 40 #define CS_PUBLIC 41 #define CS_STATIC static 42 43 #define CS_SUCCEED 1 44 #define CS_FAIL 0 45 #define CS_MEM_ERROR -1 46 #define CS_PENDING -2 47 #define CS_QUIET -3 48 #define CS_BUSY -4 49 #define CS_INTERRUPT -5 50 #define CS_BLK_HAS_TEXT -6 51 #define CS_CONTINUE -7 52 #define CS_FATAL -8 53 #define CS_RET_HAFAILOVER -9 54 #define CS_UNSUPPORTED -10 55 56 #define CS_CANCELED -202 57 #define CS_ROW_FAIL -203 58 #define CS_END_DATA -204 59 #define CS_END_RESULTS -205 60 #define CS_END_ITEM -206 61 #define CS_NOMSG -207 62 #define CS_TIMED_OUT -208 63 64 #define CS_SIZEOF(x) sizeof(x) 65 66 #define CS_LAYER(x) (((x) >> 24) & 0xFF) 67 #define CS_ORIGIN(x) (((x) >> 16) & 0xFF) 68 #define CS_SEVERITY(x) (((x) >> 8) & 0xFF) 69 #define CS_NUMBER(x) ((x) & 0xFF) 70 71 /* forward declarations */ 72 typedef CS_RETCODE(*CS_CSLIBMSG_FUNC) (CS_CONTEXT *, CS_CLIENTMSG *); 73 typedef CS_RETCODE(*CS_CLIENTMSG_FUNC) (CS_CONTEXT *, CS_CONNECTION *, CS_CLIENTMSG *); 74 typedef CS_RETCODE(*CS_SERVERMSG_FUNC) (CS_CONTEXT *, CS_CONNECTION *, CS_SERVERMSG *); 75 76 77 #define CS_IODATA TDS_STATIC_CAST(CS_INT, 1600) 78 #define CS_SRC_VALUE -2562 79 80 81 82 /* status bits for CS_SERVERMSG */ 83 #define CS_HASEED 0x01 84 85 typedef struct _cs_blkdesc CS_BLKDESC; 86 87 /* CS_CAP_REQUEST values */ 88 #define CS_REQ_LANG 1 89 #define CS_REQ_RPC 2 90 #define CS_REQ_NOTIF 3 91 #define CS_REQ_MSTMT 4 92 #define CS_REQ_BCP 5 93 #define CS_REQ_CURSOR 6 94 #define CS_REQ_DYN 7 95 #define CS_REQ_MSG 8 96 #define CS_REQ_PARAM 9 97 #define CS_DATA_INT1 10 98 #define CS_DATA_INT2 11 99 #define CS_DATA_INT4 12 100 #define CS_DATA_BIT 13 101 #define CS_DATA_CHAR 14 102 #define CS_DATA_VCHAR 15 103 #define CS_DATA_BIN 16 104 #define CS_DATA_VBIN 17 105 #define CS_DATA_MNY8 18 106 #define CS_DATA_MNY4 19 107 #define CS_DATA_DATE8 20 108 #define CS_DATA_DATE4 21 109 #define CS_DATA_FLT4 22 110 #define CS_DATA_FLT8 23 111 #define CS_DATA_NUM 24 112 #define CS_DATA_TEXT 25 113 #define CS_DATA_IMAGE 26 114 #define CS_DATA_DEC 27 115 #define CS_DATA_LCHAR 28 116 #define CS_DATA_LBIN 29 117 #define CS_DATA_INTN 30 118 #define CS_DATA_DATETIMEN 31 119 #define CS_DATA_MONEYN 32 120 #define CS_CSR_PREV 33 121 #define CS_CSR_FIRST 34 122 #define CS_CSR_LAST 35 123 #define CS_CSR_ABS 36 124 #define CS_CSR_REL 37 125 #define CS_CSR_MULTI 38 126 #define CS_CON_OOB 39 127 #define CS_CON_INBAND 40 128 #define CS_CON_LOGICAL 41 129 #define CS_PROTO_TEXT 42 130 #define CS_PROTO_BULK 43 131 #define CS_REQ_URGNOTIF 44 132 #define CS_DATA_SENSITIVITY 45 133 #define CS_DATA_BOUNDARY 46 134 #define CS_PROTO_DYNAMIC 47 135 #define CS_PROTO_DYNPROC 48 136 #define CS_DATA_FLTN 49 137 #define CS_DATA_BITN 50 138 #define CS_OPTION_GET 51 139 #define CS_DATA_INT8 52 140 #define CS_DATA_VOID 53 141 142 /* CS_CAP_RESPONSE values */ 143 #define CS_RES_NOMSG 1 144 #define CS_RES_NOEED 2 145 #define CS_RES_NOPARAM 3 146 #define CS_DATA_NOINT1 4 147 #define CS_DATA_NOINT2 5 148 #define CS_DATA_NOINT4 6 149 #define CS_DATA_NOBIT 7 150 #define CS_DATA_NOCHAR 8 151 #define CS_DATA_NOVCHAR 9 152 #define CS_DATA_NOBIN 10 153 #define CS_DATA_NOVBIN 11 154 #define CS_DATA_NOMNY8 12 155 #define CS_DATA_NOMNY4 13 156 #define CS_DATA_NODATE8 14 157 #define CS_DATA_NODATE4 15 158 #define CS_DATA_NOFLT4 16 159 #define CS_DATA_NOFLT8 17 160 #define CS_DATA_NONUM 18 161 #define CS_DATA_NOTEXT 19 162 #define CS_DATA_NOIMAGE 20 163 #define CS_DATA_NODEC 21 164 #define CS_DATA_NOLCHAR 22 165 #define CS_DATA_NOLBIN 23 166 #define CS_DATA_NOINTN 24 167 #define CS_DATA_NODATETIMEN 25 168 #define CS_DATA_NOMONEYN 26 169 #define CS_CON_NOOOB 27 170 #define CS_CON_NOINBAND 28 171 #define CS_PROTO_NOTEXT 29 172 #define CS_PROTO_NOBULK 30 173 #define CS_DATA_NOSENSITIVITY 31 174 #define CS_DATA_NOBOUNDARY 32 175 #define CS_RES_NOTDSDEBUG 33 176 #define CS_RES_NOSTRIPBLANKS 34 177 #define CS_DATA_NOINT8 35 178 179 /* Properties */ 180 enum 181 { 182 /* 183 * These defines looks weird but programs can test support for defines, 184 * compiler can check enum and there are no define side effecs 185 */ 186 CS_USERNAME = 9100, 187 #define CS_USERNAME CS_USERNAME 188 CS_PASSWORD = 9101, 189 #define CS_PASSWORD CS_PASSWORD 190 CS_APPNAME = 9102, 191 #define CS_APPNAME CS_APPNAME 192 CS_HOSTNAME = 9103, 193 #define CS_HOSTNAME CS_HOSTNAME 194 CS_LOGIN_STATUS = 9104, 195 #define CS_LOGIN_STATUS CS_LOGIN_STATUS 196 CS_TDS_VERSION = 9105, 197 #define CS_TDS_VERSION CS_TDS_VERSION 198 CS_CHARSETCNV = 9106, 199 #define CS_CHARSETCNV CS_CHARSETCNV 200 CS_PACKETSIZE = 9107, 201 #define CS_PACKETSIZE CS_PACKETSIZE 202 CS_USERDATA = 9108, 203 #define CS_USERDATA CS_USERDATA 204 CS_NETIO = 9110, 205 #define CS_NETIO CS_NETIO 206 CS_TEXTLIMIT = 9112, 207 #define CS_TEXTLIMIT CS_TEXTLIMIT 208 CS_HIDDEN_KEYS = 9113, 209 #define CS_HIDDEN_KEYS CS_HIDDEN_KEYS 210 CS_VERSION = 9114, 211 #define CS_VERSION CS_VERSION 212 CS_IFILE = 9115, 213 #define CS_IFILE CS_IFILE 214 CS_LOGIN_TIMEOUT = 9116, 215 #define CS_LOGIN_TIMEOUT CS_LOGIN_TIMEOUT 216 CS_TIMEOUT = 9117, 217 #define CS_TIMEOUT CS_TIMEOUT 218 CS_MAX_CONNECT = 9118, 219 #define CS_MAX_CONNECT CS_MAX_CONNECT 220 CS_EXPOSE_FMTS = 9120, 221 #define CS_EXPOSE_FMTS CS_EXPOSE_FMTS 222 CS_EXTRA_INF = 9121, 223 #define CS_EXTRA_INF CS_EXTRA_INF 224 CS_ANSI_BINDS = 9123, 225 #define CS_ANSI_BINDS CS_ANSI_BINDS 226 CS_BULK_LOGIN = 9124, 227 #define CS_BULK_LOGIN CS_BULK_LOGIN 228 CS_LOC_PROP = 9125, 229 #define CS_LOC_PROP CS_LOC_PROP 230 CS_PARENT_HANDLE = 9130, 231 #define CS_PARENT_HANDLE CS_PARENT_HANDLE 232 CS_EED_CMD = 9131, 233 #define CS_EED_CMD CS_EED_CMD 234 CS_DIAG_TIMEOUT = 9132, 235 #define CS_DIAG_TIMEOUT CS_DIAG_TIMEOUT 236 CS_DISABLE_POLL = 9133, 237 #define CS_DISABLE_POLL CS_DISABLE_POLL 238 CS_SEC_ENCRYPTION = 9135, 239 #define CS_SEC_ENCRYPTION CS_SEC_ENCRYPTION 240 CS_SEC_CHALLENGE = 9136, 241 #define CS_SEC_CHALLENGE CS_SEC_CHALLENGE 242 CS_SEC_NEGOTIATE = 9137, 243 #define CS_SEC_NEGOTIATE CS_SEC_NEGOTIATE 244 CS_CON_STATUS = 9143, 245 #define CS_CON_STATUS CS_CON_STATUS 246 CS_VER_STRING = 9144, 247 #define CS_VER_STRING CS_VER_STRING 248 CS_SERVERNAME = 9146, 249 #define CS_SERVERNAME CS_SERVERNAME 250 CS_SEC_APPDEFINED = 9149, 251 #define CS_SEC_APPDEFINED CS_SEC_APPDEFINED 252 CS_STICKY_BINDS = 9151, 253 #define CS_STICKY_BINDS CS_STICKY_BINDS 254 CS_SERVERADDR = 9206, 255 #define CS_SERVERADDR CS_SERVERADDR 256 CS_PORT = 9300 257 #define CS_PORT CS_PORT 258 }; 259 260 /* Arbitrary precision math operators */ 261 enum 262 { 263 CS_ADD = 1, 264 CS_SUB, 265 CS_MULT, 266 CS_DIV 267 }; 268 269 enum 270 { 271 CS_TDS_40 = 7360, 272 CS_TDS_42, 273 CS_TDS_46, 274 CS_TDS_495, 275 CS_TDS_50, 276 CS_TDS_70, 277 CS_TDS_71, 278 #define CS_TDS_71 CS_TDS_71 279 CS_TDS_72, 280 #define CS_TDS_72 CS_TDS_72 281 CS_TDS_73, 282 #define CS_TDS_73 CS_TDS_73 283 CS_TDS_80 = CS_TDS_71, 284 }; 285 286 /* bit mask values used by CS_DATAFMT.status */ 287 #define CS_HIDDEN (1 << 0) 288 #define CS_KEY (1 << 1) 289 #define CS_VERSION_KEY (1 << 2) 290 #define CS_NODATA (1 << 3) 291 #define CS_UPDATABLE (1 << 4) 292 #define CS_CANBENULL (1 << 5) 293 #define CS_DESCIN (1 << 6) 294 #define CS_DESCOUT (1 << 7) 295 #define CS_INPUTVALUE (1 << 8) 296 #define CS_UPDATECOL (1 << 9) 297 #define CS_RETURN (1 << 10) 298 #define CS_TIMESTAMP (1 << 13) 299 #define CS_NODEFAULT (1 << 14) 300 #define CS_IDENTITY (1 << 15) 301 302 /* 303 * DBD::Sybase compares indicator to CS_NULLDATA so this is -1 304 * (the documentation states -1) 305 */ 306 #define CS_GOODDATA 0 307 #define CS_NULLDATA (-1) 308 309 /* CS_CON_STATUS read-only property bit mask values */ 310 #define CS_CONSTAT_CONNECTED 0x01 311 #define CS_CONSTAT_DEAD 0x02 312 313 /* 314 * Code added for CURSOR support 315 * types accepted by ct_cursor 316 */ 317 #define CS_CURSOR_DECLARE 700 318 #define CS_CURSOR_OPEN 701 319 #define CS_CURSOR_ROWS 703 320 #define CS_CURSOR_UPDATE 704 321 #define CS_CURSOR_DELETE 705 322 #define CS_CURSOR_CLOSE 706 323 #define CS_CURSOR_DEALLOC 707 324 #define CS_CURSOR_OPTION 725 325 326 #define CS_FOR_UPDATE TDS_STATIC_CAST(CS_INT, 0x1) 327 #define CS_READ_ONLY TDS_STATIC_CAST(CS_INT, 0x2) 328 #define CS_RESTORE_OPEN TDS_STATIC_CAST(CS_INT, 0x8) 329 #define CS_IMPLICIT_CURSOR TDS_STATIC_CAST(CS_INT, 0x40) 330 331 332 #define CS_CURSTAT_NONE TDS_STATIC_CAST(CS_INT, 0x0) 333 #define CS_CURSTAT_DECLARED TDS_STATIC_CAST(CS_INT, 0x1) 334 #define CS_CURSTAT_OPEN TDS_STATIC_CAST(CS_INT, 0x2) 335 #define CS_CURSTAT_CLOSED TDS_STATIC_CAST(CS_INT, 0x4) 336 #define CS_CURSTAT_RDONLY TDS_STATIC_CAST(CS_INT, 0x8) 337 #define CS_CURSTAT_UPDATABLE TDS_STATIC_CAST(CS_INT, 0x10) 338 #define CS_CURSTAT_ROWCOUNT TDS_STATIC_CAST(CS_INT, 0x20) 339 #define CS_CURSTAT_DEALLOC TDS_STATIC_CAST(CS_INT, 0x40) 340 341 #define CS_CUR_STATUS TDS_STATIC_CAST(CS_INT, 9126) 342 #define CS_CUR_ID TDS_STATIC_CAST(CS_INT, 9127) 343 #define CS_CUR_NAME TDS_STATIC_CAST(CS_INT, 9128) 344 #define CS_CUR_ROWCOUNT TDS_STATIC_CAST(CS_INT, 9129) 345 346 /* options accepted by ct_options() */ 347 #define CS_OPT_DATEFIRST 5001 348 #define CS_OPT_TEXTSIZE 5002 349 #define CS_OPT_STATS_TIME 5003 350 #define CS_OPT_STATS_IO 5004 351 #define CS_OPT_ROWCOUNT 5005 352 #define CS_OPT_DATEFORMAT 5007 353 #define CS_OPT_ISOLATION 5008 354 #define CS_OPT_AUTHON 5009 355 #define CS_OPT_SHOWPLAN 5013 356 #define CS_OPT_NOEXEC 5014 357 #define CS_OPT_ARITHIGNORE 5015 358 #define CS_OPT_TRUNCIGNORE 5016 359 #define CS_OPT_ARITHABORT 5017 360 #define CS_OPT_PARSEONLY 5018 361 #define CS_OPT_GETDATA 5020 362 #define CS_OPT_NOCOUNT 5021 363 #define CS_OPT_FORCEPLAN 5023 364 #define CS_OPT_FORMATONLY 5024 365 #define CS_OPT_CHAINXACTS 5025 366 #define CS_OPT_CURCLOSEONXACT 5026 367 #define CS_OPT_FIPSFLAG 5027 368 #define CS_OPT_RESTREES 5028 369 #define CS_OPT_IDENTITYON 5029 370 #define CS_OPT_CURREAD 5030 371 #define CS_OPT_CURWRITE 5031 372 #define CS_OPT_IDENTITYOFF 5032 373 #define CS_OPT_AUTHOFF 5033 374 #define CS_OPT_ANSINULL 5034 375 #define CS_OPT_QUOTED_IDENT 5035 376 #define CS_OPT_ANSIPERM 5036 377 #define CS_OPT_STR_RTRUNC 5037 378 379 /* options accepted by ct_command() */ 380 enum ct_command_options 381 { 382 CS_MORE = 16, 383 CS_END = 32, 384 CS_RECOMPILE = 188, 385 CS_NO_RECOMPILE, 386 CS_BULK_INIT, 387 CS_BULK_CONT, 388 CS_BULK_DATA, 389 CS_COLUMN_DATA 390 }; 391 392 393 /* 394 * bind formats, should be mapped to TDS types 395 * can be a combination of bit 396 */ 397 enum 398 { 399 CS_FMT_UNUSED = 0, 400 #define CS_FMT_UNUSED CS_FMT_UNUSED 401 CS_FMT_NULLTERM = 1, 402 #define CS_FMT_NULLTERM CS_FMT_NULLTERM 403 CS_FMT_PADNULL = 2, 404 #define CS_FMT_PADBLANK CS_FMT_PADBLANK 405 CS_FMT_PADBLANK = 4, 406 #define CS_FMT_PADNULL CS_FMT_PADNULL 407 CS_FMT_JUSTIFY_RT = 8 408 #define CS_FMT_JUSTIFY_RT CS_FMT_JUSTIFY_RT 409 }; 410 411 /* callbacks */ 412 #define CS_COMPLETION_CB 1 413 #define CS_SERVERMSG_CB 2 414 #define CS_CLIENTMSG_CB 3 415 #define CS_NOTIF_CB 4 416 #define CS_ENCRYPT_CB 5 417 #define CS_CHALLENGE_CB 6 418 #define CS_DS_LOOKUP_CB 7 419 #define CS_SECSESSION_CB 8 420 #define CS_SIGNAL_CB 100 421 #define CS_MESSAGE_CB 9119 422 423 /* string types */ 424 #define CS_NULLTERM -9 425 #define CS_WILDCARD -99 426 #define CS_NO_LIMIT -9999 427 #define CS_UNUSED -99999 428 429 /* other */ 430 #define CS_GET 33 431 #define CS_SET 34 432 #define CS_CLEAR 35 433 #define CS_INIT 36 434 #define CS_STATUS 37 435 #define CS_MSGLIMIT 38 436 #define CS_SUPPORTED 40 437 438 #define CS_CMD_DONE 4046 439 #define CS_CMD_SUCCEED 4047 440 #define CS_CMD_FAIL 4048 441 442 /* commands */ 443 #define CS_LANG_CMD 148 444 #define CS_RPC_CMD 149 445 #define CS_SEND_DATA_CMD 151 446 #define CS_SEND_BULK_CMD 153 447 448 #define CS_VERSION_100 112 449 #define CS_VERSION_110 1100 450 #define CS_VERSION_120 1100 451 #define CS_VERSION_125 12500 452 #define CS_VERSION_150 15000 453 454 #define BLK_VERSION_100 CS_VERSION_100 455 #define BLK_VERSION_110 CS_VERSION_110 456 #define BLK_VERSION_120 CS_VERSION_120 457 #define BLK_VERSION_125 CS_VERSION_125 458 #define BLK_VERSION_150 CS_VERSION_150 459 460 #define CS_FORCE_EXIT 300 461 #define CS_FORCE_CLOSE 301 462 463 #define CS_SYNC_IO 8111 464 #define CS_ASYNC_IO 8112 465 #define CS_DEFER_IO 8113 466 467 #define CS_CANCEL_CURRENT 6000 468 #define CS_CANCEL_ALL 6001 469 #define CS_CANCEL_ATTN 6002 470 471 #define CS_ROW_COUNT 800 472 #define CS_CMD_NUMBER 801 473 #define CS_NUM_COMPUTES 802 474 #define CS_NUMDATA 803 475 #define CS_NUMORDERCOLS 805 476 #define CS_MSGTYPE 806 477 #define CS_BROWSE_INFO 807 478 #define CS_TRANS_STATE 808 479 480 #define CS_TRAN_UNDEFINED 0 481 #define CS_TRAN_IN_PROGRESS 1 482 #define CS_TRAN_COMPLETED 2 483 #define CS_TRAN_FAIL 3 484 #define CS_TRAN_STMT_FAIL 4 485 486 #define CS_COMP_OP 5350 487 #define CS_COMP_ID 5351 488 #define CS_COMP_COLID 5352 489 #define CS_COMP_BYLIST 5353 490 #define CS_BYLIST_LEN 5354 491 492 #define CS_NO_COUNT -1 493 494 #define CS_OP_SUM 5370 495 #define CS_OP_AVG 5371 496 #define CS_OP_COUNT 5372 497 #define CS_OP_MIN 5373 498 #define CS_OP_MAX 5374 499 500 #define CS_CAP_REQUEST 1 501 #define CS_CAP_RESPONSE 2 502 503 #define CS_PREPARE 717 504 #define CS_EXECUTE 718 505 #define CS_DESCRIBE_INPUT 720 506 #define CS_DESCRIBE_OUTPUT 721 507 508 #define CS_DEALLOC 711 509 510 #define CS_LC_ALL 7 511 #define CS_SYB_LANG 8 512 #define CS_SYB_CHARSET 9 513 #define CS_SYB_SORTORDER 10 514 #define CS_SYB_COLLATE CS_SYB_SORTORDER 515 #define CS_SYB_LANG_CHARSET 11 516 517 #define CS_BLK_IN 1 518 #define CS_BLK_OUT 2 519 520 #define CS_BLK_BATCH 1 521 #define CS_BLK_ALL 2 522 #define CS_BLK_CANCEL 3 523 524 /* to do support these */ 525 526 #define CS_BLK_ARRAY_MAXLEN 0x1000 527 #define CS_DEF_PREC 18 528 529 /* Error Severities */ 530 #define CS_SV_INFORM TDS_STATIC_CAST(CS_INT, 0) 531 #define CS_SV_API_FAIL TDS_STATIC_CAST(CS_INT, 1) 532 #define CS_SV_RETRY_FAIL TDS_STATIC_CAST(CS_INT, 2) 533 #define CS_SV_RESOURCE_FAIL TDS_STATIC_CAST(CS_INT, 3) 534 #define CS_SV_CONFIG_FAIL TDS_STATIC_CAST(CS_INT, 4) 535 #define CS_SV_COMM_FAIL TDS_STATIC_CAST(CS_INT, 5) 536 #define CS_SV_INTERNAL_FAIL TDS_STATIC_CAST(CS_INT, 6) 537 #define CS_SV_FATAL TDS_STATIC_CAST(CS_INT, 7) 538 539 /* result_types */ 540 #define CS_COMPUTE_RESULT 4045 541 #define CS_CURSOR_RESULT 4041 542 #define CS_PARAM_RESULT 4042 543 #define CS_ROW_RESULT 4040 544 #define CS_STATUS_RESULT 4043 545 #define CS_COMPUTEFMT_RESULT 4050 546 #define CS_ROWFMT_RESULT 4049 547 #define CS_MSG_RESULT 4044 548 #define CS_DESCRIBE_RESULT 4051 549 550 /* bind types */ 551 #define CS_ILLEGAL_TYPE TDS_STATIC_CAST(CS_INT, -1) 552 #define CS_CHAR_TYPE TDS_STATIC_CAST(CS_INT, 0) 553 #define CS_BINARY_TYPE TDS_STATIC_CAST(CS_INT, 1) 554 #define CS_LONGCHAR_TYPE TDS_STATIC_CAST(CS_INT, 2) 555 #define CS_LONGBINARY_TYPE TDS_STATIC_CAST(CS_INT, 3) 556 #define CS_TEXT_TYPE TDS_STATIC_CAST(CS_INT, 4) 557 #define CS_IMAGE_TYPE TDS_STATIC_CAST(CS_INT, 5) 558 #define CS_TINYINT_TYPE TDS_STATIC_CAST(CS_INT, 6) 559 #define CS_SMALLINT_TYPE TDS_STATIC_CAST(CS_INT, 7) 560 #define CS_INT_TYPE TDS_STATIC_CAST(CS_INT, 8) 561 #define CS_REAL_TYPE TDS_STATIC_CAST(CS_INT, 9) 562 #define CS_FLOAT_TYPE TDS_STATIC_CAST(CS_INT, 10) 563 #define CS_BIT_TYPE TDS_STATIC_CAST(CS_INT, 11) 564 #define CS_DATETIME_TYPE TDS_STATIC_CAST(CS_INT, 12) 565 #define CS_DATETIME4_TYPE TDS_STATIC_CAST(CS_INT, 13) 566 #define CS_MONEY_TYPE TDS_STATIC_CAST(CS_INT, 14) 567 #define CS_MONEY4_TYPE TDS_STATIC_CAST(CS_INT, 15) 568 #define CS_NUMERIC_TYPE TDS_STATIC_CAST(CS_INT, 16) 569 #define CS_DECIMAL_TYPE TDS_STATIC_CAST(CS_INT, 17) 570 #define CS_VARCHAR_TYPE TDS_STATIC_CAST(CS_INT, 18) 571 #define CS_VARBINARY_TYPE TDS_STATIC_CAST(CS_INT, 19) 572 #define CS_LONG_TYPE TDS_STATIC_CAST(CS_INT, 20) 573 #define CS_SENSITIVITY_TYPE TDS_STATIC_CAST(CS_INT, 21) 574 #define CS_BOUNDARY_TYPE TDS_STATIC_CAST(CS_INT, 22) 575 #define CS_VOID_TYPE TDS_STATIC_CAST(CS_INT, 23) 576 #define CS_USHORT_TYPE TDS_STATIC_CAST(CS_INT, 24) 577 #define CS_UNICHAR_TYPE TDS_STATIC_CAST(CS_INT, 25) 578 #define CS_BLOB_TYPE TDS_STATIC_CAST(CS_INT, 26) 579 #define CS_DATE_TYPE TDS_STATIC_CAST(CS_INT, 27) 580 #define CS_TIME_TYPE TDS_STATIC_CAST(CS_INT, 28) 581 #define CS_UNITEXT_TYPE TDS_STATIC_CAST(CS_INT, 29) 582 #define CS_BIGINT_TYPE TDS_STATIC_CAST(CS_INT, 30) 583 #define CS_USMALLINT_TYPE TDS_STATIC_CAST(CS_INT, 31) 584 #define CS_UINT_TYPE TDS_STATIC_CAST(CS_INT, 32) 585 #define CS_UBIGINT_TYPE TDS_STATIC_CAST(CS_INT, 33) 586 #define CS_XML_TYPE TDS_STATIC_CAST(CS_INT, 34) 587 #define CS_UNIQUE_TYPE TDS_STATIC_CAST(CS_INT, 40) 588 589 #define CS_NVARCHAR_TYPE TDS_STATIC_CAST(CS_INT, 90) 590 #define CS_NLONGCHAR_TYPE TDS_STATIC_CAST(CS_INT, 91) 591 592 #define CS_USER_TYPE TDS_STATIC_CAST(CS_INT, 100) 593 /* cs_dt_info type values */ 594 enum 595 { 596 CS_MONTH = 7340, 597 #define CS_MONTH CS_MONTH 598 CS_SHORTMONTH, 599 #define CS_SHORTMONTH CS_SHORTMONTH 600 CS_DAYNAME, 601 #define CS_DAYNAME CS_DAYNAME 602 CS_DATEORDER, 603 #define CS_DATEORDER CS_DATEORDER 604 CS_12HOUR, 605 #define CS_12HOUR CS_12HOUR 606 CS_DT_CONVFMT 607 #define CS_DT_CONVFMT CS_DT_CONVFMT 608 }; 609 610 /* DT_CONVFMT types */ 611 enum 612 { 613 CS_DATES_SHORT = 0, 614 #define CS_DATES_SHORT CS_DATES_SHORT 615 CS_DATES_MDY1, 616 #define CS_DATES_MDY1 CS_DATES_MDY1 617 CS_DATES_YMD1, 618 #define CS_DATES_YMD1 CS_DATES_YMD1 619 CS_DATES_DMY1, 620 #define CS_DATES_DMY1 CS_DATES_DMY1 621 CS_DATES_DMY2, 622 #define CS_DATES_DMY2 CS_DATES_DMY2 623 CS_DATES_DMY3, 624 #define CS_DATES_DMY3 CS_DATES_DMY3 625 CS_DATES_DMY4, 626 #define CS_DATES_DMY4 CS_DATES_DMY4 627 CS_DATES_MDY2, 628 #define CS_DATES_MDY2 CS_DATES_MDY2 629 CS_DATES_HMS, 630 #define CS_DATES_HMS CS_DATES_HMS 631 CS_DATES_LONG, 632 #define CS_DATES_LONG CS_DATES_LONG 633 CS_DATES_MDY3, 634 #define CS_DATES_MDY3 CS_DATES_MDY3 635 CS_DATES_YMD2, 636 #define CS_DATES_YMD2 CS_DATES_YMD2 637 CS_DATES_YMD3, 638 #define CS_DATES_YMD3 CS_DATES_YMD3 639 CS_DATES_YDM1, 640 #define CS_DATES_YDM1 CS_DATES_YDM1 641 CS_DATES_MYD1, 642 #define CS_DATES_MYD1 CS_DATES_MYD1 643 CS_DATES_DYM1, 644 #define CS_DATES_DYM1 CS_DATES_DYM1 645 CS_DATES_MDY1_YYYY = 101, 646 #define CS_DATES_MDY1_YYYY CS_DATES_MDY1_YYYY 647 CS_DATES_YMD1_YYYY, 648 #define CS_DATES_YMD1_YYYY CS_DATES_YMD1_YYYY 649 CS_DATES_DMY1_YYYY, 650 #define CS_DATES_DMY1_YYYY CS_DATES_DMY1_YYYY 651 CS_DATES_DMY2_YYYY, 652 #define CS_DATES_DMY2_YYYY CS_DATES_DMY2_YYYY 653 CS_DATES_DMY3_YYYY, 654 #define CS_DATES_DMY3_YYYY CS_DATES_DMY3_YYYY 655 CS_DATES_DMY4_YYYY, 656 #define CS_DATES_DMY4_YYYY CS_DATES_DMY4_YYYY 657 CS_DATES_MDY2_YYYY, 658 #define CS_DATES_MDY2_YYYY CS_DATES_MDY2_YYYY 659 CS_DATES_MDY3_YYYY = 110, 660 #define CS_DATES_MDY3_YYYY CS_DATES_MDY3_YYYY 661 CS_DATES_YMD2_YYYY, 662 #define CS_DATES_YMD2_YYYY CS_DATES_YMD2_YYYY 663 CS_DATES_YMD3_YYYY 664 #define CS_DATES_YMD3_YYYY CS_DATES_YMD3_YYYY 665 }; 666 667 typedef CS_RETCODE(*CS_CONV_FUNC) (CS_CONTEXT * context, CS_DATAFMT * srcfmt, CS_VOID * src, CS_DATAFMT * detsfmt, CS_VOID * dest, 668 CS_INT * destlen); 669 670 typedef struct _cs_objname 671 { 672 CS_BOOL thinkexists; 673 CS_INT object_type; 674 CS_CHAR last_name[CS_MAX_NAME]; 675 CS_INT lnlen; 676 CS_CHAR first_name[CS_MAX_NAME]; 677 CS_INT fnlen; 678 CS_VOID *scope; 679 CS_INT scopelen; 680 CS_VOID *thread; 681 CS_INT threadlen; 682 } CS_OBJNAME; 683 684 typedef struct _cs_objdata 685 { 686 CS_BOOL actuallyexists; 687 CS_CONNECTION *connection; 688 CS_COMMAND *command; 689 CS_VOID *buffer; 690 CS_INT buflen; 691 } CS_OBJDATA; 692 693 /* Eventually, these should be in terms of TDS values */ 694 enum 695 { 696 CS_OPT_MONDAY = 1, 697 CS_OPT_TUESDAY, 698 CS_OPT_WEDNESDAY, 699 CS_OPT_THURSDAY, 700 CS_OPT_FRIDAY, 701 CS_OPT_SATURDAY, 702 CS_OPT_SUNDAY 703 }; 704 enum 705 { 706 CS_OPT_FMTMDY = 1, 707 CS_OPT_FMTDMY, 708 CS_OPT_FMTYMD, 709 CS_OPT_FMTYDM, 710 CS_OPT_FMTMYD, 711 CS_OPT_FMTDYM 712 }; 713 enum 714 { 715 CS_OPT_LEVEL0 = 0, 716 CS_OPT_LEVEL1, 717 CS_OPT_LEVEL2, 718 CS_OPT_LEVEL3 719 }; 720 721 #define CS_FALSE 0 722 #define CS_TRUE 1 723 724 #define SRV_PROC CS_VOID 725 726 /* constants required for ct_diag (not jet implemented) */ 727 #define CS_CLIENTMSG_TYPE 4700 728 #define CS_SERVERMSG_TYPE 4701 729 #define CS_ALLMSG_TYPE 4702 730 731 CS_RETCODE cs_convert(CS_CONTEXT * ctx, CS_DATAFMT * srcfmt, CS_VOID * srcdata, CS_DATAFMT * destfmt, CS_VOID * destdata, 732 CS_INT * resultlen); 733 CS_RETCODE cs_ctx_alloc(CS_INT version, CS_CONTEXT ** ctx); 734 CS_RETCODE cs_ctx_global(CS_INT version, CS_CONTEXT ** ctx); 735 CS_RETCODE cs_ctx_drop(CS_CONTEXT * ctx); 736 CS_RETCODE cs_config(CS_CONTEXT * ctx, CS_INT action, CS_INT property, CS_VOID * buffer, CS_INT buflen, CS_INT * outlen); 737 CS_RETCODE cs_strbuild(CS_CONTEXT * ctx, CS_CHAR * buffer, CS_INT buflen, CS_INT * resultlen, CS_CHAR * text, CS_INT textlen, 738 CS_CHAR * formats, CS_INT formatlen, ...); 739 CS_RETCODE cs_dt_crack(CS_CONTEXT * ctx, CS_INT datetype, CS_VOID * dateval, CS_DATEREC * daterec); 740 CS_RETCODE cs_loc_alloc(CS_CONTEXT * ctx, CS_LOCALE ** locptr); 741 CS_RETCODE cs_loc_drop(CS_CONTEXT * ctx, CS_LOCALE * locale); 742 CS_RETCODE cs_locale(CS_CONTEXT * ctx, CS_INT action, CS_LOCALE * locale, CS_INT type, CS_VOID * buffer, CS_INT buflen, 743 CS_INT * outlen); 744 CS_RETCODE cs_dt_info(CS_CONTEXT * ctx, CS_INT action, CS_LOCALE * locale, CS_INT type, CS_INT item, CS_VOID * buffer, 745 CS_INT buflen, CS_INT * outlen); 746 747 CS_RETCODE cs_calc(CS_CONTEXT * ctx, CS_INT op, CS_INT datatype, CS_VOID * var1, CS_VOID * var2, CS_VOID * dest); 748 CS_RETCODE cs_cmp(CS_CONTEXT * ctx, CS_INT datatype, CS_VOID * var1, CS_VOID * var2, CS_INT * result); 749 CS_RETCODE cs_conv_mult(CS_CONTEXT * ctx, CS_LOCALE * srcloc, CS_LOCALE * destloc, CS_INT * conv_multiplier); 750 CS_RETCODE cs_diag(CS_CONTEXT * ctx, CS_INT operation, CS_INT type, CS_INT idx, CS_VOID * buffer); 751 CS_RETCODE cs_manage_convert(CS_CONTEXT * ctx, CS_INT action, CS_INT srctype, CS_CHAR * srcname, CS_INT srcnamelen, CS_INT desttype, 752 CS_CHAR * destname, CS_INT destnamelen, CS_INT * conv_multiplier, CS_CONV_FUNC * func); 753 CS_RETCODE cs_objects(CS_CONTEXT * ctx, CS_INT action, CS_OBJNAME * objname, CS_OBJDATA * objdata); 754 CS_RETCODE cs_set_convert(CS_CONTEXT * ctx, CS_INT action, CS_INT srctype, CS_INT desttype, CS_CONV_FUNC * func); 755 CS_RETCODE cs_setnull(CS_CONTEXT * ctx, CS_DATAFMT * datafmt, CS_VOID * buffer, CS_INT buflen); 756 CS_RETCODE cs_strcmp(CS_CONTEXT * ctx, CS_LOCALE * locale, CS_INT type, CS_CHAR * str1, CS_INT len1, CS_CHAR * str2, CS_INT len2, 757 CS_INT * result); 758 CS_RETCODE cs_time(CS_CONTEXT * ctx, CS_LOCALE * locale, CS_VOID * buffer, CS_INT buflen, CS_INT * outlen, CS_DATEREC * daterec); 759 CS_RETCODE cs_will_convert(CS_CONTEXT * ctx, CS_INT srctype, CS_INT desttype, CS_BOOL * result); 760 761 const char * cs_prretcode(int retcode); 762 763 #ifdef __cplusplus 764 #if 0 765 { 766 #endif 767 } 768 #endif 769 770 #endif 771