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