mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 17:16:25 +00:00
277 lines
9.1 KiB
C
277 lines
9.1 KiB
C
#ifndef _SQLITE3ODBC_H
|
|
#define _SQLITE3ODBC_H
|
|
|
|
/**
|
|
* @mainpage
|
|
* @section readme README
|
|
* @verbinclude README
|
|
* @section changelog ChangeLog
|
|
* @verbinclude ChangeLog
|
|
* @section copying License Terms
|
|
* @verbinclude license.terms
|
|
*/
|
|
|
|
/**
|
|
* @file sqlite3odbc.h
|
|
* Header file for SQLite3 ODBC driver.
|
|
*
|
|
* $Id: sqlite3odbc.h,v 1.32 2010/05/18 11:15:59 chw Exp chw $
|
|
*
|
|
* Copyright (c) 2004-2010 Christian Werner <chw@ch-werner.de>
|
|
*
|
|
* See the file "license.terms" for information on usage
|
|
* and redistribution of this file and for a
|
|
* DISCLAIMER OF ALL WARRANTIES.
|
|
*/
|
|
|
|
#if defined(_WIN32) || defined(_WIN64)
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <io.h>
|
|
#else
|
|
#include <sys/time.h>
|
|
#include <sys/types.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#endif
|
|
#include <stdlib.h>
|
|
#if defined(HAVE_LOCALECONV) || defined(_WIN32) || defined(_WIN64)
|
|
#include <locale.h>
|
|
#endif
|
|
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <string.h>
|
|
#include <sql.h>
|
|
#include <sqlext.h>
|
|
#include <time.h>
|
|
|
|
#include "sqlite3.h"
|
|
#ifdef HAVE_IODBC
|
|
#include <iodbcinst.h>
|
|
#endif
|
|
#if defined(HAVE_UNIXODBC) || defined(_WIN32) || defined(_WIN64)
|
|
#include <odbcinst.h>
|
|
#endif
|
|
|
|
#ifndef SQL_API
|
|
#define SQL_API
|
|
#endif
|
|
|
|
#ifndef HAVE_SQLLEN
|
|
#define SQLLEN SQLINTEGER
|
|
#endif
|
|
|
|
#define SQLLEN_PTR SQLLEN *
|
|
|
|
#ifndef HAVE_SQLULEN
|
|
#define SQLULEN SQLUINTEGER
|
|
#endif
|
|
|
|
#ifndef HAVE_SQLROWCOUNT
|
|
#define SQLROWCOUNT SQLUINTEGER
|
|
#endif
|
|
|
|
#ifndef HAVE_SQLSETPOSIROW
|
|
#define SQLSETPOSIROW SQLUSMALLINT
|
|
#endif
|
|
|
|
#ifndef HAVE_SQLROWOFFSET
|
|
#define SQLROWOFFSET SQLLEN
|
|
#endif
|
|
|
|
#ifndef HAVE_SQLROWSETSIZE
|
|
#define SQLROWSETSIZE SQLULEN
|
|
#endif
|
|
|
|
struct dbc;
|
|
struct stmt;
|
|
|
|
/**
|
|
* @typedef ENV
|
|
* @struct ENV
|
|
* Driver internal structure for environment (HENV).
|
|
*/
|
|
|
|
typedef struct {
|
|
int magic; /**< Magic cookie */
|
|
int ov3; /**< True for SQL_OV_ODBC3 */
|
|
#if defined(_WIN32) || defined(_WIN64)
|
|
CRITICAL_SECTION cs; /**< For serializing most APIs */
|
|
DWORD owner; /**< Current owner of CS or 0 */
|
|
#endif
|
|
struct dbc *dbcs; /**< Pointer to first DBC */
|
|
} ENV;
|
|
|
|
/**
|
|
* @typedef DBC
|
|
* @struct dbc
|
|
* Driver internal structure for database connection (HDBC).
|
|
*/
|
|
|
|
typedef struct dbc {
|
|
int magic; /**< Magic cookie */
|
|
ENV *env; /**< Pointer to environment */
|
|
struct dbc *next; /**< Pointer to next DBC */
|
|
sqlite3 *sqlite; /**< SQLITE database handle */
|
|
int version; /**< SQLITE version number */
|
|
char *dbname; /**< SQLITE database name */
|
|
char *dsn; /**< ODBC data source name */
|
|
int timeout; /**< Lock timeout value */
|
|
long t0; /**< Start time for SQLITE busy handler */
|
|
int busyint; /**< Interrupt busy handler from SQLCancel() */
|
|
int *ov3; /**< True for SQL_OV_ODBC3 */
|
|
int ov3val; /**< True for SQL_OV_ODBC3 */
|
|
int autocommit; /**< Auto commit state */
|
|
int intrans; /**< True when transaction started */
|
|
struct stmt *stmt; /**< STMT list of this DBC */
|
|
int naterr; /**< Native error code */
|
|
char sqlstate[6]; /**< SQL state for SQLError() */
|
|
SQLCHAR logmsg[1024]; /**< Message for SQLError() */
|
|
int nowchar; /**< Don't try to use WCHAR */
|
|
int shortnames; /**< Always use short column names */
|
|
int longnames; /**< Don't shorten column names */
|
|
int nocreat; /**< Don't auto create database file */
|
|
int fksupport; /**< Foreign keys on or off */
|
|
int curtype; /**< Default cursor type */
|
|
int step_enable; /**< True for sqlite_compile/step/finalize */
|
|
int trans_disable; /**< True for no transaction support */
|
|
struct stmt *cur_s3stmt; /**< Current STMT executing sqlite statement */
|
|
int s3stmt_needmeta; /**< True to get meta data in s3stmt_step(). */
|
|
FILE *trace; /**< sqlite3_trace() file pointer or NULL */
|
|
#ifdef USE_DLOPEN_FOR_GPPS
|
|
void *instlib;
|
|
int (*gpps)();
|
|
#endif
|
|
#if defined(_WIN32) || defined(_WIN64)
|
|
int xcelqrx;
|
|
#endif
|
|
} DBC;
|
|
|
|
/**
|
|
* @typedef COL
|
|
* @struct COL
|
|
* Internal structure to describe a column in a result set.
|
|
*/
|
|
|
|
typedef struct {
|
|
char *db; /**< Database name */
|
|
char *table; /**< Table name */
|
|
char *column; /**< Column name */
|
|
int type; /**< Data type of column */
|
|
int size; /**< Size of column */
|
|
int index; /**< Index of column in result */
|
|
int nosign; /**< Unsigned type */
|
|
int scale; /**< Scale of column */
|
|
int prec; /**< Precision of column */
|
|
int autoinc; /**< AUTO_INCREMENT column */
|
|
int notnull; /**< NOT NULL constraint on column */
|
|
char *typename; /**< Column type name or NULL */
|
|
char *label; /**< Column label or NULL */
|
|
} COL;
|
|
|
|
/**
|
|
* @typedef BINDCOL
|
|
* @struct BINDCOL
|
|
* Internal structure for bound column (SQLBindCol).
|
|
*/
|
|
|
|
typedef struct {
|
|
SQLSMALLINT type; /**< ODBC type */
|
|
SQLINTEGER max; /**< Max. size of value buffer */
|
|
SQLLEN *lenp; /**< Value return, actual size of value buffer */
|
|
SQLPOINTER valp; /**< Value buffer */
|
|
int index; /**< Index of column in result */
|
|
int offs; /**< Byte offset for SQLGetData() */
|
|
} BINDCOL;
|
|
|
|
/**
|
|
* @typedef BINDPARM
|
|
* @struct BINDPARM
|
|
* Internal structure for bound parameter (SQLBindParameter).
|
|
*/
|
|
|
|
typedef struct {
|
|
int type, stype; /**< ODBC and SQL types */
|
|
int coldef, scale; /**< from SQLBindParameter() */
|
|
SQLLEN max; /**< Max. size size of parameter buffer */
|
|
SQLLEN *lenp; /**< Actual size of parameter buffer */
|
|
SQLLEN *lenp0; /**< Actual size of parameter buffer, initial value */
|
|
void *param; /**< Parameter buffer */
|
|
void *param0; /**< Parameter buffer, initial value */
|
|
int inc; /**< Increment for paramset size > 1 */
|
|
int need; /**< True when SQL_LEN_DATA_AT_EXEC */
|
|
int bound; /**< True when SQLBindParameter() called */
|
|
int offs, len; /**< Offset/length for SQLParamData()/SQLPutData() */
|
|
void *parbuf; /**< Buffer for SQL_LEN_DATA_AT_EXEC etc. */
|
|
char strbuf[64]; /**< String buffer for scalar data */
|
|
int s3type; /**< SQLite3 type */
|
|
int s3size; /**< SQLite3 size */
|
|
void *s3val; /**< SQLite3 value buffer */
|
|
int s3ival; /**< SQLite3 integer value */
|
|
sqlite_int64 s3lival; /**< SQLite3 64bit integer value */
|
|
double s3dval; /**< SQLite3 float value */
|
|
} BINDPARM;
|
|
|
|
/**
|
|
* @typedef STMT
|
|
* @struct stmt
|
|
* Driver internal structure representing SQL statement (HSTMT).
|
|
*/
|
|
|
|
typedef struct stmt {
|
|
struct stmt *next; /**< Linkage for STMT list in DBC */
|
|
HDBC dbc; /**< Pointer to DBC */
|
|
SQLCHAR cursorname[32]; /**< Cursor name */
|
|
SQLCHAR *query; /**< Current query, raw string */
|
|
int *ov3; /**< True for SQL_OV_ODBC3 */
|
|
int isselect; /**< > 0 if query is a SELECT statement */
|
|
int ncols; /**< Number of result columns */
|
|
COL *cols; /**< Result column array */
|
|
COL *dyncols; /**< Column array, but malloc()ed */
|
|
int dcols; /**< Number of entries in dyncols */
|
|
int bkmrk; /**< True when bookmarks used */
|
|
BINDCOL bkmrkcol; /**< Bookmark bound column */
|
|
BINDCOL *bindcols; /**< Array of bound columns */
|
|
int nbindcols; /**< Number of entries in bindcols */
|
|
int nbindparms; /**< Number bound parameters */
|
|
BINDPARM *bindparms; /**< Array of bound parameters */
|
|
int nparams; /**< Number of parameters in query */
|
|
int nrows; /**< Number of result rows */
|
|
int rowp; /**< Current result row */
|
|
char **rows; /**< 2-dim array, result set */
|
|
void (*rowfree)(); /**< Free function for rows */
|
|
int naterr; /**< Native error code */
|
|
char sqlstate[6]; /**< SQL state for SQLError() */
|
|
SQLCHAR logmsg[1024]; /**< Message for SQLError() */
|
|
int nowchar[2]; /**< Don't try to use WCHAR */
|
|
int longnames; /**< Don't shorten column names */
|
|
int retr_data; /**< SQL_ATTR_RETRIEVE_DATA */
|
|
SQLUINTEGER rowset_size; /**< Size of rowset */
|
|
SQLUSMALLINT *row_status; /**< Row status pointer */
|
|
SQLUSMALLINT *row_status0; /**< Internal status array */
|
|
SQLUSMALLINT row_status1; /**< Internal status array for 1 row rowsets */
|
|
SQLUINTEGER *row_count; /**< Row count pointer */
|
|
SQLUINTEGER row_count0; /**< Row count */
|
|
SQLUINTEGER paramset_size; /**< SQL_ATTR_PARAMSET_SIZE */
|
|
SQLUINTEGER paramset_count; /**< Internal for paramset */
|
|
SQLUINTEGER paramset_nrows; /**< Row count for paramset handling */
|
|
SQLUINTEGER max_rows; /**< SQL_ATTR_MAX_ROWS */
|
|
SQLUINTEGER bind_type; /**< SQL_ATTR_ROW_BIND_TYPE */
|
|
SQLUINTEGER *bind_offs; /**< SQL_ATTR_ROW_BIND_OFFSET_PTR */
|
|
/* Dummies to make ADO happy */
|
|
SQLUINTEGER *parm_bind_offs;/**< SQL_ATTR_PARAM_BIND_OFFSET_PTR */
|
|
SQLUSMALLINT *parm_oper; /**< SQL_ATTR_PARAM_OPERATION_PTR */
|
|
SQLUSMALLINT *parm_status; /**< SQL_ATTR_PARAMS_STATUS_PTR */
|
|
SQLUINTEGER *parm_proc; /**< SQL_ATTR_PARAMS_PROCESSED_PTR */
|
|
SQLUINTEGER parm_bind_type; /**< SQL_ATTR_PARAM_BIND_TYPE */
|
|
int curtype; /**< Cursor type */
|
|
sqlite3_stmt *s3stmt; /**< SQLite statement handle or NULL */
|
|
int s3stmt_noreset; /**< False when sqlite3_reset() needed. */
|
|
int s3stmt_rownum; /**< Current row number */
|
|
char *bincell; /**< Cache for blob data */
|
|
char *bincache; /**< Cache for blob data */
|
|
int binlen; /**< Length of blob data */
|
|
int guessed_types; /**< Flag for drvprepare()/drvexecute() */
|
|
} STMT;
|
|
|
|
#endif
|