1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7  * Source: $(PHOBOSSRC etc/c/odbc/_sqltypes.d)
8 
9 Declarations for interfacing with the ODBC library.
10 
11 See_Also: $(LINK2 https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/odbc-api-reference,
12             ODBC API Reference on MSDN)
13  */
14 deprecated ("The ODBC 3.5 modules are deprecated. Please use the ODBC4 modules in the `etc.c.odbc` package.")
15 module etc.c.odbc.sqltypes;
16 
17 version (ANSI) {} else version = Unicode;
18 
19 /* Conversion notes:
20   It's assumed that ODBC >= 0x0300.
21 */
22 
23 // Import windows types or declare appropriate aliases if we are not.
24 version (Windows)
25 {
26     public import core.sys.windows.windef;
27     public import core.sys.windows.basetyps; // for GUID
28 }
29 else
30 {
31     alias ushort USHORT, WORD;
32     alias uint ULONG, LONG, BOOL, DWORD;
33     alias void VOID;
34     alias void* PVOID, HANDLE, HWND;
35     alias ubyte UCHAR, BYTE;
36     alias wchar* LPWSTR;
37 
38     align(1) struct GUID {  // size is 16
39         align(1):
40         DWORD   Data1;
41         WORD    Data2;
42         WORD    Data3;
43         BYTE[8] Data4;
44     }
45 }
46 alias GUID SQLGUID;
47 
48 alias byte SCHAR, SQLSCHAR;
49 alias int SDWORD, SLONG, SQLINTEGER;
50 alias short SWORD, SSHORT, RETCODE, SQLSMALLINT;
51 alias ULONG UDWORD;
52 alias USHORT UWORD, SQLUSMALLINT;
53 alias double SDOUBLE, LDOUBLE;
54 alias float SFLOAT;
55 alias PVOID PTR, HENV, HDBC, HSTMT, SQLPOINTER;
56 alias UCHAR SQLCHAR;
57 // #ifndef _WIN64
58 alias UDWORD SQLUINTEGER;
59 // #endif
60 
61 //static if (ODBCVER >= 0x0300)
62 //{
63 alias HANDLE SQLHANDLE;
64 alias SQLHANDLE SQLHENV, SQLHDBC, SQLHSTMT, SQLHDESC;
65 /*
66 }
67 else
68 {
69 alias void* SQLHENV;
70 alias void* SQLHDBC;
71 alias void* SQLHSTMT;
72 }
73 */
74 alias SQLSMALLINT SQLRETURN;
75 alias HWND SQLHWND;
76 alias ULONG BOOKMARK;
77 
78 alias SQLINTEGER SQLLEN, SQLROWOFFSET;
79 alias SQLUINTEGER SQLROWCOUNT, SQLULEN;
80 alias DWORD SQLTRANSID;
81 alias SQLUSMALLINT SQLSETPOSIROW;
82 alias wchar SQLWCHAR;
83 
84 version (Unicode)
85 {
86     alias SQLWCHAR SQLTCHAR;
87 }
88 else
89 {
90     alias SQLCHAR  SQLTCHAR;
91 }
92 //static if (ODBCVER >= 0x0300)
93 //{
94 alias ubyte  SQLDATE, SQLDECIMAL;
95 alias double SQLDOUBLE, SQLFLOAT;
96 alias ubyte  SQLNUMERIC;
97 alias float  SQLREAL;
98 alias ubyte  SQLTIME, SQLTIMESTAMP, SQLVARCHAR;
99 alias long   ODBCINT64, SQLBIGINT;
100 alias ulong  SQLUBIGINT;
101 //}
102 
103 struct DATE_STRUCT {
104     SQLSMALLINT year;
105     SQLUSMALLINT month;
106     SQLUSMALLINT day;
107 }
108 
109 struct TIME_STRUCT {
110     SQLUSMALLINT hour;
111     SQLUSMALLINT minute;
112     SQLUSMALLINT second;
113 }
114 
115 struct TIMESTAMP_STRUCT {
116     SQLSMALLINT year;
117     SQLUSMALLINT month;
118     SQLUSMALLINT day;
119     SQLUSMALLINT hour;
120     SQLUSMALLINT minute;
121     SQLUSMALLINT second;
122     SQLUINTEGER fraction;
123 }
124 
125 //static if (ODBCVER >= 0x0300)
126 //{
127 alias DATE_STRUCT SQL_DATE_STRUCT;
128 alias TIME_STRUCT SQL_TIME_STRUCT;
129 alias TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT;
130 
131 enum SQLINTERVAL {
132     SQL_IS_YEAR = 1,
133     SQL_IS_MONTH,
134     SQL_IS_DAY,
135     SQL_IS_HOUR,
136     SQL_IS_MINUTE,
137     SQL_IS_SECOND,
138     SQL_IS_YEAR_TO_MONTH,
139     SQL_IS_DAY_TO_HOUR,
140     SQL_IS_DAY_TO_MINUTE,
141     SQL_IS_DAY_TO_SECOND,
142     SQL_IS_HOUR_TO_MINUTE,
143     SQL_IS_HOUR_TO_SECOND,
144     SQL_IS_MINUTE_TO_SECOND
145 }
146 
147 struct SQL_YEAR_MONTH_STRUCT {
148     SQLUINTEGER year;
149     SQLUINTEGER month;
150 }
151 
152 struct SQL_DAY_SECOND_STRUCT {
153     SQLUINTEGER day;
154     SQLUINTEGER hour;
155     SQLUINTEGER minute;
156     SQLUINTEGER second;
157     SQLUINTEGER fraction;
158 }
159 
160 struct SQL_INTERVAL_STRUCT {
161     SQLINTERVAL interval_type;
162     SQLSMALLINT interval_sign;
163     union _intval {
164         SQL_YEAR_MONTH_STRUCT year_month;
165         SQL_DAY_SECOND_STRUCT day_second;
166     }
167     _intval intval;
168 }
169 
170 enum SQL_MAX_NUMERIC_LEN = 16;
171 
172 struct SQL_NUMERIC_STRUCT {
173     SQLCHAR precision;
174     SQLSCHAR scale;
175     SQLCHAR sign;
176     SQLCHAR[SQL_MAX_NUMERIC_LEN] val;
177 }
178 // } ODBCVER >= 0x0300