blob: 20acab339b3581df34c7fe69a17d0f79f77fd9af (
plain)
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
|
// file : odb/mssql/mssql-fwd.hxx
// author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
// license : GNU GPL v2; see accompanying LICENSE file
#ifndef ODB_MSSQL_MSSQL_FWD_HXX
#define ODB_MSSQL_MSSQL_FWD_HXX
#include <odb/pre.hxx>
#include <cstddef> // std::size_t
// Forward declaration for some of the types defined in sqltypes.h or
// sqlncli.h. This allows us to avoid having to include these files
// in public headers.
//
#ifdef _WIN32
// Keep consistent with Windows ODBC headers.
//
typedef long SQLINTEGER;
typedef unsigned long SQLUINTEGER;
#ifdef _WIN64
typedef __int64 SQLLEN;
typedef unsigned __int64 SQLULEN;
#else
#ifndef SQLLEN
typedef SQLINTEGER SQLLEN;
typedef SQLUINTEGER SQLULEN;
#endif
#endif
#else // _WIN32
// Keep consistent with unixODBC headers.
//
template <std::size_t sizeof_long>
struct odbc_types;
template <>
struct odbc_types<4>
{
typedef long integer;
typedef unsigned long uinteger;
typedef integer len;
typedef uinteger ulen;
};
template <>
struct odbc_types<8>
{
typedef int integer;
typedef unsigned int uinteger;
typedef long len;
typedef unsigned long ulen;
};
typedef odbc_types<sizeof (long)>::integer SQLINTEGER;
typedef odbc_types<sizeof (long)>::uinteger SQLUINTEGER;
#ifndef SQLLEN
typedef odbc_types<sizeof (long)>::len SQLLEN;
typedef odbc_types<sizeof (long)>::ulen SQLULEN;
#endif
#endif // _WIN32
typedef short SQLSMALLINT;
typedef unsigned short SQLUSMALLINT;
typedef SQLSMALLINT SQLRETURN;
typedef void* SQLHANDLE;
typedef SQLHANDLE SQLHENV;
typedef SQLHANDLE SQLHDBC;
typedef SQLHANDLE SQLHSTMT;
typedef SQLHANDLE SQLHDESC;
// If you get a redefinition error or warning for one of these macros,
// then that means you included this header (or one that includes it),
// before <sql.h> or <sqlext.h>. As a general rule, include <sql.h> or
// <sqlext.h> before any of the ODB headers.
//
#ifndef SQL_HANDLE_ENV
# define SQL_HANDLE_ENV 1
# define SQL_HANDLE_DBC 2
# define SQL_HANDLE_STMT 3
# define SQL_HANDLE_DESC 4
#endif
// The following types are our own equivalents of ODBC and Native Client
// ODBC driver types. They are all PODs and should be layout-compatible
// with the original types, which means they can be used interchangeably.
//
namespace odb
{
namespace mssql
{
// UCS-2 character type (SQLWCHAR).
//
#ifdef _WIN32
typedef wchar_t ucs2_char;
#else
typedef unsigned short ucs2_char;
#endif
// SQL_NUMERIC_STRUCT
//
#ifndef SQL_MAX_NUMERIC_LEN
#define SQL_MAX_NUMERIC_LEN 16
#else
# if SQL_MAX_NUMERIC_LEN != 16
# error unexpected SQL_NUMERIC_STRUCT value
# endif
#endif
struct decimal
{
unsigned char precision;
signed char scale;
unsigned char sign; // 1 - positive, 0 - negative
unsigned char val[SQL_MAX_NUMERIC_LEN];
};
// DBMONEY
//
struct money
{
// 8-byte signed integer containing value * 10,000.
//
int high;
unsigned int low;
};
// DBMONEY4
//
struct smallmoney
{
int value; // 4-byte signed integer containing value * 10,000.
};
//@@ TODO
//
struct date {};
struct time {};
struct datetime {};
struct datetimeoffset {};
}
}
#include <odb/post.hxx>
#endif // ODB_MSSQL_MSSQL_FWD_HXX
|