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
|
/*************************************************************
* sqltypes.h
*
* This is the lowest level include in unixODBC. It defines
* the basic types required by unixODBC and is heavily based
* upon the MS include of the same name (it has to be for
* binary compatability between drivers developed under different
* packages).
*
* You can include this file directly but it is almost always
* included indirectly, by including.. for example sqlext.h
*
* This include makes no effort to be usefull on any platforms other
* than Linux (with some exceptions for UNIX in general).
*
* !!!DO NOT CONTAMINATE THIS FILE WITH NON-Linux CODE!!!
*
*************************************************************/
#ifndef __SQLTYPES_H
#define __SQLTYPES_H
/****************************
* default to the 3.51 definitions. should define ODBCVER before here if you want an older set of defines
***************************/
#ifndef ODBCVER
#define ODBCVER 0x0351
#endif
/*
* if thi sis set, then use a 4 byte unicode definition, insteead of the 2 bye that MS use
*/
#ifdef SQL_WCHART_CONVERT
/*
* Use this if you want to use the C/C++ portable definition of a wide char, wchar_t
* Microsoft hardcoded a definition of unsigned short which may not be compatible with
* your platform specific wide char definition.
*/
#include <wchar.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* this is defined by configure, but will not be on a normal application build
*/
#ifndef SIZEOF_LONG
# if defined(__alpha) || defined(__sparcv9) || defined(__LP64__) || (defined(__HOS_AIX__) && defined(_LP64))
# define SIZEOF_LONG 8
#else
# define SIZEOF_LONG 4
#endif
#endif
/****************************
* These make up for having no windows.h
***************************/
#ifndef ALLREADY_HAVE_WINDOWS_TYPE
#define FAR
#define CALLBACK
#ifdef __OS2__
#define SQL_API _System
#else
#define SQL_API
#endif
#define BOOL int
typedef void* HWND;
typedef char CHAR;
#ifdef UNICODE
/*
* NOTE: The Microsoft unicode define is only for apps that want to use TCHARs and
* be able to compile for both unicode and non-unicode with the same source.
* This is not recommanded for linux applications and is not supported
* by the standard linux string header files.
*/
#ifdef SQL_WCHART_CONVERT
typedef wchar_t TCHAR;
#else
typedef signed short TCHAR;
#endif
#else
typedef char TCHAR;
#endif
#ifndef DONT_TD_VOID
typedef void VOID;
#endif
typedef unsigned short WORD;
#if (SIZEOF_LONG == 4)
typedef unsigned long DWORD;
#else
typedef unsigned int DWORD;
#endif
typedef unsigned char BYTE;
#ifdef SQL_WCHART_CONVERT
typedef wchar_t WCHAR;
#else
typedef unsigned short WCHAR;
#endif
typedef WCHAR* LPWSTR;
typedef const char* LPCSTR;
typedef TCHAR* LPTSTR;
typedef char* LPSTR;
typedef DWORD* LPDWORD;
typedef void* HINSTANCE;
#endif
/****************************
* standard SQL* data types. use these as much as possible when using ODBC calls/vars
***************************/
typedef unsigned char SQLCHAR;
#if (ODBCVER >= 0x0300)
typedef unsigned char SQLDATE;
typedef unsigned char SQLDECIMAL;
typedef double SQLDOUBLE;
typedef double SQLFLOAT;
#endif
/*
* can't use a long it fails on 64 platforms
*/
/*
* I (Nick) have made these changes, to cope with the new 3.52 MS
* changes for 64 bit ODBC, but looking at MS's spec they havn't
* finished it themself. For example, SQLBindCol now expects the
* indicator variable to be a SQLLEN which then is a pointer to
* a 64 bit value. However the online book that comes with the
* headers, then goes on to describe the indicator_ptr in the
* descriptor record (which is set by SQLBindCol) as a pointer
* to a SQLINTEGER (32 bit). So I don't think its ready for the
* big time yet. Thats not to mention all the ODBC apps on 64 bit
* platforms that this would break...
*
* I have just discovered that on win64 sizeof(long) == 4, so its
* all smoke and mirrors...
*
*/
/*
* Failing to define this is *absolutely* broken on 64-bit archs, and we
* are setting it in the Debian build, so use of this ABI is mandatory.
* If you don't like it, go build your own non-64-bit-clean library instead.
* SRL 2006-03-04
*/
#ifndef BUILD_REAL_64_BIT_MODE
#define BUILD_REAL_64_BIT_MODE
#endif
#if (SIZEOF_LONG == 8)
#ifndef BUILD_REAL_64_BIT_MODE
typedef int SQLINTEGER;
typedef unsigned int SQLUINTEGER;
#define SQLLEN SQLINTEGER
#define SQLULEN SQLUINTEGER
#define SQLSETPOSIROW SQLUSMALLINT
typedef SQLULEN SQLROWCOUNT;
typedef SQLULEN SQLROWSETSIZE;
typedef SQLULEN SQLTRANSID;
typedef SQLLEN SQLROWOFFSET;
#else
typedef int SQLINTEGER;
typedef unsigned int SQLUINTEGER;
typedef long SQLLEN;
typedef unsigned long SQLULEN;
typedef unsigned long SQLSETPOSIROW;
/*
* These are not supprted on 64bit ODBC according to MS
* typedef SQLULEN SQLTRANSID;
*/
typedef SQLULEN SQLROWCOUNT;
typedef SQLUINTEGER SQLROWSETSIZE;
typedef SQLLEN SQLROWOFFSET;
#endif
#else
typedef long SQLINTEGER;
typedef unsigned long SQLUINTEGER;
#define SQLLEN SQLINTEGER
#define SQLULEN SQLUINTEGER
#define SQLSETPOSIROW SQLUSMALLINT
typedef SQLULEN SQLROWCOUNT;
typedef SQLULEN SQLROWSETSIZE;
typedef SQLULEN SQLTRANSID;
typedef SQLLEN SQLROWOFFSET;
#endif
#if (ODBCVER >= 0x0300)
typedef unsigned char SQLNUMERIC;
#endif
typedef void * SQLPOINTER;
#if (ODBCVER >= 0x0300)
typedef float SQLREAL;
#endif
typedef signed short int SQLSMALLINT;
typedef unsigned short SQLUSMALLINT;
#if (ODBCVER >= 0x0300)
typedef unsigned char SQLTIME;
typedef unsigned char SQLTIMESTAMP;
typedef unsigned char SQLVARCHAR;
#endif
typedef SQLSMALLINT SQLRETURN;
#if (ODBCVER >= 0x0300)
typedef void * SQLHANDLE;
typedef SQLHANDLE SQLHENV;
typedef SQLHANDLE SQLHDBC;
typedef SQLHANDLE SQLHSTMT;
typedef SQLHANDLE SQLHDESC;
#else
typedef void * SQLHENV;
typedef void * SQLHDBC;
typedef void * SQLHSTMT;
/*
* some things like PHP won't build without this
*/
typedef void * SQLHANDLE;
#endif
/****************************
* These are cast into the actual struct that is being passed around. The
* DriverManager knows what its structs look like and the Driver knows about its
* structs... the app knows nothing about them... just void*
* These are deprecated in favour of SQLHENV, SQLHDBC, SQLHSTMT
***************************/
#if (ODBCVER >= 0x0300)
typedef SQLHANDLE HENV;
typedef SQLHANDLE HDBC;
typedef SQLHANDLE HSTMT;
#else
typedef void * HENV;
typedef void * HDBC;
typedef void * HSTMT;
#endif
/****************************
* more basic data types to augment what windows.h provides
***************************/
#ifndef ALLREADY_HAVE_WINDOWS_TYPE
typedef unsigned char UCHAR;
typedef signed char SCHAR;
typedef SCHAR SQLSCHAR;
#if (SIZEOF_LONG == 4)
typedef long int SDWORD;
typedef unsigned long int UDWORD;
#else
typedef int SDWORD;
typedef unsigned int UDWORD;
#endif
typedef signed short int SWORD;
typedef unsigned short int UWORD;
typedef unsigned int UINT;
typedef signed long SLONG;
typedef signed short SSHORT;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef double SDOUBLE;
typedef double LDOUBLE;
typedef float SFLOAT;
typedef void* PTR;
typedef signed short RETCODE;
typedef void* SQLHWND;
#endif
/****************************
* standard structs for working with date/times
***************************/
#ifndef __SQLDATE
#define __SQLDATE
typedef struct tagDATE_STRUCT
{
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;
#if (ODBCVER >= 0x0300)
typedef DATE_STRUCT SQL_DATE_STRUCT;
#endif
typedef struct tagTIME_STRUCT
{
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
} TIME_STRUCT;
#if (ODBCVER >= 0x0300)
typedef TIME_STRUCT SQL_TIME_STRUCT;
#endif
typedef struct tagTIMESTAMP_STRUCT
{
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;
} TIMESTAMP_STRUCT;
#if (ODBCVER >= 0x0300)
typedef TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT;
#endif
#if (ODBCVER >= 0x0300)
typedef enum
{
SQL_IS_YEAR = 1,
SQL_IS_MONTH = 2,
SQL_IS_DAY = 3,
SQL_IS_HOUR = 4,
SQL_IS_MINUTE = 5,
SQL_IS_SECOND = 6,
SQL_IS_YEAR_TO_MONTH = 7,
SQL_IS_DAY_TO_HOUR = 8,
SQL_IS_DAY_TO_MINUTE = 9,
SQL_IS_DAY_TO_SECOND = 10,
SQL_IS_HOUR_TO_MINUTE = 11,
SQL_IS_HOUR_TO_SECOND = 12,
SQL_IS_MINUTE_TO_SECOND = 13
} SQLINTERVAL;
#endif
#if (ODBCVER >= 0x0300)
typedef struct tagSQL_YEAR_MONTH
{
SQLUINTEGER year;
SQLUINTEGER month;
} SQL_YEAR_MONTH_STRUCT;
typedef struct tagSQL_DAY_SECOND
{
SQLUINTEGER day;
SQLUINTEGER hour;
SQLUINTEGER minute;
SQLUINTEGER second;
SQLUINTEGER fraction;
} SQL_DAY_SECOND_STRUCT;
typedef struct tagSQL_INTERVAL_STRUCT
{
SQLINTERVAL interval_type;
SQLSMALLINT interval_sign;
union {
SQL_YEAR_MONTH_STRUCT year_month;
SQL_DAY_SECOND_STRUCT day_second;
} intval;
} SQL_INTERVAL_STRUCT;
#endif
#endif
/****************************
*
***************************/
#if (ODBCVER >= 0x0300)
#if (SIZEOF_LONG == 8)
# define ODBCINT64 long
# define UODBCINT64 unsigned long
#else
# ifdef HAVE_LONG_LONG
# define ODBCINT64 long long
# define UODBCINT64 unsigned long long
# else
/*
* may fail in some cases, but what else can we do ?
*/
struct __bigint_struct
{
int hiword;
unsigned int loword;
};
struct __bigint_struct_u
{
unsigned int hiword;
unsigned int loword;
};
# define ODBCINT64 struct __bigint_struct
# define UODBCINT64 struct __bigint_struct_u
# endif
#endif
#ifdef ODBCINT64
typedef ODBCINT64 SQLBIGINT;
#endif
#ifdef UODBCINT64
typedef UODBCINT64 SQLUBIGINT;
#endif
#endif
/****************************
* cursor and bookmark
***************************/
#if (ODBCVER >= 0x0300)
#define SQL_MAX_NUMERIC_LEN 16
typedef struct tagSQL_NUMERIC_STRUCT
{
SQLCHAR precision;
SQLSCHAR scale;
SQLCHAR sign; /* 1=pos 0=neg */
SQLCHAR val[SQL_MAX_NUMERIC_LEN];
} SQL_NUMERIC_STRUCT;
#endif
#if (ODBCVER >= 0x0350)
#ifdef GUID_DEFINED
#ifndef ALLREADY_HAVE_WINDOWS_TYPE
typedef GUID SQLGUID;
#else
typedef struct tagSQLGUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[ 8 ];
} SQLGUID;
#endif
#else
typedef struct tagSQLGUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[ 8 ];
} SQLGUID;
#endif
#endif
typedef SQLULEN BOOKMARK;
typedef WCHAR SQLWCHAR;
#ifdef UNICODE
typedef SQLWCHAR SQLTCHAR;
#else
typedef SQLCHAR SQLTCHAR;
#endif
#ifdef __cplusplus
}
#endif
#endif
|