Logo Search packages:      
Sourcecode: psqlodbc version File versions

isqlext.h

/*
 * This file has been modified from the original isqlext.h to add the
 * missing function prototypes and appropriate #defines. It is designed
 * to be a drop in replacement for isqlext.h from iodbc.
 */

#ifndef _INTRINSIC_SQLEXT_H
#define _INTRINSIC_SQLEXT_H

#include "isql.h"

#define SQL_STILL_EXECUTING                     2
#define SQL_NEED_DATA                           99

/* extend SQL datatypes */
#define SQL_DATE                                9
#define SQL_TIME                                10
#define SQL_TIMESTAMP                           11
#define SQL_LONGVARCHAR                         (-1)
#define SQL_BINARY                                    (-2)
#define SQL_VARBINARY                           (-3)
#define SQL_LONGVARBINARY                       (-4)
#define SQL_BIGINT                                    (-5)
#define SQL_TINYINT                                   (-6)
#define SQL_BIT                                       (-7)  /* conflict with SQL3 ??? */
#define SQL_TYPE_DRIVER_START             (-80)

/* C to SQL datatype mapping */
#define SQL_C_DATE                                    SQL_DATE
#define SQL_C_TIME                                    SQL_TIME
#define SQL_C_TIMESTAMP                         SQL_TIMESTAMP
#define SQL_C_BINARY                            SQL_BINARY
#define SQL_C_BIT                               SQL_BIT
#define SQL_C_TINYINT                           SQL_TINYINT

#define SQL_SIGNED_OFFSET                       (-20)
#define SQL_UNSIGNED_OFFSET                     (-22)

#define SQL_C_SLONG                                   (SQL_C_LONG + SQL_SIGNED_OFFSET)
#define SQL_C_SSHORT                            (SQL_C_SHORT + SQL_SIGNED_OFFSET)
#define SQL_C_STINYINT                          (SQL_TINYINT + SQL_SIGNED_OFFSET)
#define SQL_C_ULONG                                   (SQL_C_LONG + SQL_UNSIGNED_OFFSET)
#define SQL_C_USHORT                            (SQL_C_SHORT + SQL_UNSIGNED_OFFSET)
#define SQL_C_UTINYINT                          (SQL_TINYINT + SQL_UNSIGNED_OFFSET)
#define SQL_C_BOOKMARK                          SQL_C_ULONG

#if defined(SQL_TYPE_MIN)
#undef      SQL_TYPE_MIN
#define SQL_TYPE_MIN                      SQL_BIT
/* Note:If SQL_BIT uses SQL3 value (i.e. 14) then,
 *    SQL_TYPE_MIN need to be defined as SQL_TINYINT
 *    (i.e. -6).
 */
#endif

#define SQL_ALL_TYPES                           0

/* SQLDriverConnect flag values */
#define SQL_DRIVER_NOPROMPT                     0
#define SQL_DRIVER_COMPLETE                     1
#define SQL_DRIVER_PROMPT                       2
#define SQL_DRIVER_COMPLETE_REQUIRED      3

/* SQLSetParam extensions */
#define SQL_DEFAULT_PARAM                       (-5)
#define SQL_IGNORE                                    (-6)

/* function number for SQLGetFunctions and _iodbcdm_getproc */
#define SQL_API_SQLALLOCCONNECT                 1
#define SQL_API_SQLALLOCENV                     2
#define SQL_API_SQLALLOCSTMT              3
#define SQL_API_SQLBINDCOL                      4
#define SQL_API_SQLCANCEL                       5
#define SQL_API_SQLCOLATTRIBUTES          6
#define SQL_API_SQLCONNECT                      7
#define SQL_API_SQLDESCRIBECOL                  8
#define SQL_API_SQLDISCONNECT             9
#define SQL_API_SQLERROR                        10
#define SQL_API_SQLEXECDIRECT             11
#define SQL_API_SQLEXECUTE                      12
#define SQL_API_SQLFETCH                        13
#define SQL_API_SQLFREECONNECT                  14
#define SQL_API_SQLFREEENV                      15
#define SQL_API_SQLFREESTMT                     16
#define SQL_API_SQLGETCURSORNAME          17
#define SQL_API_SQLNUMRESULTCOLS          18
#define SQL_API_SQLPREPARE                      19
#define SQL_API_SQLROWCOUNT                     20
#define SQL_API_SQLSETCURSORNAME          21
#define SQL_API_SQLSETPARAM                     22
#define SQL_API_SQLTRANSACT                     23

#define SQL_NUM_FUNCTIONS                       23

#define SQL_EXT_API_START                       40

#define SQL_API_SQLCOLUMNS                      40

#define SQL_API_SQLDRIVERCONNECT          41
#define SQL_API_SQLGETCONNECTOPTION       42
#define SQL_API_SQLGETDATA                      43
#define SQL_API_SQLGETFUNCTIONS                 44
#define SQL_API_SQLGETINFO                      45
#define SQL_API_SQLGETSTMTOPTION          46
#define SQL_API_SQLGETTYPEINFO                  47
#define SQL_API_SQLPARAMDATA              48
#define SQL_API_SQLPUTDATA                      49
#define SQL_API_SQLSETCONNECTOPTION       50
#define SQL_API_SQLSETSTMTOPTION          51
#define SQL_API_SQLSPECIALCOLUMNS         52
#define SQL_API_SQLSTATISTICS             53
#define SQL_API_SQLTABLES                       54

#define SQL_API_SQLBROWSECONNECT          55
#define SQL_API_SQLCOLUMNPRIVILEGES       56
#define SQL_API_SQLDATASOURCES                  57
#define SQL_API_SQLDESCRIBEPARAM          58
#define SQL_API_SQLEXTENDEDFETCH          59
#define SQL_API_SQLFOREIGNKEYS                  60
#define SQL_API_SQLMORERESULTS                  61
#define SQL_API_SQLNATIVESQL              62
#define SQL_API_SQLNUMPARAMS              63
#define SQL_API_SQLPARAMOPTIONS                 64
#define SQL_API_SQLPRIMARYKEYS                  65
#define SQL_API_SQLPROCEDURECOLUMNS       66
#define SQL_API_SQLPROCEDURES             67
#define SQL_API_SQLSETPOS                       68
#define SQL_API_SQLSETSCROLLOPTIONS       69
#define SQL_API_SQLTABLEPRIVILEGES        70

#define SQL_API_SQLDRIVERS                      71
#define SQL_API_SQLBINDPARAMETER          72
#define SQL_EXT_API_LAST                        SQL_API_SQLBINDPARAMETER
#define SQL_NUM_EXTENSIONS                      (SQL_EXT_API_LAST - SQL_EXT_API_START + 1)

#define SQL_API_ALL_FUNCTIONS             0

/* SQLGetInfo infor number */
#define SQL_INFO_FIRST                          0
#define SQL_DRIVER_HDBC                         3
#define SQL_DRIVER_HENV                         4
#define SQL_DRIVER_HSTMT                        5
#define SQL_DRIVER_NAME                         6
#define SQL_ODBC_VER                            10
#define SQL_CURSOR_COMMIT_BEHAVIOR        23
#define SQL_CURSOR_ROLLBACK_BEHAVIOR      24
#define SQL_DEFAULT_TXN_ISOLATION         26

#define SQL_TXN_ISOLATION_OPTION          72
#define SQL_NON_NULLABLE_COLUMNS          75

#define SQL_DRIVER_HLIB                         76
#define SQL_DRIVER_ODBC_VER                     77

#define SQL_QUALIFIER_LOCATION                  114

#define SQL_INFO_LAST                           SQL_QUALIFIER_LOCATION

#define SQL_INFO_DRIVER_START             1000


/* SQL_TXN_ISOLATION_OPTION masks */
#define SQL_TXN_READ_UNCOMMITTED          0x00000001L
#define SQL_TXN_READ_COMMITTED                  0x00000002L
#define SQL_TXN_REPEATABLE_READ                 0x00000004L
#define SQL_TXN_SERIALIZABLE              0x00000008L
#define SQL_TXN_VERSIONING                      0x00000010L

/* SQL_CURSOR_COMMIT_BEHAVIOR and SQL_CURSOR_ROLLBACK_BEHAVIOR values */

#define SQL_CB_DELETE                           0x0000
#define SQL_CB_CLOSE                            0x0001
#define SQL_CB_PRESERVE                         0x0002

/* options for SQLGetStmtOption/SQLSetStmtOption */
#define SQL_QUERY_TIMEOUT                       0
#define SQL_MAX_ROWS                            1
#define SQL_NOSCAN                                    2
#define SQL_MAX_LENGTH                          3
#define SQL_ASYNC_ENABLE                        4
#define SQL_BIND_TYPE                           5
#define SQL_CURSOR_TYPE                         6
#define SQL_CONCURRENCY                         7
#define SQL_KEYSET_SIZE                         8
#define SQL_ROWSET_SIZE                         9
#define SQL_SIMULATE_CURSOR                     10
#define SQL_RETRIEVE_DATA                       11
#define SQL_USE_BOOKMARKS                       12
#define SQL_GET_BOOKMARK                        13          /* GetStmtOption Only */
#define SQL_ROW_NUMBER                          14          /* GetStmtOption Only */
#define SQL_STMT_OPT_MAX                        SQL_ROW_NUMBER

#define SQL_STMT_OPT_MIN                        SQL_QUERY_TIMEOUT

/*
 * ODBC 3.0 renames the above to SQL_ATTR_ values. At this time I don't
 * know if they have also been renumbered or not, I will assume not.
 */
#define SQL_ATTR_QUERY_TIMEOUT                  0
#define SQL_ATTR_MAX_ROWS                       1
#define SQL_ATTR_NOSCAN                         2
#define SQL_ATTR_MAX_LENGTH                     3
#define SQL_ATTR_ASYNC_ENABLE             4
#define SQL_ATTR_BIND_TYPE                      5
#define SQL_ATTR_CURSOR_TYPE              6
#define SQL_ATTR_CONCURRENCY              7
#define SQL_ATTR_KEYSET_SIZE              8
#define SQL_ATTR_ROWSET_SIZE              9
#define SQL_ATTR_SIMULATE_CURSOR          10
#define SQL_ATTR_RETRIEVE_DATA                  11
#define SQL_ATTR_USE_BOOKMARKS                  12
#define SQL_ATTR_GET_BOOKMARK             13          /* GetStmtOption Only */
#define SQL_ATTR_ROW_NUMBER                     14          /* GetStmtOption Only */

/* New in ODBC 3.0      */
#define SQL_ATTR_APP_PARAM_DESC                 15
#define SQL_ATTR_APP_ROW_DESC             16
#define SQL_ATTR_CURSOR_SCROLLABLE        17
#define SQL_ATTR_CURSOR_SENSITITY         18
#define SQL_ATTR_ENABLE_AUTO_IPD          19
#define SQL_ATTR_FETCH_BOOKMARK_PTR       20
#define SQL_ATTR_IMP_PARAM_DESC                 21
#define SQL_ATTR_IMP_ROW_DESC             22
#define SQL_ATTR_METADATA_ID              23
#define SQL_ATTR_PARAM_BIND_OFFSET_PTR    24
#define SQL_ATTR_PARAM_BIND_TYPE          25
#define SQL_ATTR_PARAM_OPERATION_PTR      26
#define SQL_ATTR_PARAM_STATUS_PTR         27
#define SQL_ATTR_PARAMS_PROCESSED_PTR     28
#define SQL_ATTR_PARAMSET_SIZE                  29
#define SQL_ATTR_ROW_ARRAY_SIZE                 30
#define SQL_ATTR_ROW_BIND_OFFSET_PTR      31
#define SQL_ATTR_ROW_OPERATION_PTR        32
#define SQL_ATTR_ROW_STATUS_PTR                 33
#define SQL_ATTR_ROWS_FETCHED_PTR         34

#define SQL_STMT_ATTR_MIN                       SQL_ATTR_QUERY_TIMEOUT
#define SQL_STMT_ATTR_MAX                       SQL_ATTR_ROWS_FETCHED_PTR

/* SQL_QUERY_TIMEOUT options */
#define SQL_QUERY_TIMEOUT_DEFAULT         0UL

/* SQL_MAX_ROWS options */
#define SQL_MAX_ROWS_DEFAULT              0UL

/* SQL_MAX_LENGTH options */
#define SQL_MAX_LENGTH_DEFAULT                  0UL

/* SQL_CONCURRENCY options */
#define SQL_CONCUR_READ_ONLY              1
#define SQL_CONCUR_LOCK                         2
#define SQL_CONCUR_ROWVER                       3
#define SQL_CONCUR_VALUES                       4

/* options for SQLSetConnectOption/SQLGetConnectOption */
#define SQL_ACCESS_MODE                         101
#define SQL_AUTOCOMMIT                          102
#define SQL_LOGIN_TIMEOUT                       103
#define SQL_OPT_TRACE                           104
#define SQL_OPT_TRACEFILE                       105
#define SQL_TRANSLATE_DLL                       106
#define SQL_TRANSLATE_OPTION              107
#define SQL_TXN_ISOLATION                       108
#define SQL_CURRENT_QUALIFIER             109
#define SQL_ODBC_CURSORS                        110
#define SQL_QUIET_MODE                          111
#define SQL_PACKET_SIZE                         112
#define SQL_CONN_OPT_MAX                        SQL_PACKET_SIZE
#define SQL_CONNECT_OPT_DRVR_START        1000

#define SQL_CONN_OPT_MIN                        SQL_ACCESS_MODE

/* SQL_ACCESS_MODE options */
#define SQL_MODE_READ_WRITE                     0UL
#define SQL_MODE_READ_ONLY                      1UL
#define SQL_MODE_DEFAULT                        SQL_MODE_READ_WRITE

/* SQL_AUTOCOMMIT options */
#define SQL_AUTOCOMMIT_OFF                      0UL
#define SQL_AUTOCOMMIT_ON                       1UL
#define SQL_AUTOCOMMIT_DEFAULT                  SQL_AUTOCOMMIT_ON

/* SQL_LOGIN_TIMEOUT options */
#define SQL_LOGIN_TIMEOUT_DEFAULT         15UL

/* SQL_OPT_TRACE options */
#define SQL_OPT_TRACE_OFF                       0UL
#define SQL_OPT_TRACE_ON                        1UL
#define SQL_OPT_TRACE_DEFAULT             SQL_OPT_TRACE_OFF
#define SQL_OPT_TRACE_FILE_DEFAULT        "odbc.log"

/* SQL_ODBC_CURSORS options */
#define SQL_CUR_USE_IF_NEEDED             0UL
#define SQL_CUR_USE_ODBC                        1UL
#define SQL_CUR_USE_DRIVER                      2UL
#define SQL_CUR_DEFAULT                         SQL_CUR_USE_DRIVER

/* Column types and scopes in SQLSpecialColumns. */
#define SQL_BEST_ROWID                          1
#define SQL_ROWVER                                    2

#define SQL_SCOPE_CURROW                        0
#define SQL_SCOPE_TRANSACTION             1
#define SQL_SCOPE_SESSION                       2


/* SQLExtendedFetch flag values */
#define SQL_FETCH_NEXT                          1
#define SQL_FETCH_FIRST                         2
#define SQL_FETCH_LAST                          3
#define SQL_FETCH_PRIOR                         4
#define SQL_FETCH_ABSOLUTE                      5
#define SQL_FETCH_RELATIVE                      6
#define SQL_FETCH_BOOKMARK                      8

/* Defines for SQLBindParameter/SQLProcedureColumns */
#define SQL_PARAM_TYPE_UNKNOWN                  0
#define SQL_PARAM_INPUT                         1
#define SQL_PARAM_INPUT_OUTPUT                  2
#define SQL_RESULT_COL                          3
#define SQL_PARAM_OUTPUT                        4
#define SQL_RETURN_VALUE                        5

/* Defines used by Driver Manager for mapping SQLSetParam to SQLBindParameter */
#define SQL_PARAM_TYPE_DEFAULT                  SQL_PARAM_INPUT_OUTPUT
#define SQL_SETPARAM_VALUE_MAX                  (-1L)

/* SQLStatistics flag values */
#define SQL_INDEX_UNIQUE                        0
#define SQL_INDEX_ALL                           1

#define SQL_QUICK                               0
#define SQL_ENSURE                                    1

/* SQLSetScrollOption flag values */
#define SQL_SCROLL_FORWARD_ONLY                 0L
#define SQL_SCROLL_KEYSET_DRIVEN          (-1L)
#define SQL_SCROLL_DYNAMIC                      (-2L)
#define SQL_SCROLL_STATIC                       (-3L)

/* Everything below has been added to the original isqlext.h that comes
 * with iodbc.
*/

#define SCHAR     signed char
#define FLOAT     float
#define DOUBLE    double

/* SQL DATA TYPES */
typedef UCHAR SQLCHAR;
typedef SWORD SQLSMALLINT;
typedef UWORD SQLUSMALLINT;
typedef SDWORD SQLINTEGER;
typedef UDWORD SQLUINTEGER;
typedef FLOAT SQLREAL;
typedef DOUBLE SQLDOUBLE;
typedef DOUBLE SQLFLOAT;
typedef SCHAR SQLSCHAR;
typedef UDWORD BOOKMARK;

#ifdef GCC                                /* Because I know GCC supports 64 bit ints */

typedef long long int ODBCINT64;
typedef unsigned ODBCINT64 SQLUBIGINT;
typedef ODBCINT64 SQLBIGINT;

#else                                     /* Used even on platforms with 64 bit ints
                                                 * but not GCC */

typedef struct
{
      SQLUINTEGER dwLowWord;
      SQLUINTEGER dwHighWord;
} SQLUBIGINT;

typedef struct
{
      SQLUINTEGER dwLowWord;
      SQLINTEGER  dwHighWord;
} SQLBIGINT;
#endif   /* GCC */

typedef struct tagDATE_STRUCT
{
      SQLSMALLINT year;
      SQLUSMALLINT month;
      SQLUSMALLINT day;
} DATE_STRUCT,

SQL_DATE_STRUCT;

typedef struct tagTIME_STRUCT
{
      SQLUSMALLINT hour;
      SQLUSMALLINT minute;
      SQLUSMALLINT second;
} TIME_STRUCT,

SQL_TIME_STRUCT;

typedef struct tagTIMESTAMP_STRUCT
{
      SQLSMALLINT year;
      SQLUSMALLINT month;
      SQLUSMALLINT day;
      SQLUSMALLINT hour;
      SQLUSMALLINT minute;
      SQLUSMALLINT second;
      SQLUINTEGER fraction;
} TIMESTAMP_STRUCT,

SQL_TIMESTAMP_STRUCT;

/* postodbc doesn't use these but what the heck */
/* Don't know what SQL_MAX_NUMERIC_LEN should be so I can't include this. It's
 * ODBC 3.0 anyway.

typedef struct tagSQL_NUMERIC_STRUCT {
      SQLCHAR           precision;
      SQLSCHAR    scale;
      SQLCHAR           sign;
      SQLCHAR           val[SQL_MAX_NUMERIC_LEN];
} SQL_NUMERIC_STRUCT;

*/

typedef struct tagSQLGUID
{
      DWORD       Data1;
      WORD        Data2;
      WORD        Data3;
      BYTE        Data4[8];
} SQLGUID;

typedef enum
{
      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
} SQLINTERVAL;

typedef struct tagSQL_YEAR_MONTH
{
      SQLUINTEGER year;
      SQLUINTEGER month;
} SQL_YEAR_MONTH_STRUCT;

typedef struct tagSQL_DAY_SECOND
{
      SQLUINTEGER day;
      SQLUINTEGER hour;
      SQLUINTEGER minute;
      SQLUINTEGER second;
      SQLUINTEGER fraction;
} SQL_DAY_SECOND_STRUCT;

typedef struct tagSQL_INTERVAL_STRUCT
{
      SQLINTERVAL interval_type;
      SQLSMALLINT interval_sign;
      union
      {
            SQL_YEAR_MONTH_STRUCT year_month;
            SQL_DAY_SECOND_STRUCT day_second;
      }                 intval;
} SQL_INTERVAL_STRUCT;

#define SQL_MAX_OPTION_STRING_LENGTH      256
#define SQL_NUM_EXTENSIONS    (SQL_EXT_API_LAST - SQL_EXT_API_START + 1)

/* defines for SQL datatypes */
/*
#define SQL_TYPE_DATE
#define SQL_TYPE_TIME
#define SQL_TYPE_TIMESTAMP
#define SQL_CODE_DATE
#define SQL_CODE_TIME
#define SQL_CODE_TIMESTAMP
#define SQL_CODE_MONTH
#define SQL_CODE_YEAR
#define SQL_CODE_YEAR_TO_MONTH
#define SQL_CODE_DAY
#define SQL_CODE_HOUR
#define SQL_CODE_MINUTE
#define SQL_CODE_SECOND
#define SQL_CODE_DAY_TO_HOUR
#define SQL_CODE_DAY_TO_MINUTE
#define SQL_CODE_DAY_TO_SECOND
#define SQL_CODE_HOUR_TO_MINUTE
#define SQL_CODE_HOUR_TO_SECOND
#define SQL_CODE_MINUTE_TO_SECOND
*/
#define SQL_INTERVAL_YEAR                       (-80)
#define SQL_INTERVAL_MONTH                      (-81)
#define SQL_INTERVAL_YEAR_TO_MONTH        (-82)
#define SQL_INTERVAL_DAY                        (-83)
#define SQL_INTERVAL_HOUR                       (-84)
#define SQL_INTERVAL_MINUTE                     (-85)
#define SQL_INTERVAL_SECOND                     (-86)
#define SQL_INTERVAL_DAY_TO_HOUR          (-87)
#define SQL_INTERVAL_DAY_TO_MINUTE        (-88)
#define SQL_INTERVAL_DAY_TO_SECOND        (-89)
#define SQL_INTERVAL_HOUR_TO_MINUTE       (-90)
#define SQL_INTERVAL_HOUR_TO_SECOND       (-91)
#define SQL_INTERVAL_MINUTE_TO_SECOND     (-92)

#define SQL_UNICODE                                   (-95)
#define SQL_UNICODE_VARCHAR                     (-96)
#define SQL_UNICODE_LONGVARCHAR                 (-97)
#define SQL_UNICODE_CHAR                        SQL_UNICODE

/* C to SQL data types */
/*
#define SQL_C_TYPE_DATE                         SQL_TYPE_DATE
#define SQL_C_TYPE_TIME                         SQL_TYPE_TIME
#define SQL_C_TYPE_TIMESTAMP              SQL_TYPE_TIMESTAMP
#define SQL_C_GUID                                    SQLGUID
*/
#define SQL_C_INTERVAL_MONTH              SQL_INTERVAL_MONTH
#define SQL_C_INTERVAL_YEAR                     SQL_INTERVAL_YEAR
#define SQL_C_INTERVAL_YEAR_TO_MONTH      SQL_INTERVAL_YEAR_TO_MONTH
#define SQL_C_INTERVAL_DAY                      SQL_INTERVAL_DAY
#define SQL_C_INTERVAL_HOUR                     SQL_INTERVAL_HOUR
#define SQL_C_INTERVAL_MINUTE             SQL_INTERVAL_MINUTE
#define SQL_C_INTERVAL_SECOND             SQL_INTERVAL_SECOND
#define SQL_C_INTERVAL_DAY_TO_HOUR        SQL_INTERVAL_DAY_TO_HOUR
#define SQL_C_INTERVAL_DAY_TO_MINUTE      SQL_INTERVAL_DAY_TO_MINUTE
#define SQL_C_INTERVAL_DAY_TO_SECOND      SQL_INTERVAL_DAY_TO_SECOND
#define SQL_C_INTERVAL_HOUR_TO_MINUTE     SQL_INTERVAL_HOUR_TO_MINUTE
#define SQL_C_INTERVAL_HOUR_TO_SECOND     SQL_INTERVAL_HOUR_TO_SECOND
#define SQL_C_INTERVAL_MINUTE_TO_SECOND SQL_INTERVAL_MINUTE_TO_SECOND
#define SQL_C_NUMERIC                           SQL_NUMERIC
#define SQL_C_VARBOOKMARK                       SQL_C_BINARY
#define SQL_C_SBIGINT                           (SQL_BIGINT + SQL_SIGNED_OFFSET)
#define SQL_C_UBIGINT                           (SQL_BIGINT + SQL_UNSIGNED_OFFSET)

#define SQL_TRUE  1UL
#define SQL_FALSE 0UL

/* SQLGetData */
#define SQL_NO_TOTAL                            (-4)

/* SQLBindParameter */
#define SQL_LEN_DATA_AT_EXEC_OFFSET       (-100)
#define SQL_LEN_DATA_AT_EXEC(length)      (-length+SQL_LEN_DATA_AT_EXEC_OFFSET)

#define SQL_LEN_BINARY_ATTR_OFFSET        (-100)
#define SQL_LEN_BINARY_ATTR(length)       (-(length)+SQL_LEN_BINARY_ATTR_OFFSET)

/* SQLExtendedFetch - row status */
#define SQL_ROW_SUCCESS                         0
#define SQL_ROW_DELETED                         1
#define SQL_ROW_UPDATED                         2
#define SQL_ROW_NOROW                           3
#define SQL_ROW_ADDED                           4
#define SQL_ROW_ERROR                           5

/* SQLForeignKeys - rule flags */
#define SQL_CASCADE                                   0
#define SQL_RESTRICT                            1
#define SQL_SET_NULL                            2
#define SQL_NO_ACTION                           3           /* ODBC 3.0 */
#define SQL_SET_DEFAULT                         4

/* SQLForeignKeys - Deferrability (ODBC 3.0) */
#define SQL_INITIALLY_DEFERRED                  5
#define SQL_INITIALLY_IMMEDIATE                 6
#define SQL_NOT_DEFFERABLE                      2

/* Constants not in isqlext.h but needed by the driver. I have no idea
* if these correspond correctly with those from Microsoft or not. I don't
* know that it matters as long as the symbolic names are used. I simply
* assigned the numbers in the order they appear in the SQLGetInfo function
* of postodbc.
*/

/*
 *    SQLGetInfo
 */
#define SQL_ACTIVE_CONNECTIONS                  0
#define SQL_ACTIVE_STATEMENTS             1
#define SQL_DATA_SOURCE_NAME              2
#define SQL_DRIVER_VER                          7
#define SQL_FETCH_DIRECTION                     8
#define SQL_ODBC_API_CONFORMANCE          9
#define SQL_ROW_UPDATES                         11
#define SQL_ODBC_SAG_CLI_CONFORMANCE      12
#define SQL_SERVER_NAME                         13
#define SQL_SEARCH_PATTERN_ESCAPE         14
#define SQL_ODBC_SQL_CONFORMANCE          15
#define SQL_DBMS_NAME                           17
#define SQL_DBMS_VER                            18
#define SQL_ACCESSIBLE_TABLES             19
#define SQL_ACCESSIBLE_PROCEDURES         20
#define SQL_PROCEDURES                          21
#define SQL_CONCAT_NULL_BEHAVIOR          22
#define SQL_DATA_SOURCE_READ_ONLY         25
#define SQL_EXPRESSIONS_IN_ORDERBY        27
#define SQL_IDENTIFIER_CASE                     28
#define SQL_IDENTIFIER_QUOTE_CHAR         29
#define SQL_MAX_COLUMN_NAME_LEN                 30
#define SQL_MAX_CURSOR_NAME_LEN                 31
#define SQL_MAX_OWNER_NAME_LEN                  32
#define SQL_MAX_PROCEDURE_NAME_LEN        33
#define SQL_MAX_QUALIFIER_NAME_LEN        34
#define SQL_MAX_TABLE_NAME_LEN                  35
#define SQL_MULT_RESULT_SETS              36
#define SQL_MULTIPLE_ACTIVE_TXN                 37
#define SQL_OUTER_JOINS                         38
#define SQL_OWNER_TERM                          39
#define SQL_PROCEDURE_TERM                      40
#define SQL_QUALIFIER_NAME_SEPARATOR      41
#define SQL_QUALIFIER_TERM                      42
#define SQL_SCROLL_CONCURRENCY                  43
#define SQL_SCROLL_OPTIONS                      44
#define SQL_TABLE_TERM                          45
#define SQL_TXN_CAPABLE                         46
#define SQL_USER_NAME                           47
#define SQL_CONVERT_FUNCTIONS             48
#define SQL_NUMERIC_FUNCTIONS             49
#define SQL_STRING_FUNCTIONS              50
#define SQL_SYSTEM_FUNCTIONS              51
#define SQL_TIMEDATE_FUNCTIONS                  52
#define SQL_CONVERT_BIGINT                      53
#define SQL_CONVERT_BINARY                      54
#define SQL_CONVERT_BIT                         55
#define SQL_CONVERT_CHAR                        56
#define SQL_CONVERT_DATE                        57
#define SQL_CONVERT_DECIMAL                     58
#define SQL_CONVERT_DOUBLE                      59
#define SQL_CONVERT_FLOAT                       60
#define SQL_CONVERT_INTEGER                     61
#define SQL_CONVERT_LONGVARCHAR                 62
#define SQL_CONVERT_NUMERIC                     63
#define SQL_CONVERT_REAL                        64
#define SQL_CONVERT_SMALLINT              65
#define SQL_CONVERT_TIME                        66
#define SQL_CONVERT_TIMESTAMP             67
#define SQL_CONVERT_TINYINT                     68
#define SQL_CONVERT_VARBINARY             69
#define SQL_CONVERT_VARCHAR                     70
#define SQL_CONVERT_LONGVARBINARY         71
#define SQL_ODBC_SQL_OPT_IEF              73
#define SQL_CORRELATION_NAME              74
#define SQL_LOCK_TYPES                          78
#define SQL_POS_OPERATIONS                      79
#define SQL_POSITIONED_STATEMENTS         80
#define SQL_GETDATA_EXTENSIONS                  81
#define SQL_BOOKMARK_PERSISTENCE          82
#define SQL_STATIC_SENSITIVITY                  83
#define SQL_FILE_USAGE                          84
#define SQL_NULL_COLLATION                      85
#define SQL_ALTER_TABLE                         86
#define SQL_COLUMN_ALIAS                        87
#define SQL_GROUP_BY                            88
#define SQL_KEYWORDS                            89
#define SQL_ORDER_BY_COLUMNS_IN_SELECT    90
#define SQL_OWNER_USAGE                         91
#define SQL_QUALIFIER_USAGE                     92
#define SQL_QUOTED_IDENTIFIER_CASE        93
#define SQL_SPECIAL_CHARACTERS                  94
#define SQL_SUBQUERIES                          95
#define SQL_UNION                               96
#define SQL_MAX_COLUMNS_IN_GROUP_BY       97
#define SQL_MAX_COLUMNS_IN_INDEX          98
#define SQL_MAX_COLUMNS_IN_ORDER_BY       99
#define SQL_MAX_COLUMNS_IN_SELECT         100
#define SQL_MAX_COLUMNS_IN_TABLE          101
#define SQL_MAX_INDEX_SIZE                      102
#define SQL_MAX_ROW_SIZE_INCLUDES_LONG    103
#define SQL_MAX_ROW_SIZE                        104
#define SQL_MAX_STATEMENT_LEN             105
#define SQL_MAX_TABLES_IN_SELECT          106
#define SQL_MAX_USER_NAME_LEN             107
#define SQL_MAX_CHAR_LITERAL_LEN          108
#define SQL_TIMEDATE_ADD_INTERVALS        109
#define SQL_TIMEDATE_DIFF_INTERVALS       110
#define SQL_NEED_LONG_DATA_LEN                  111
#define SQL_MAX_BINARY_LITERAL_LEN        112
#define SQL_LIKE_ESCAPE_CLAUSE                  113

#define SQL_OJ_CAPABILITIES                     65003
/* ODBC 3.0 alias */
#define SQL_MAX_SCHEMA_NAME_LEN                 SQL_MAX_OWNER_NAME_LEN

/* Bit Masks describing the behaviour of the GetInfo functions named above */
/*
 * alter table behaviour(4 byte val)
 */
#define SQL_AT_ADD_COLUMN                       0x00000001L
#define SQL_AT_DROP_COLUMN                      0x00000002L

/*
 * BookMark Persistence, a SQLUINTEGER bitmask(ie 4 bytes)
*/
#define SQL_BP_CLOSE                            0x00000001L
#define SQL_BP_DELETE                           0x00000002L
#define SQL_BP_DROP                                   0x00000004L
#define SQL_BP_TRANSACTION                      0x00000008L
#define SQL_BP_UPDATE                           0x00000010L
#define SQL_BP_OTHER_HSTMT                      0x00000020L
#define SQL_BP_SCROLL                           0x00000040L

/*
 * Conversion bitmasks for testing which conversions are supported by
 * the driver. An application compares the returned bitmask with these
 * to determine which conversions are supported. The driver ANDS these
 * for the returned bitmask to indicate the supported conversions.(type
 * is SQLUINTEGER, i.e. 4 bytes). Note that these masks are defined in
 * alphabetical order, I have no idea if this maps to MS's SDK.
 */
#define SQL_CVT_CHAR                            0x00000001L
#define SQL_CVT_NUMERIC                         0x00000002L
#define SQL_CVT_DECIMAL                         0x00000004L
#define SQL_CVT_INTEGER                         0x00000008L
#define SQL_CVT_SMALLINT                        0x00000010L
#define SQL_CVT_FLOAT                           0x00000020L
#define SQL_CVT_REAL                            0x00000040L
#define SQL_CVT_DOUBLE                          0x00000080L
#define SQL_CVT_VARCHAR                         0x00000100L
#define SQL_CVT_LONGVARCHAR                     0x00000200L
#define SQL_CVT_BINARY                          0x00000400L
#define SQL_CVT_VARBINARY                       0x00000800L
#define SQL_CVT_BIT                                   0x00001000L
#define SQL_CVT_TINYINT                         0x00002000L
#define SQL_CVT_BIGINT                          0x00004000L
#define SQL_CVT_DATE                            0x00008000L
#define SQL_CVT_TIME                            0x00010000L
#define SQL_CVT_TIMESTAMP                       0x00020000L
#define SQL_CVT_LONGVARBINARY             0x00040000L


/*    extras added in ODBC 3.0 */
#define SQL_CVT_INTERVAL_YEAR_MONTH       0x00080000L
#define SQL_CVT_INTERVAL_DAY_TIME         0x00100000L

/*
 *    concat null behaviour(2 byte val)
 */
#define SQL_CB_NULL                                   0x0000
#define SQL_CB_NON_NULL                         0x0001

/*
 *    correlation name
 */
#define SQL_CN_NONE                                   0x0000
#define SQL_CN_DIFFERENT                        0x0001
#define SQL_CN_ANY                                    0x0002

/*
 * Fetch Direction. A SQLINTEGER bitmask enumerating the supported fetch
 * direction options. This information type has been deprecated in
 * ODBC 3.0.
 */
#define SQL_FD_FETCH_NEXT                       0x00000001L
#define SQL_FD_FETCH_FIRST                      0x00000002L
#define SQL_FD_FETCH_LAST                       0x00000004L
#define SQL_FD_FETCH_PRIOR                      0x00000008L
#define SQL_FD_FETCH_ABSOLUTE             0x00000010L
#define SQL_FD_FETCH_RELATIVE             0x00000020L
#define SQL_FD_FETCH_RESUME                     0x00000040L
#define SQL_FD_FETCH_BOOKMARK             0x00000080L

/*
 * Conversion bitmasks for testing which function conversions are supported by
 * the driver. An application compares the returned bitmask with these
 * to determine which conversions are supported. The driver ANDS these
 * for the returned bitmask to indicate the supported conversions.(type
 * is SQLUINTEGER, i.e. 4 bytes). Note that these masks are defined in
 * alphabetical order, I have no idea if this maps to MS's SDK.
 */
#define SQL_FN_CVT_CONVERT                      0x00000001L
#define SQL_FN_CVT_CAST                         0x00000002L

/*
 * File Usage. A SQLUSMALLINT indicating how a singel-tier driver treats
 * files in a data source.
 */
#define SQL_FILE_NOT_SUPPORTED                  0x0000
#define SQL_FILE_TABLE                          0x0001
#define SQL_FILE_QUALIFIER                      0x0002
#define SQL_FILE_CATALOG                        SQL_FILE_CATALOG

/*
 * GetData Extensions. A SQLUINTEGER(4 bytes) bitmask enumerating extensions
 * to SQLGetData.
 */
#define SQL_GD_ANY_COLUMN                       0x00000001L
#define SQL_GD_ANY_ORDER                        0x00000002L
#define SQL_GD_BLOCK                            0x00000004L
#define SQL_GD_BOUND                            0x00000008L

/*
 * Group By. A SQLUSMALLINT value specifying the relationship between the
 * columns in the GROUP BY clause and the non-aggregated columns in the
 * select list.
*/
#define SQL_GB_NOT_SUPPORTED              0x0000
#define SQL_GB_GROUP_BY_EQUALS_SELECT     0x0001
#define SQL_GB_GROUP_BY_CONTAINS_SELECT 0x0002
#define SQL_GB_NO_RELATION                      0x0003

/* added in ODBC 3.0 */
#define SQL_GB_COLLATE                          0x0004

/*
 * Identifier Case. A SQLUSMALLINT indicating how identifiers are handled.
 */
#define SQL_IC_UPPER                            0x0001
#define SQL_IC_LOWER                            0x0002
#define SQL_IC_SENSITIVE                        0x0003
#define SQL_IC_MIXED                            0x0004

/*
 * Lock types. A SQLINTEGER bitmask enumerating the supported lock types for
 * the fLock argument in SQLSetPos. Depreciated in 3.0.
 */
#define SQL_LCK_NO_CHANGE                       0x00000001L
#define SQL_LCK_EXCLUSIVE                       0x00000002L
#define SQL_LCK_UNLOCK                          0x00000004L

/*
 * Non Nullable Columns. A SQLUSMALLINT value indicating if the data source
 * supports NOT NULL in columns.
 */
#define SQL_NNC_NULL                            0x0000
#define SQL_NNC_NON_NULL                        0x0001

/*
 * Null Collation. A SQLUSMALLINT value specifying where NULLS are sorted in
 * a result set.
 */
#define SQL_NC_HIGH                                   0x0001
#define SQL_NC_LOW                                    0x0003
#define SQL_NC_START                            0x0002
#define SQL_NC_END                                    0x0004

/*
 * Numeric Functions. A SQLUINTEGER bitmask enumerating the scalar numeric
 * functions supported by the driver and associated data source.
 */
#define SQL_FN_NUM_ABS                          0x00000001L
#define SQL_FN_NUM_ACOS                         0x00000002L
#define SQL_FN_NUM_ASIN                         0x00000004L
#define SQL_FN_NUM_ATAN                         0x00000008L
#define SQL_FN_NUM_ATAN2                        0x00000010L
#define SQL_FN_NUM_CEILING                      0x00000020L
#define SQL_FN_NUM_COS                          0x00000040L
#define SQL_FN_NUM_COT                          0x00000080L
#define SQL_FN_NUM_EXP                          0x00000100L
#define SQL_FN_NUM_FLOOR                        0x00000200L
#define SQL_FN_NUM_LOG                          0x00000400L
#define SQL_FN_NUM_MOD                          0x00000800L
#define SQL_FN_NUM_SIGN                         0x00001000L
#define SQL_FN_NUM_SIN                          0x00002000L
#define SQL_FN_NUM_SQRT                         0x00004000L
#define SQL_FN_NUM_TAN                          0x00008000L
#define SQL_FN_NUM_PI                           0x00010000L
#define SQL_FN_NUM_RAND                         0x00020000L

/* Added in ODBC 2.0 */
#define SQL_FN_NUM_DEGREES                      0x00040000L
#define SQL_FN_NUM_LOG10                        0x00080000L
#define SQL_FN_NUM_POWER                        0x00100000L
#define SQL_FN_NUM_RADIANS                      0x00200000L
#define SQL_FN_NUM_ROUND                        0x00400000L
#define SQL_FN_NUM_TRUNCATE                     0x00800000L

/*
 * Outer Join Capabilites. A SQLUINTEGER bitmask enumerating the types of
 * outer joins supported by the driver and data source.
 */
#define SQL_OJ_LEFT                                   0x00000001L
#define SQL_OJ_RIGHT                            0x00000002L
#define SQL_OJ_FULL                                   0x00000004L
#define SQL_OJ_NESTED                           0x00000008L
#define SQL_OJ_NOT_ORDERED                      0x00000010L
#define SQL_OJ_INNER                            0x00000020L
#define SQL_OJ_ALL_COMPARISON_OPS         0x00000040L

/*
 * ODBC API Conformance. A SQLSMALLINT value indicating a drivers ODBC
 * level conformance. Depreciated in 3.0.
 */
#define SQL_OAC_NONE                            0x0000
#define SQL_OAC_LEVEL1                          0x0001
#define SQL_OAC_LEVEL2                          0x0002

/*
 * ODBC SAG CLI Conformance. A SQLSMALLINT value indicating a drivers
 * SAG CLI conformance.
 */
#define SQL_OSCC_NOT_COMPLIANT                  0x0000
#define SQL_OSCC_COMPLIANT                      0x0001

/*
 * ODBC SQL Conformance. A SQLSMALLINT value indicating a drivers SQL
 * grammar support. Depreciated in 3.0.
 */
#define SQL_OSC_MINIMUM                         0x0000
#define SQL_OSC_CORE                            0x0001
#define SQL_OSC_EXTENDED                        0x0002

/*
 * Owner Usage. A SQLUINTEGER bitmask.
 */
#define SQL_OU_DML_STATEMENTS             0x00000001L
#define SQL_OU_PROCEDURE_INVOCATION       0x00000002L
#define SQL_OU_TABLE_DEFINITION                 0x00000004L
#define SQL_OU_INDEX_DEFINITION                 0x00000008L
#define SQL_OU_PRIVILEGE_DEFINITION       0x00000010L

/*
 * Schema Usage. A SQLUINTEGER bitmask enumerating the statements in which
 * schemas can be used. Renamed in ODBC 3.0 from SQL_OWNER_USAGE
 */
#define SQL_SU_DML_STATEMENTS             SQL_OU_DML_STATEMENTS
#define SQL_SU_PROCEDURE_INVOCATION       SQL_OU_PROCEDURE_INVOCATION
#define SQL_SU_TABLE_DEFINITION                 SQL_OU_TABLE_DEFINITION
#define SQL_SU_INDEX_DEFINITION                 SQL_OU_INDEX_DEFINITION
#define SQL_SU_PRIVILEGE_DEFINITION       SQL_OU_PRIVILEGE_DEFINITION

/*
 * Pos. Operations. A SQLINTEGER bitmask enumerating the supported operations
 * in SQLSetPos. Depreciated in ODBC 3.0.
 */
#define SQL_POS_POSITION                        0x00000001L
#define SQL_POS_REFRESH                         0x00000002L
#define SQL_POS_UPDATE                          0x00000004L
#define SQL_POS_DELETE                          0x00000008L
#define SQL_POS_ADD                                   0x00000010L

/*
 *    SQLSetPos
 */
#define SQL_ENTIRE_ROWSET                       0

#define SQL_POSITION                            0
#define SQL_REFRESH                                   1
#define SQL_UPDATE                                    2
#define SQL_DELETE                                    3
#define SQL_ADD                                       4

/*
 * SQLSetPos Lock options
*/
#define SQL_LOCK_NO_CHANGE                      0
#define SQL_LOCK_EXCLUSIVE                      1
#define SQL_LOCK_UNLOCK                         2

#define SQL_POSITION_TO(hstmt,irow)       \
      SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE)
#define SQL_LOCK_RECORD(hstmt,irow,fLock) \
      SQLSetPos(hstmt,irow,SQL_POSITION,fLock)
#define SQL_REFRESH_RECORD(hstmt,irow,fLock) \
      SQLSetPos(hstmt,irow,SQL_REFRESH,fLock)
#define SQL_UPDATE_RECORD(hstmt,irow) \
      SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE)
#define SQL_DELETE_RECORD(hstmt,irow) \
      SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE)
#define SQL_ADD_RECORD(hstmt,irow) \
      SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE)

/*
 * Positioned Statements. A SQLINTEGER bitmask enumerating the supported
 * positioned SQL statements.
 */
#define SQL_PS_POSITIONED_DELETE          0x00000001L
#define SQL_PS_POSITIONED_UPDATE          0x00000002L
#define SQL_PS_SELECT_FOR_UPDATE          0x00000004L

/* Qualifier Location. A SQLUSMALLINT value indicating the position of the
 * catalog in a qualified table name.
 */
#define SQL_QL_START                            0x0001
#define SQL_QL_END                                    0x0002

/*
 * Qualifier Usage. A SQLUINTEGER bitmask.
 */
#define SQL_QU_DML_STATEMENTS             0x00000001L
#define SQL_QU_PROCEDURE_INVOCATION       0x00000002L
#define SQL_QU_TABLE_DEFINITION                 0x00000004L
#define SQL_QU_INDEX_DEFINITION                 0x00000008L
#define SQL_QU_PRIVILEGE_DEFINITION       0x00000010L

/* The above is renamed in ODBC 3.0 to Catalog Usage. */
#define SQL_CU_DML_STATEMENTS             SQL_QU_DML_STATEMENTS
#define SQL_CU_PROCEDURE_INVOCATION       SQL_QU_PROCEDURE_INVOCATION
#define SQL_CU_TABLE_DEFINITION                 SQL_QU_TABLE_DEFINITION
#define SQL_CU_INDEX_DEFINITION                 SQL_QU_INDEX_DEFINITION
#define SQL_CU_PRIVILEGE_DEFINITION       SQL_QU_PRIVILEGE_DEFINITION

/* ODBC 3.0 renamed the above to Catalog Location. */
#define SQL_CL_START                            SQL_QL_START
#define SQL_CL_END                                    SQL_QL_END

/*
 * Scroll Concurrency. A SQLINTEGER bitmask enumerating the concurrency
 * control options supported for the cursor. Depreciated in ODBC 3.0.
 */
#define SQL_SCCO_READ_ONLY                      0x00000001L
#define SQL_SCCO_LOCK                           0x00000002L
#define SQL_SCCO_OPT_ROWVER                     0x00000004L
#define SQL_SCCO_OPT_VALUES                     0x00000008L


/*
 * Scroll Options. A SQLUINTEGER bitmask enumerating the scroll options
 * supported for scrollable cursors.
 */
#define SQL_SO_FORWARD_ONLY                     0x00000001L
#define SQL_SO_KEYSET_DRIVEN              0x00000002L
#define SQL_SO_DYNAMIC                          0x00000004L
#define SQL_SO_MIXED                            0x00000008L
#define SQL_SO_STATIC                           0x00000010L

/*
 * Static Sensitity. A SQLINTEGER bitmask enumerating whether changes made
 * by an application to a static or keyset-driven cursor through SQLSetPos
 * or positioned update or delete statements can be detected by that
 * application.
 */
#define SQL_SS_ADDITIONS                        0x00000001L
#define SQL_SS_DELETIONS                        0x00000002L
#define SQL_SS_UPDATES                          0x00000004L

/*
 * String Functions. A SQLUINTEGER bitmask enumerating the scalar string
 * functions supported by the driver and associated data source.
 */
#define SQL_FN_STR_CONCAT                       0x00000001L
#define SQL_FN_STR_INSERT                       0x00000002L
#define SQL_FN_STR_LEFT                         0x00000004L
#define SQL_FN_STR_LTRIM                        0x00000008L
#define SQL_FN_STR_LENGTH                       0x00000010L
#define SQL_FN_STR_LOCATE                       0x00000020L
#define SQL_FN_STR_LCASE                        0x00000040L
#define SQL_FN_STR_REPEAT                       0x00000080L
#define SQL_FN_STR_REPLACE                      0x00000100L
#define SQL_FN_STR_RIGHT                        0x00000200L
#define SQL_FN_STR_RTRIM                        0x00000400L
#define SQL_FN_STR_SUBSTRING              0x00000800L
#define SQL_FN_STR_UCASE                        0x00001000L
#define SQL_FN_STR_ASCII                        0x00002000L
#define SQL_FN_STR_CHAR                         0x00004000L
#define SQL_FN_STR_DIFFERENCE             0x00008000L
#define SQL_FN_STR_LOCATE_2                     0x00010000L
#define SQL_FN_STR_SOUNDEX                      0x00020000L
#define SQL_FN_STR_SPACE                        0x00040000L

/* introduced in ODBC 3.0 */
#define SQL_FN_STR_BIT_LENGTH             0x00080000L
#define SQL_FN_STR_CHAR_LENGTH                  0x00100000L
#define SQL_FN_STR_CHARACTER_LENGTH       0x00200000L
#define SQL_FN_STR_OCTET_LENGTH                 0x00400000L
#define SQL_FN_STR_POSITION                     0x00800000L

/*
 * Subqueries. A SQLUINTEGER bitmask enumerating the predicates that support
 * subqueries.
 */
#define SQL_SQ_COMPARISON                       0x00000001L
#define SQL_SQ_EXISTS                           0x00000002L
#define SQL_SQ_IN                               0x00000004L
#define SQL_SQ_QUANTIFIED                       0x00000008L
#define SQL_SQ_CORRELATED_SUBQUERIES      0x00000010L

/*
 * System Functions. A SQLUINTEGER bitmask enumerating the scalar system
 * functions supported by the driver and associated data source.
 */
#define SQL_FN_SYS_USERNAME                     0x00000001L
#define SQL_FN_SYS_DBNAME                       0x00000002L
#define SQL_FN_SYS_IFNULL                       0x00000004L

/*
 * Time-Date add and diff intervals. A SQLUINTEGER bitmask enumerating the
 * timestamp intervals supported by the driver and associated data source
 *    for the TIMESTAMPADD and TIMESTAMPDIFF scalar function.
 */
#define SQL_FN_TSI_FRAC_SECOND                  0x00000001L
#define SQL_FN_TSI_SECOND                       0x00000002L
#define SQL_FN_TSI_MINUTE                       0x00000004L
#define SQL_FN_TSI_HOUR                         0x00000008L
#define SQL_FN_TSI_DAY                          0x00000010L
#define SQL_FN_TSI_WEEK                         0x00000020L
#define SQL_FN_TSI_MONTH                        0x00000040L
#define SQL_FN_TSI_QUARTER                      0x00000080L
#define SQL_FN_TSI_YEAR                         0x00000100L

/*
 * Time/Date functions. A SQLUINTEGER bitmask enumerating the scalar date
 * and time functions supported by the driver and associated data source.
 */
#define SQL_FN_TD_NOW                           0x00000001L
#define SQL_FN_TD_CURDATE                       0x00000002L
#define SQL_FN_TD_DAYOFMONTH              0x00000004L
#define SQL_FN_TD_DAYOFWEEK                     0x00000008L
#define SQL_FN_TD_DAYOFYEAR                     0x00000010L
#define SQL_FN_TD_MONTH                         0x00000020L
#define SQL_FN_TD_QUARTER                       0x00000040L
#define SQL_FN_TD_WEEK                          0x00000080L
#define SQL_FN_TD_YEAR                          0x00000100L
#define SQL_FN_TD_CURTIME                       0x00000200L
#define SQL_FN_TD_HOUR                          0x00000400L
#define SQL_FN_TD_MINUTE                        0x00000800L
#define SQL_FN_TD_SECOND                        0x00001000L
#define SQL_FN_TD_TIMESTAMPADD                  0x00002000L
#define SQL_FN_TD_TIMESTAMPDIFF                 0x00004000L
#define SQL_FN_TD_DAYNAME                       0x00008000L
#define SQL_FN_TD_MONTHNAME                     0x00010000L

/* Added in ODBC 3.0 */
#define SQL_FN_TD_CURRENT_DATE                  0x00020000L
#define SQL_FN_TD_CURRENT_TIME                  0x00040000L
#define SQL_FN_TD_CURRENT_TIMESTAMP       0x00080000L
#define SQL_FN_TD_EXTRACT                       0x00100000L

/*
 * Transaction Capable. A SQLUSMALLINT value describing the transaction
 * support in the driver or data source.
 */
#define SQL_TC_NONE                                   0x0000
#define SQL_TC_DML                                    0x0001
#define SQL_TC_ALL                                    0x0002
#define SQL_TC_DDL_COMMIT                       0x0003
#define SQL_TC_DDL_IGNORE                       0x0004

/*
 * Unions. A SQLUINTEGER bitmask enumerating the support for the UNION
 * clause.
 */
#define SQL_U_UNION                                   0x00000001L
#define SQL_U_UNION_ALL                         0x00000002L


/* SQLStatistics: Type, Smallint */
#define SQL_TABLE_STAT                          0
#define SQL_INDEX_CLUSTERED                     1
#define SQL_INDEX_HASHED                        2
#define SQL_INDEX_OTHER                         3

/* SQLProcedures: Type: Smallint */
#define SQL_PT_UNKNOWN                          0
#define SQL_PT_PROCEDURE                        1
#define SQL_PT_FUNCTION                         2

/* SQLSpecialColumns: PSEUDO_COLUMN: Smallint */
#define SQL_PC_UNKNOWN                          0
#define SQL_PC_PSEUDO                           1
#define SQL_PC_NOT_PSEUDO                       2

/* SQLSet/Get/StmtOptions: ASYNC_ENABLE. A SQLUINTEGER */
#define SQL_ASYNC_ENABLE_OFF              0UL
#define SQL_ASYNC_ENABLE_ON                     1UL
#define SQL_ASYNC_ENABLE_DEFAULT          SQL_ASYNC_ENABLE_OFF

/*
 * SQLSet/GetStmtOptions: CONCURRENCY. A SQLUINTEGER. Note most of these
 * are above in the original isqlext.h code.
 */
#define SQL_CONCUR_DEFAULT                      SQL_CONCUR_READ_ONLY

/*
 * SQLSet/GetStmtOptions: CURSOR_SCROLLABLE. A SQLUINTEGER. Added in ODBC
 * 3.0.
 */
#define SQL_NONSCROLLABLE                       0UL
#define SQL_SCROLLABLE                          1UL
#define SQL_CURSOR_SCROLLABLE_DEFAULT     SQL_NONSCROLLABLE

/*
 * SQLSet/GetStmtOptions: CURSOR_SENSITITY. A SQLUINTEGER. Added in ODBC
 * 3.0.
 */
#define SQL_UNSPECIFIED                         0UL
#define SQL_INSENSITIVE                         1UL
#define SQL_SENSITIVIE                          2UL
#define SQL_CURSOR_SENSITIVITY_DEFAULT    SQL_UNSPECIFIED

/*
 * SQLSet/GetStmtOptions: CURSOR_TYPE: A SQLUINTEGER value that specifies the
 * cursor type
 */
#define SQL_CURSOR_FORWARD_ONLY                 0UL
#define SQL_CURSOR_KEYSET_DRIVEN          1UL
#define SQL_CURSOR_DYNAMIC                      2UL
#define SQL_CURSOR_STATIC                       3UL
#define SQL_CURSOR_DEFAULT                      SQL_CURSOR_FORWARD_ONLY

/*
 * ENABLE_AUTO_IPD: A SQLUINTEGER, either SQL_TRUE or SQL_FALSE. Default
 * dependent on connection option SQL_ATTR_AUTO_IPD. Added in ODBC 3.0.
 */

/*
 * METADATA_ID: A SQLUINTEGER, either SQL_TRUE or SQL_FALSE. Added in
 * ODBC 3.0.
 */
#define SQL_ATTR_METADATA_ID_DEFAULT      SQL_FALSE

/*
 * SQLSet/GetStmtOptions: NOSCAN. A SQLUINTEGER value that indicates whether
 * the driver should scan SQL strings for escape sequences.
 */
#define SQL_NOSCAN_OFF                          0UL
#define SQL_NOSCAN_ON                           1UL
#define SQL_NOSCAN_DEFAULT                      SQL_NOSCAN_OFF

/*
 * SQLSet/GetStmtOptions: PARAM_OPERATION: SQLUSMALLINT *. Added in ODBC 3.0
 *
 */
#define SQL_PARAM_PROCEED                       0
#define SQL_PARAM_IGNORE                        1

/*
 * SQLSet/GetStmtOptions: PARAM_STATUS: SQLUSMALLINT *. Added in ODBC 3.0
 *
*/
#define SQL_PARAM_SUCCESS                       0
#define SQL_PARAM_SUCCESS_WITH_INFO       6
#define SQL_PARAM_ERROR                         5
#define SQL_PARAM_UNUSED                        7
#define SQL_PARAM_DIAG_UNAVAILABLE        1

/*
 * SQLSet/GetStmtOptions: RETRIEVE_DATA: SQLUINTEGER value.
 */
#define SQL_RD_OFF                                    0UL
#define SQL_RD_ON                               1UL
#define SQL_RD_DEFAULT                          SQL_RD_ON

/*
 * SQLSet/GetStmtOptions: BIND_TYPE: SQLUINTEGER. sets binding orientation.
 */
#define SQL_BIND_BY_COLUMN                      0UL
#define SQL_BIND_TYPE_DEFAULT             SQL_BIND_BY_COLUMN

/*
 * SQLSet/GetStmtOptions: ROW_OPERATION: SQLUSMALLINT *. Added in ODBC 3.0
 */
#define SQL_ROW_PROCEED                         0
#define SQL_ROW_IGNORE                          1

/*
 *    SQL_ROWSET_SIZE
 */
#define SQL_ROWSET_SIZE_DEFAULT                 1UL

/*
 *    SQL_KEYSET_SIZE
 */
#define SQL_KEYSET_SIZE_DEFAULT                 0UL

/*
 * SQLSet/GetStmtOptions: SIMULATE_CURSOR: SQLUINTEGER value that specifies
 * whether drivers that simulate positioned update and delete statements
 * guarantee that such statements affect only a single row.
 */
#define SQL_SC_NON_UNIQUE                       0UL
#define SQL_SC_TRY_UNIQUE                       1UL
#define SQL_SC_UNIQUE                           2UL

/*
 * SQLSet/GetStmtOptions: USE_BOOKMARKS: SQLUINTEGER value that specifies
 * whether an application will use bookmarks with a cursor.
 */
#define SQL_UB_OFF                                    0UL
#define SQL_UB_ON                               1UL
#define SQL_UB_FIXED                            SQL_UB_ON         /* Deprecated in ODBC
                                                                                     * 3.0 */
#define SQL_UB_VARIABLE                         2UL         /* Added in ODBC 3.0 */
#define SQL_UB_DEFAULT                          SQL_UB_OFF

/* Deprecated */
#define SQL_DATABASE_NAME                       16
#define SQL_FD_FETCH_PREV                       SQL_FD_FETCH_PRIOR
#define SQL_FETCH_PREV                          SQL_FETCH_PRIOR
#define SQL_CONCUR_TIMESTAMP              SQL_CONCUR_ROWVER
#define SQL_SCCO_OPT_TIMESTAMP                  SQL_SCCO_OPT_ROWVER
#define SQL_CC_DELETE                           SQL_CB_DELETE
#define SQL_CR_DELETE                           SQL_CB_DELETE
#define SQL_CC_CLOSE                            SQL_CB_CLOSE
#define SQL_CR_CLOSE                            SQL_CB_CLOSE
#define SQL_CC_PRESERVE                         SQL_CB_PRESERVE
#define SQL_CR_PRESERVE                         SQL_CB_PRESERVE
#define SQL_FETCH_RESUME                        7
#define SQL_SCROLL_FORWARD_ONLY                 0L
#define SQL_SCROLL_KEYSET_DRIVEN          (-1L)
#define SQL_SCROLL_DYNAMIC                      (-2L)
#define SQL_SCROLL_STATIC                       (-3L)

/*
 *    ODBC keywords
 */
#define SQL_ODBC_KEYWORDS \
"ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,"\
"ASC,ASSERTION,AT,AUTHORIZATION,AVG,"\
"BEGIN,BETWEEN,BIT,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,CATALOG,"\
"CHAR,CHAR_LENGTH,CHARACTER,CHARACTER_LENGTH,CHECK,CLOSE,COALESCE,"\
"COBOL,COLLATE,COLLATION,COLUMN,COMMIT,CONNECT,CONNECTION,CONSTRAINT,"\
"CONSTRAINTS,CONTINUE,CONVERT,CORRESPONDING,COUNT,CREATE,CROSS,CURRENT,"\
"CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,"\
"DATE,DAY,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFERRABLE,"\
"DEFERRED,DELETE,DESC,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,DISCONNECT,"\
"DISTINCT,DOMAIN,DOUBLE,DROP,"\
"ELSE,END,END-EXEC,ESCAPE,EXCEPT,EXCEPTION,EXEC,EXECUTE,"\
"EXISTS,EXTERNAL,EXTRACT,"\
"FALSE,FETCH,FIRST,FLOAT,FOR,FOREIGN,FORTRAN,FOUND,FROM,FULL,"\
"GET,GLOBAL,GO,GOTO,GRANT,GROUP,HAVING,HOUR,"\
"IDENTITY,IMMEDIATE,IN,INCLUDE,INDEX,INDICATOR,INITIALLY,INNER,"\
"INPUT,INSENSITIVE,INSERT,INTEGER,INTERSECT,INTERVAL,INTO,IS,ISOLATION,"\
"JOIN,KEY,LANGUAGE,LAST,LEADING,LEFT,LEVEL,LIKE,LOCAL,LOWER,"\
"MATCH,MAX,MIN,MINUTE,MODULE,MONTH,MUMPS,"\
"NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NONE,NOT,NULL,NULLIF,NUMERIC,"\
"OCTET_LENGTH,OF,ON,ONLY,OPEN,OPTION,OR,ORDER,OUTER,OUTPUT,OVERLAPS,"\
"PAD,PARTIAL,PASCAL,PLI,POSITION,PRECISION,PREPARE,PRESERVE,"\
"PRIMARY,PRIOR,PRIVILEGES,PROCEDURE,PUBLIC,"\
"REFERENCES,RELATIVE,RESTRICT,REVOKE,RIGHT,ROLLBACK,ROWS,"\
"SCHEMA,SCROLL,SECOND,SECTION,SELECT,SEQUENCE,SESSION,SESSION_USER,SET,SIZE,"\
"SMALLINT,SOME,SPACE,SQL,SQLCA,SQLCODE,SQLERROR,SQLSTATE,SQLWARNING,"\
"SUBSTRING,SUM,SYSTEM_USER,"\
"TABLE,TEMPORARY,THEN,TIME,TIMESTAMP,TIMEZONE_HOUR,TIMEZONE_MINUTE,"\
"TO,TRAILING,TRANSACTION,TRANSLATE,TRANSLATION,TRIM,TRUE,"\
"UNION,UNIQUE,UNKNOWN,UPDATE,UPPER,USAGE,USER,USING,"\
"VALUE,,VARCHAR,VARYING,VIEW,WHEN,WHENEVER,WHERE,WITH,WORK,YEAR"

#ifdef __cplusplus
extern            "C"
{
#endif

RETCODE SQL_API SQLSetConnectOption(HDBC, UWORD, UDWORD);
RETCODE SQL_API SQLNumResultCols(HSTMT, SWORD FAR *);

/*
 *     function prototypes previously missing from isqlext.h
 */
RETCODE SQL_API SQLColumns(HSTMT hstmt,
               UCHAR FAR * szTableQualifier,
               SWORD cbTableQualifier,
               UCHAR FAR * szTableOwner,
               SWORD cbTableOwner,
               UCHAR FAR * szTableName,
               SWORD cbTableName,
               UCHAR FAR * szColumnName,
               SWORD cbColumnName);

RETCODE SQL_API SQLDriverConnect(HDBC hdbc,
                         HWND hwnd,
                         UCHAR FAR * szConnStrIn,
                         SWORD cbConnStrIn,
                         UCHAR FAR * szConnStrOut,
                         SWORD cbConnStrOutMax,
                         SWORD FAR * pcbConnStrOut,
                         UWORD fDriverCompletion);

RETCODE SQL_API SQLGetConnectOption(HDBC hdbc,
                              UWORD fOption,
                              PTR pvParam);

RETCODE SQL_API SQLGetData(HSTMT hstmt,
               UWORD icol,
               SWORD fCType,
               PTR rgbValue,
               SDWORD cbValueMax,
               SDWORD FAR * pcbValue);

RETCODE SQL_API SQLGetFunctions(HDBC hdbc,
                        UWORD fFunction,
                        UWORD FAR * pfExists);

RETCODE SQL_API SQLGetInfo(HDBC hdbc,
               UWORD fInfoType,
               PTR rgbInfoValue,
               SWORD cbInfoValueMax,
               SWORD FAR * pcbInfoValue);

RETCODE SQL_API SQLGetStmtOption(HSTMT hstmt,
                         UWORD fOption,
                         PTR pvParam);

RETCODE SQL_API SQLGetTypeInfo(HSTMT hstmt,
                     SWORD fSqlType);

RETCODE SQL_API SQLParamData(HSTMT hstmt,
                   PTR FAR * prgbValue);

RETCODE SQL_API SQLPutData(HSTMT hstmt,
               PTR rgbValue,
               SDWORD cbValue);

RETCODE SQL_API SQLSetStmtOption(HSTMT hstmt,
                         UWORD fOption,
                         UDWORD vParam);

RETCODE SQL_API SQLSpecialColumns(HSTMT hstmt,
                          UWORD fColType,
                          UCHAR FAR * szTableQualifier,
                          SWORD cbTableQualifier,
                          UCHAR FAR * szTableOwner,
                          SWORD cbTableOwner,
                          UCHAR FAR * szTableName,
                          SWORD cbTableName,
                          UWORD fScope,
                          UWORD fNullable);

RETCODE SQL_API SQLStatistics(HSTMT hstmt,
                    UCHAR FAR * szTableQualifier,
                    SWORD cbTableQualifier,
                    UCHAR FAR * szTableOwner,
                    SWORD cbTableOwner,
                    UCHAR FAR * szTableName,
                    SWORD cbTableName,
                    UWORD fUnique,
                    UWORD fAccuracy);

RETCODE SQL_API SQLTables(HSTMT hstmt,
              UCHAR FAR * szTableQualifier,
              SWORD cbTableQualifier,
              UCHAR FAR * szTableOwner,
              SWORD cbTableOwner,
              UCHAR FAR * szTableName,
              SWORD cbTableName,
              UCHAR FAR * szTableType,
              SWORD cbTableType);

RETCODE SQL_API SQLBrowseConnect(HDBC hdbc,
                         UCHAR FAR * szConnStrIn,
                         SWORD cbConnStrIn,
                         UCHAR FAR * szConnStrOut,
                         SWORD cbConnStrOutMax,
                         SWORD FAR * pcbConnStrOut);

RETCODE SQL_API SQLColumnPrivileges(HSTMT hstmt,
                              UCHAR FAR * szTableQualifier,
                              SWORD cbTableQualifier,
                              UCHAR FAR * szTableOwner,
                              SWORD cbTableOwner,
                              UCHAR FAR * szTableName,
                              SWORD cbTableName,
                              UCHAR FAR * szColumnName,
                              SWORD cbColumnName);

RETCODE SQL_API SQLDescribeParam(HSTMT hstmt,
                         UWORD ipar,
                         SWORD FAR * pfSqlType,
                         UDWORD FAR * pcbColDef,
                         SWORD FAR * pibScale,
                         SWORD FAR * pfNullable);

RETCODE SQL_API SQLExtendedFetch(HSTMT hstmt,
                         UWORD fFetchType,
                         SDWORD irow,
                         UDWORD FAR * pcrow,
                         UWORD FAR * rgfRowStatus);

RETCODE SQL_API SQLForeignKeys(HSTMT hstmt,
                     UCHAR FAR * szPkTableQualifier,
                     SWORD cbPkTableQualifier,
                     UCHAR FAR * szPkTableOwner,
                     SWORD cbPkTableOwner,
                     UCHAR FAR * szPkTableName,
                     SWORD cbPkTableName,
                     UCHAR FAR * szFkTableQualifier,
                     SWORD cbFkTableQualifier,
                     UCHAR FAR * szFkTableOwner,
                     SWORD cbFkTableOwner,
                     UCHAR FAR * szFkTableName,
                     SWORD cbFkTableName);

RETCODE SQL_API SQLMoreResults(HSTMT hstmt);

RETCODE SQL_API SQLNativeSql(HDBC hdbc,
                   UCHAR FAR * szSqlStrIn,
                   SDWORD cbSqlStrIn,
                   UCHAR FAR * szSqlStr,
                   SDWORD cbSqlStrMax,
                   SDWORD FAR * pcbSqlStr);

RETCODE SQL_API SQLNumParams(HSTMT hstmt,
                   SWORD FAR * pcpar);

RETCODE SQL_API SQLParamOptions(HSTMT hstmt,
                        UDWORD crow,
                        UDWORD FAR * pirow);

RETCODE SQL_API SQLPrimaryKeys(HSTMT hstmt,
                     UCHAR FAR * szTableQualifier,
                     SWORD cbTableQualifier,
                     UCHAR FAR * szTableOwner,
                     SWORD cbTableOwner,
                     UCHAR FAR * szTableName,
                     SWORD cbTableName);

RETCODE SQL_API SQLProcedureColumns(HSTMT hstmt,
                              UCHAR FAR * szProcQualifier,
                              SWORD cbProcQualifier,
                              UCHAR FAR * szProcOwner,
                              SWORD cbProcOwner,
                              UCHAR FAR * szProcName,
                              SWORD cbProcName,
                              UCHAR FAR * szColumnName,
                              SWORD cbColumnName);

RETCODE SQL_API SQLProcedures(HSTMT hstmt,
                    UCHAR FAR * szProcQualifier,
                    SWORD cbProcQualifier,
                    UCHAR FAR * szProcOwner,
                    SWORD cbProcOwner,
                    UCHAR FAR * szProcName,
                    SWORD cbProcName);

RETCODE SQL_API SQLSetPos(HSTMT hstmt,
              UWORD irow,
              UWORD fOption,
              UWORD fLock);

RETCODE SQL_API SQLTablePrivileges(HSTMT hstmt,
                           UCHAR FAR * szTableQualifier,
                           SWORD cbTableQualifier,
                           UCHAR FAR * szTableOwner,
                           SWORD cbTableOwner,
                           UCHAR FAR * szTableName,
                           SWORD cbTableName);

RETCODE SQL_API SQLBindParameter(HSTMT hstmt,
                         UWORD ipar,
                         SWORD fParamType,
                         SWORD fCType,
                         SWORD fSqlType,
                         UDWORD cbColDef,
                         SWORD ibScale,
                         PTR rgbValue,
                         SDWORD cbValueMax,
                         SDWORD FAR * pcbValue);

RETCODE SQL_API SQLSetScrollOptions(HSTMT hstmt,
                              UWORD fConcurrency,
                              SDWORD crowKeyset,
                              UWORD crowRowset);


#ifdef __cplusplus
}
#endif

#endif

Generated by  Doxygen 1.6.0   Back to index