jpayne@69: /* jpayne@69: * fakesql.h -- jpayne@69: * jpayne@69: * Include file that defines the subset of SQL/CLI that TDBC jpayne@69: * uses, so that tdbc::odbc can build without an explicit ODBC jpayne@69: * dependency. It comprises only data type, constant and jpayne@69: * function declarations. jpayne@69: * jpayne@69: * The programmers of this file believe that it contains material not jpayne@69: * subject to copyright under the doctrines of scenes a faire and jpayne@69: * of merger of idea and expression. Accordingly, this file is in the jpayne@69: * public domain. jpayne@69: * jpayne@69: *----------------------------------------------------------------------------- jpayne@69: */ jpayne@69: jpayne@69: #ifndef FAKESQL_H_INCLUDED jpayne@69: #define FAKESQL_H_INCLUDED jpayne@69: jpayne@69: #include jpayne@69: jpayne@69: #ifndef MODULE_SCOPE jpayne@69: #define MODULE_SCOPE extern jpayne@69: #endif jpayne@69: jpayne@69: /* Limits */ jpayne@69: jpayne@69: #define SQL_MAX_DSN_LENGTH 32 jpayne@69: #define SQL_MAX_MESSAGE_LENGTH 512 jpayne@69: jpayne@69: /* Fundamental data types */ jpayne@69: jpayne@69: #ifndef _WIN32 jpayne@69: typedef int BOOL; jpayne@69: typedef unsigned int DWORD; jpayne@69: typedef void* HANDLE; jpayne@69: typedef HANDLE HWND; jpayne@69: typedef unsigned short WCHAR; jpayne@69: typedef char* LPSTR; jpayne@69: typedef WCHAR* LPWSTR; jpayne@69: typedef const char* LPCSTR; jpayne@69: typedef const WCHAR* LPCWSTR; jpayne@69: typedef unsigned short WORD; jpayne@69: #endif jpayne@69: typedef void* PVOID; jpayne@69: typedef short RETCODE; jpayne@69: typedef long SDWORD; jpayne@69: typedef short SWORD; jpayne@69: typedef unsigned short USHORT; jpayne@69: typedef USHORT UWORD; jpayne@69: jpayne@69: /* ODBC data types */ jpayne@69: jpayne@69: typedef Tcl_WideInt SQLBIGINT; jpayne@69: typedef unsigned char SQLCHAR; jpayne@69: typedef double SQLDOUBLE; jpayne@69: typedef void* SQLHANDLE; jpayne@69: typedef SDWORD SQLINTEGER; jpayne@69: typedef PVOID SQLPOINTER; jpayne@69: typedef SWORD SQLSMALLINT; jpayne@69: typedef Tcl_WideUInt SQLUBIGINT; jpayne@69: typedef unsigned char SQLUCHAR; jpayne@69: typedef unsigned int SQLUINTEGER; jpayne@69: typedef UWORD SQLUSMALLINT; jpayne@69: typedef WCHAR SQLWCHAR; jpayne@69: jpayne@69: typedef SQLSMALLINT SQLRETURN; jpayne@69: jpayne@69: /* TODO - Check how the SQLLEN and SQLULEN types are handled on jpayne@69: * 64-bit Unix. */ jpayne@69: jpayne@69: #if defined(_WIN64) jpayne@69: typedef Tcl_WideInt SQLLEN; jpayne@69: typedef Tcl_WideUInt SQLULEN; jpayne@69: #else jpayne@69: typedef SQLINTEGER SQLLEN; jpayne@69: typedef SQLUINTEGER SQLULEN; jpayne@69: #endif jpayne@69: jpayne@69: /* Handle types */ jpayne@69: jpayne@69: typedef SQLHANDLE SQLHENV; jpayne@69: typedef SQLHANDLE SQLHDBC; jpayne@69: typedef SQLHANDLE SQLHSTMT; jpayne@69: typedef HWND SQLHWND; jpayne@69: jpayne@69: #define SQL_HANDLE_DBC 2 jpayne@69: #define SQL_HANDLE_ENV 1 jpayne@69: #define SQL_HANDLE_STMT 3 jpayne@69: jpayne@69: /* Null handles */ jpayne@69: jpayne@69: #define SQL_NULL_HANDLE ((SQLHANDLE) 0) jpayne@69: #define SQL_NULL_HENV ((SQLHENV) 0) jpayne@69: #define SQL_NULL_HDBC ((SQLHDBC) 0) jpayne@69: #define SQL_NULL_HSTMT ((SQLHSTMT) 0) jpayne@69: jpayne@69: /* SQL data types */ jpayne@69: jpayne@69: enum _SQL_DATATYPE { jpayne@69: SQL_BIGINT = -5, jpayne@69: SQL_BINARY = -2, jpayne@69: SQL_BIT = -7, jpayne@69: SQL_CHAR = 1, jpayne@69: SQL_DATE = 9, jpayne@69: SQL_DECIMAL = 3, jpayne@69: SQL_DOUBLE = 8, jpayne@69: SQL_FLOAT = 6, jpayne@69: SQL_INTEGER = 4, jpayne@69: SQL_LONGVARBINARY = -4, jpayne@69: SQL_LONGVARCHAR = -1, jpayne@69: SQL_NUMERIC = 2, jpayne@69: SQL_REAL = 7, jpayne@69: SQL_SMALLINT = 5, jpayne@69: SQL_TIME = 10, jpayne@69: SQL_TIMESTAMP = 11, jpayne@69: SQL_TINYINT = -6, jpayne@69: SQL_VARBINARY = -3, jpayne@69: SQL_VARCHAR = 12, jpayne@69: SQL_WCHAR = -8, jpayne@69: SQL_WVARCHAR = -9, jpayne@69: SQL_WLONGVARCHAR = -10, jpayne@69: }; jpayne@69: jpayne@69: /* C data types */ jpayne@69: jpayne@69: #define SQL_SIGNED_OFFSET (-20) jpayne@69: jpayne@69: #define SQL_C_BINARY SQL_BINARY jpayne@69: #define SQL_C_CHAR SQL_CHAR jpayne@69: #define SQL_C_DOUBLE SQL_DOUBLE jpayne@69: #define SQL_C_LONG SQL_INTEGER jpayne@69: #define SQL_C_SBIGINT SQL_BIGINT + SQL_SIGNED_OFFSET jpayne@69: #define SQL_C_SLONG SQL_INTEGER + SQL_SIGNED_OFFSET jpayne@69: #define SQL_C_WCHAR SQL_WCHAR jpayne@69: jpayne@69: /* Parameter transmission diretions */ jpayne@69: jpayne@69: #define SQL_PARAM_INPUT 1 jpayne@69: jpayne@69: /* Status returns */ jpayne@69: jpayne@69: #define SQL_ERROR (-1) jpayne@69: #define SQL_NO_DATA 100 jpayne@69: #define SQL_NO_TOTAL (-4) jpayne@69: #define SQL_SUCCESS 0 jpayne@69: #define SQL_SUCCESS_WITH_INFO 1 jpayne@69: #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) jpayne@69: jpayne@69: /* Diagnostic fields */ jpayne@69: jpayne@69: enum _SQL_DIAG { jpayne@69: SQL_DIAG_NUMBER = 2, jpayne@69: SQL_DIAG_SQLSTATE = 4 jpayne@69: }; jpayne@69: jpayne@69: /* Transaction isolation levels */ jpayne@69: jpayne@69: #define SQL_TXN_READ_COMMITTED 2 jpayne@69: #define SQL_TXN_READ_UNCOMMITTED 1 jpayne@69: #define SQL_TXN_REPEATABLE_READ 4 jpayne@69: #define SQL_TXN_SERIALIZABLE 8 jpayne@69: jpayne@69: /* Access modes */ jpayne@69: jpayne@69: #define SQL_MODE_READ_ONLY 1UL jpayne@69: #define SQL_MODE_READ_WRITE 0UL jpayne@69: jpayne@69: /* ODBC properties */ jpayne@69: jpayne@69: #define SQL_ACCESS_MODE 101 jpayne@69: #define SQL_AUTOCOMMIT 102 jpayne@69: #define SQL_TXN_ISOLATION 108 jpayne@69: jpayne@69: /* ODBC attributes */ jpayne@69: jpayne@69: #define SQL_ATTR_ACCESS_MODE SQL_ACCESS_MODE jpayne@69: #define SQL_ATTR_CONNECTION_TIMEOUT 113 jpayne@69: #define SQL_ATTR_ODBC_VERSION 200 jpayne@69: #define SQL_ATTR_TXN_ISOLATION SQL_TXN_ISOLATION jpayne@69: #define SQL_ATTR_AUTOCOMMIT SQL_AUTOCOMMIT jpayne@69: jpayne@69: /* Nullable? */ jpayne@69: jpayne@69: #define SQL_NULLABLE_UNKNOWN 2 jpayne@69: jpayne@69: /* Placeholder for length of missing data */ jpayne@69: jpayne@69: #define SQL_NULL_DATA (-1) jpayne@69: jpayne@69: /* ODBC versions */ jpayne@69: jpayne@69: #define SQL_OV_ODBC3 3UL jpayne@69: #define SQL_ODBC_VER 10 jpayne@69: jpayne@69: /* SQLDriverConnect flags */ jpayne@69: jpayne@69: #define SQL_DRIVER_COMPLETE_REQUIRED 3 jpayne@69: #define SQL_DRIVER_NOPROMPT 0 jpayne@69: jpayne@69: /* SQLGetTypeInfo flags */ jpayne@69: jpayne@69: #define SQL_ALL_TYPES 0 jpayne@69: jpayne@69: /* Transaction actions */ jpayne@69: jpayne@69: #define SQL_COMMIT 0 jpayne@69: #define SQL_ROLLBACK 1 jpayne@69: jpayne@69: /* Data source fetch flags */ jpayne@69: jpayne@69: #define SQL_FETCH_FIRST 2 jpayne@69: #define SQL_FETCH_FIRST_SYSTEM 32 jpayne@69: #define SQL_FETCH_FIRST_USER 31 jpayne@69: #define SQL_FETCH_NEXT 1 jpayne@69: jpayne@69: /* ODBCINST actions */ jpayne@69: jpayne@69: #define ODBC_ADD_DSN 1 jpayne@69: #define ODBC_CONFIG_DSN 2 jpayne@69: #define ODBC_REMOVE_DSN 3 jpayne@69: #define ODBC_ADD_SYS_DSN 4 jpayne@69: #define ODBC_CONFIG_SYS_DSN 5 jpayne@69: #define ODBC_REMOVE_SYS_DSN 6 jpayne@69: jpayne@69: /* ODBCINST errors */ jpayne@69: jpayne@69: #define ODBC_ERROR_GENERAL_ERR 1 jpayne@69: #define ODBC_ERROR_INVALID_BUFF_LEN 2 jpayne@69: #define ODBC_ERROR_INVALID_HWND 3 jpayne@69: #define ODBC_ERROR_INVALID_STR 4 jpayne@69: #define ODBC_ERROR_INVALID_REQUEST_TYPE 5 jpayne@69: #define ODBC_ERROR_COMPONENT_NOT_FOUND 6 jpayne@69: #define ODBC_ERROR_INVALID_NAME 7 jpayne@69: #define ODBC_ERROR_INVALID_KEYWORD_VALUE 8 jpayne@69: #define ODBC_ERROR_INVALID_DSN 9 jpayne@69: #define ODBC_ERROR_INVALID_INF 10 jpayne@69: #define ODBC_ERROR_REQUEST_FAILED 11 jpayne@69: #define ODBC_ERROR_INVALID_PATH 12 jpayne@69: #define ODBC_ERROR_LOAD_LIB_FAILED 13 jpayne@69: #define ODBC_ERROR_INVALID_PARAM_SEQUENCE 14 jpayne@69: #define ODBC_ERROR_INVALID_LOG_FILE 15 jpayne@69: #define ODBC_ERROR_USER_CANCELED 16 jpayne@69: #define ODBC_ERROR_USAGE_UPDATE_FAILED 17 jpayne@69: #define ODBC_ERROR_CREATE_DSN_FAILED 18 jpayne@69: #define ODBC_ERROR_WRITING_SYSINFO_FAILED 19 jpayne@69: #define ODBC_ERROR_REMOVE_DSN_FAILED 20 jpayne@69: #define ODBC_ERROR_OUT_OF_MEM 21 jpayne@69: #define ODBC_ERROR_OUTPUT_STRING_TRUNCATED 22 jpayne@69: jpayne@69: /* ODBC client library entry points */ jpayne@69: jpayne@69: #ifdef _WIN32 jpayne@69: #define SQL_API __stdcall jpayne@69: #define INSTAPI __stdcall jpayne@69: #else jpayne@69: #define SQL_API /* nothing */ jpayne@69: #define INSTAPI /* nothing */ jpayne@69: #endif jpayne@69: jpayne@69: #include "odbcStubs.h" jpayne@69: MODULE_SCOPE const odbcStubDefs* odbcStubs; jpayne@69: jpayne@69: /* jpayne@69: * Additional entry points in ODBCINST - all of these are optional jpayne@69: * and resolved with Tcl_FindSymbol, not directly in Tcl_LoadLibrary. jpayne@69: */ jpayne@69: jpayne@69: MODULE_SCOPE BOOL (INSTAPI* SQLConfigDataSourceW)(HWND, WORD, LPCWSTR, jpayne@69: LPCWSTR); jpayne@69: MODULE_SCOPE BOOL (INSTAPI* SQLConfigDataSource)(HWND, WORD, LPCSTR, LPCSTR); jpayne@69: MODULE_SCOPE BOOL (INSTAPI* SQLInstallerErrorW)(WORD, DWORD*, LPWSTR, WORD, jpayne@69: WORD*); jpayne@69: MODULE_SCOPE BOOL (INSTAPI* SQLInstallerError)(WORD, DWORD*, LPSTR, WORD, jpayne@69: WORD*); jpayne@69: jpayne@69: /* jpayne@69: * Function that initialises the stubs jpayne@69: */ jpayne@69: jpayne@69: MODULE_SCOPE Tcl_LoadHandle OdbcInitStubs(Tcl_Interp*, Tcl_LoadHandle*); jpayne@69: jpayne@69: #endif