1/* 2 * sqltypes.h 3 * 4 * $Id: sqltypes.h,v 1.23 2007/10/07 13:27:13 source Exp $ 5 * 6 * ODBC typedefs 7 * 8 * The iODBC driver manager. 9 * 10 * Copyright (C) 1995 by Ke Jin <kejin@empress.com> 11 * Copyright (C) 1996-2006 by OpenLink Software <iodbc@openlinksw.com> 12 * All Rights Reserved. 13 * 14 * This software is released under the terms of either of the following 15 * licenses: 16 * 17 * - GNU Library General Public License (see LICENSE.LGPL) 18 * - The BSD License (see LICENSE.BSD). 19 * 20 * Note that the only valid version of the LGPL license as far as this 21 * project is concerned is the original GNU Library General Public License 22 * Version 2, dated June 1991. 23 * 24 * While not mandated by the BSD license, any patches you make to the 25 * iODBC source code may be contributed back into the iODBC project 26 * at your discretion. Contributions will benefit the Open Source and 27 * Data Access community as a whole. Submissions may be made at: 28 * 29 * http://www.iodbc.org 30 * 31 * 32 * GNU Library Generic Public License Version 2 33 * ============================================ 34 * This library is free software; you can redistribute it and/or 35 * modify it under the terms of the GNU Library General Public 36 * License as published by the Free Software Foundation; only 37 * Version 2 of the License dated June 1991. 38 * 39 * This library is distributed in the hope that it will be useful, 40 * but WITHOUT ANY WARRANTY; without even the implied warranty of 41 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 42 * Library General Public License for more details. 43 * 44 * You should have received a copy of the GNU Library General Public 45 * License along with this library; if not, write to the Free 46 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 47 * 48 * 49 * The BSD License 50 * =============== 51 * Redistribution and use in source and binary forms, with or without 52 * modification, are permitted provided that the following conditions 53 * are met: 54 * 55 * 1. Redistributions of source code must retain the above copyright 56 * notice, this list of conditions and the following disclaimer. 57 * 2. Redistributions in binary form must reproduce the above copyright 58 * notice, this list of conditions and the following disclaimer in 59 * the documentation and/or other materials provided with the 60 * distribution. 61 * 3. Neither the name of OpenLink Software Inc. nor the names of its 62 * contributors may be used to endorse or promote products derived 63 * from this software without specific prior written permission. 64 * 65 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 66 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 67 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 68 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR 69 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 70 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 71 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 72 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 73 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 74 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 75 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 76 */ 77 78#ifndef _SQLTYPES_H 79#define _SQLTYPES_H 80 81 82/* 83 * Set default specification to ODBC 3.51 84 */ 85#ifndef ODBCVER 86#define ODBCVER 0x0351 87#endif 88 89#ifdef __cplusplus 90extern "C" { 91#endif 92 93 94/* 95 * Environment specific definitions 96 */ 97#ifndef EXPORT 98#define EXPORT 99#endif 100 101#ifdef WIN32 102#define SQL_API __stdcall 103#else 104#define SQL_API 105#endif 106 107 108/* 109 * API declaration data types 110 */ 111typedef unsigned char SQLCHAR; 112typedef signed short SQLSMALLINT; 113typedef unsigned short SQLUSMALLINT; 114#if (SIZEOF_LONG == 8) 115typedef signed int SQLINTEGER; 116typedef unsigned int SQLUINTEGER; 117#else 118typedef signed long SQLINTEGER; 119typedef unsigned long SQLUINTEGER; 120#endif 121typedef void * SQLPOINTER; 122 123#if (ODBCVER >= 0x0300) 124typedef signed char SQLSCHAR; 125typedef unsigned char SQLDATE; 126typedef unsigned char SQLDECIMAL; 127typedef unsigned char SQLNUMERIC; 128typedef double SQLDOUBLE; 129typedef double SQLFLOAT; 130typedef float SQLREAL; 131typedef unsigned char SQLTIME; 132typedef unsigned char SQLTIMESTAMP; 133typedef unsigned char SQLVARCHAR; 134#endif /* ODBCVER >= 0x0300 */ 135 136 137/* 138 * New Win64 datatypes 139 */ 140#ifdef _WIN64 141typedef INT64 SQLLEN; 142typedef UINT64 SQLULEN; 143typedef UINT64 SQLSETPOSIROW; 144#elif defined(STRICT_ODBC_TYPES) 145typedef long SQLLEN; 146typedef unsigned long SQLULEN; 147typedef unsigned short SQLSETPOSIROW; 148#else 149#define SQLLEN long 150#define SQLULEN unsigned long 151#define SQLSETPOSIROW unsigned short 152#endif 153 154 155/* 156 * Backward compatibility with older platform sdks 157 */ 158typedef SQLULEN SQLROWCOUNT; 159typedef SQLULEN SQLROWSETSIZE; 160typedef SQLULEN SQLTRANSID; 161typedef SQLLEN SQLROWOFFSET; 162 163 164/* 165 * Generic pointer types 166 */ 167typedef void * PTR; 168typedef void * SQLHANDLE; 169 170 171/* 172 * Handles 173 */ 174typedef void * HENV; 175typedef void * HDBC; 176typedef void * HSTMT; 177 178typedef SQLHANDLE SQLHENV; 179typedef SQLHANDLE SQLHDBC; 180typedef SQLHANDLE SQLHSTMT; 181#if (ODBCVER >= 0x0300) 182typedef SQLHANDLE SQLHDESC; 183#endif /* ODBCVER >= 0x0300 */ 184 185 186/* 187 * Window Handle 188 */ 189#if defined(WIN32) || defined (_WIN64) || defined(OS2) 190typedef HWND SQLHWND; 191#elif defined(macintosh) 192#include <Dialogs.h> 193typedef WindowPtr HWND; 194typedef HWND SQLHWND; 195#else 196typedef SQLPOINTER HWND; 197typedef SQLPOINTER SQLHWND; 198#endif 199 200 201/* 202 * SQL portable types for C 203 */ 204typedef unsigned char UCHAR; 205typedef signed char SCHAR; 206typedef short int SWORD; 207typedef unsigned short int UWORD; 208typedef long int SDWORD; 209typedef unsigned long int UDWORD; 210 211typedef signed short SSHORT; 212typedef unsigned short USHORT; 213typedef signed long SLONG; 214typedef unsigned long ULONG; 215typedef float SFLOAT; 216typedef double SDOUBLE; 217typedef double LDOUBLE; 218 219 220/* 221 * Return type for functions 222 */ 223typedef signed short RETCODE; 224typedef SQLSMALLINT SQLRETURN; 225 226 227/* 228 * SQL portable types for C - DATA, TIME, TIMESTAMP, and BOOKMARK 229 */ 230typedef SQLULEN BOOKMARK; 231 232 233typedef struct tagDATE_STRUCT 234 { 235 SQLSMALLINT year; 236 SQLUSMALLINT month; 237 SQLUSMALLINT day; 238 } 239DATE_STRUCT; 240 241#if (ODBCVER >= 0x0300) 242typedef DATE_STRUCT SQL_DATE_STRUCT; 243#endif /* ODBCVER >= 0x0300 */ 244 245 246typedef struct tagTIME_STRUCT 247 { 248 SQLUSMALLINT hour; 249 SQLUSMALLINT minute; 250 SQLUSMALLINT second; 251 } 252TIME_STRUCT; 253 254#if (ODBCVER >= 0x0300) 255typedef TIME_STRUCT SQL_TIME_STRUCT; 256#endif /* ODBCVER >= 0x0300 */ 257 258 259typedef struct tagTIMESTAMP_STRUCT 260 { 261 SQLSMALLINT year; 262 SQLUSMALLINT month; 263 SQLUSMALLINT day; 264 SQLUSMALLINT hour; 265 SQLUSMALLINT minute; 266 SQLUSMALLINT second; 267 SQLUINTEGER fraction; 268 } 269TIMESTAMP_STRUCT; 270 271#if (ODBCVER >= 0x0300) 272typedef TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT; 273#endif /* ODBCVER >= 0x0300 */ 274 275 276/* 277 * Enumeration for DATETIME_INTERVAL_SUBCODE values for interval data types 278 * 279 * These values are from SQL-92 280 */ 281#if (ODBCVER >= 0x0300) 282typedef enum 283 { 284 SQL_IS_YEAR = 1, 285 SQL_IS_MONTH = 2, 286 SQL_IS_DAY = 3, 287 SQL_IS_HOUR = 4, 288 SQL_IS_MINUTE = 5, 289 SQL_IS_SECOND = 6, 290 SQL_IS_YEAR_TO_MONTH = 7, 291 SQL_IS_DAY_TO_HOUR = 8, 292 SQL_IS_DAY_TO_MINUTE = 9, 293 SQL_IS_DAY_TO_SECOND = 10, 294 SQL_IS_HOUR_TO_MINUTE = 11, 295 SQL_IS_HOUR_TO_SECOND = 12, 296 SQL_IS_MINUTE_TO_SECOND = 13 297 } 298SQLINTERVAL; 299 300 301typedef struct tagSQL_YEAR_MONTH 302 { 303 SQLUINTEGER year; 304 SQLUINTEGER month; 305 } 306SQL_YEAR_MONTH_STRUCT; 307 308 309typedef struct tagSQL_DAY_SECOND 310 { 311 SQLUINTEGER day; 312 SQLUINTEGER hour; 313 SQLUINTEGER minute; 314 SQLUINTEGER second; 315 SQLUINTEGER fraction; 316 } 317SQL_DAY_SECOND_STRUCT; 318 319 320typedef struct tagSQL_INTERVAL_STRUCT 321 { 322 SQLINTERVAL interval_type; 323 SQLSMALLINT interval_sign; 324 union 325 { 326 SQL_YEAR_MONTH_STRUCT year_month; 327 SQL_DAY_SECOND_STRUCT day_second; 328 } 329 intval; 330 } 331SQL_INTERVAL_STRUCT; 332#endif /* ODBCVER >= 0x0300 */ 333 334 335/* 336 * The ODBC C types for SQL_C_SBIGINT and SQL_C_UBIGINT 337 */ 338#if (ODBCVER >= 0x0300) 339 340#if (_MSC_VER >= 900) 341# define ODBCINT64 __int64 342#endif 343 344#ifndef ODBCINT64 345# if (SIZEOF_LONG == 8) 346# define ODBCINT64 long 347# else 348# define ODBCINT64 long long 349# endif 350#endif /* ODBCINT64 */ 351 352#if defined (ODBCINT64) 353typedef signed ODBCINT64 SQLBIGINT; 354typedef unsigned ODBCINT64 SQLUBIGINT; 355#endif /* ODBCINT64 */ 356 357#endif /* ODBCVER >= 0x0300 */ 358 359 360/* 361 * The internal representation of the numeric data type 362 */ 363#if (ODBCVER >= 0x0300) 364#define SQL_MAX_NUMERIC_LEN 16 365typedef struct tagSQL_NUMERIC_STRUCT 366 { 367 SQLCHAR precision; 368 SQLSCHAR scale; 369 SQLCHAR sign; /* 0 for negative, 1 for positive */ 370 SQLCHAR val[SQL_MAX_NUMERIC_LEN]; 371 } 372SQL_NUMERIC_STRUCT; 373#endif /* ODBCVER >= 0x0300 */ 374 375 376#if (ODBCVER >= 0x0350) 377#ifdef GUID_DEFINED 378typedef GUID SQLGUID; 379#else 380typedef struct tagSQLGUID 381 { 382 unsigned int Data1; 383 unsigned short Data2; 384 unsigned short Data3; 385 unsigned char Data4[8]; /* BYTE */ 386 } 387SQLGUID; 388#endif /* GUID_DEFINED */ 389#endif /* ODBCVER >= 0x0350 */ 390 391 392#if defined(WIN32) 393typedef unsigned short SQLWCHAR; 394#else 395# include <stdlib.h> 396 397# if defined(__cplusplus) || \ 398 defined(_WCHAR_T) || \ 399 defined(_WCHAR_T_DEFINED) || \ 400 defined(_WCHAR_T_DEFINED_) || \ 401 defined(_WCHAR_T_DECLARED) || \ 402 defined(_BSD_WCHAR_T_DEFINED_) || \ 403 defined(_BSD_WCHAR_T_) || \ 404 defined(_BSD_CT_RUNE_T_) 405typedef wchar_t SQLWCHAR; 406# else 407# error Please make sure your system supports the wchar_t type 408# endif 409#endif /* WIN32 */ 410 411 412#ifdef UNICODE 413typedef SQLWCHAR SQLTCHAR; 414#else 415typedef SQLCHAR SQLTCHAR; 416#endif /* UNICODE */ 417 418#ifdef __cplusplus 419} 420#endif 421 422#endif /* _SQLTYPES_H */ 423