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