-
-
Notifications
You must be signed in to change notification settings - Fork 694
/
sqltypes.d
185 lines (161 loc) · 3.96 KB
/
sqltypes.d
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
/**
Declarations for interfacing with the ODBC library.
Adapted with minimal changes from the work of David L. Davis
(refer to the $(HTTP
forum.dlang.org/post/cfk7ql$(DOLLAR)1p4n$(DOLLAR)1@digitaldaemon.com,
original announcement)).
`etc.c.odbc.sqlext.d` corresponds to the `sqlext.h` C header file.
See_Also: $(LINK2 https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/odbc-api-reference,
ODBC API Reference on MSN Online)
*/
module etc.c.odbc.sqltypes;
extern (Windows):
// * API declaration data types *
//alias void *HANDLE;
//alias ubyte SQLCHAR;
alias SQLCHAR = char;
alias SQLSCHAR = byte;
alias SQLDATE = ubyte;
alias SQLDECIMAL = ubyte;
alias SQLDOUBLE = double;
alias SQLFLOAT = double;
alias SQLINTEGER = int;
alias SQLUINTEGER = ushort;
alias SQLNUMERIC = ubyte;
alias SQLREAL = float;
alias SQLTIME = ubyte;
alias SQLTIMESTAMP = ubyte;
alias SQLVARCHAR = ubyte;
alias SQLPOINTER = void*;
alias SQLSMALLINT = short;
alias SQLUSMALLINT = ushort;
// * function return type *
alias SQLRETURN = SQLSMALLINT;
// * generic data structures *
alias SQLHANDLE = void*;
alias SQLHENV = SQLHANDLE;
alias SQLHDBC = SQLHANDLE;
alias SQLHSTMT = SQLHANDLE;
alias SQLHDESC = SQLHANDLE;
// * SQL portable types for C *
//alias ubyte UCHAR; // std.c.windows.windows has this alias
//alias char UCHAR;
alias SCHAR = byte;
//alias SCHAR SQLSCHAR;
alias DWORD = uint;
alias SDWORD = int;
alias SWORD = short;
alias UDWORD = uint ;
alias UWORD = ushort;
alias WORD = short;
//alias UDWORD SQLUINTEGER;
alias SLONG = long;
alias SSHORT = short;
alias ULONG = ulong;
alias USHORT = ushort;
alias SDOUBLE = double;
alias LDOUBLE = double;
alias SFLOAT = float;
alias PTR = void*;
alias HENV = void*;
alias HDBC = void*;
alias HSTMT = void*;
alias RETCODE = short;
alias HWND = SQLPOINTER;
alias SQLHWND = HWND;
// * transfer types for DATE, TIME, TIMESTAMP *
struct DATE_STRUCT
{
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
}
alias SQL_DATE_STRUCT = DATE_STRUCT;
struct TIME_STRUCT
{
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
}
alias SQL_TIME_STRUCT = TIME_STRUCT;
struct TIMESTAMP_STRUCT
{
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;
}
alias SQL_TIMESTAMP_STRUCT = TIMESTAMP_STRUCT;
/+
' enumerations for DATETIME_INTERVAL_SUBCODE values for interval data types
' these values are from SQL-92
+/
enum SQLINTERVAL
{
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
}
struct SQL_YEAR_MONTH_STRUCT
{
SQLUINTEGER year;
SQLUINTEGER month;
}
struct SQL_DAY_SECOND_STRUCT
{
SQLUINTEGER day;
SQLUINTEGER hour;
SQLUINTEGER minute;
SQLUINTEGER second;
SQLUINTEGER fraction;
}
struct SQL_INTERVAL_STRUCT
{
SQLINTERVAL interval_type;
SQLSMALLINT interval_sign;
union intval {
SQL_YEAR_MONTH_STRUCT year_month;
SQL_DAY_SECOND_STRUCT day_second;
}
}
// * internal representation of numeric data type *
const int SQL_MAX_NUMERIC_LEN = 16;
struct SQL_NUMERIC_STRUCT
{
SQLCHAR precision;
SQLSCHAR scale;
SQLCHAR sign; /* 1 if positive, 0 if negative */
SQLCHAR[ SQL_MAX_NUMERIC_LEN ] val;
}
/* size is 16 */
struct SQLGUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
ubyte[ 8 ] Data4;
}
alias GUID = SQLGUID;
alias BOOKMARK = uint;
alias SQLWCHAR = ushort;
version (UNICODE)
{
alias SQLTCHAR = SQLWCHAR;
}
else
{
alias SQLTCHAR = SQLCHAR;
} // end version (UNICODE)