// file : odb/mssql/mssql-fwd.hxx // author : Boris Kolpackov // 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 #include // 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 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::integer SQLINTEGER; typedef odbc_types::uinteger SQLUINTEGER; #ifndef SQLLEN typedef odbc_types::len SQLLEN; typedef odbc_types::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 or . As a general rule, include or // 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 #endif // ODB_MSSQL_MSSQL_FWD_HXX