/***********************************************************************/ /* PLGODBC.H - This is the ODBC PlugDB driver include file. */ /***********************************************************************/ //efine WINVER 0x0300 // prevent Windows 3.1 feature usage #include /* Windows include file */ #include /* Message crackers */ #include /***********************************************************************/ /* Included C-definition files required by the interface. */ /***********************************************************************/ #include /* String manipulation declares */ #include /* C standard library */ #include /* C language specific types */ #include /* FOPEN_MAX declaration */ #include /* time_t type declaration */ /***********************************************************************/ /* ODBC interface of PlugDB driver declares. */ /***********************************************************************/ #include "podbcerr.h" /* Resource ID for PlugDB Driver */ #if !defined(WIN32) #include "w16macro.h" #endif #define ODBCVER 0x0300 #include "sqltypes.h" #include "sql.h" #include "sqlext.h" /***********************************************************************/ /* Definitions to be used in function prototypes. */ /* The SQL_API is to be used only for those functions exported for */ /* driver manager use. */ /* The EXPFUNC is to be used only for those functions exported but */ /* used internally, ie, dialog procs. */ /* The INTFUNC is to be used for all other functions. */ /***********************************************************************/ #if defined(WIN32) #define INTFUNC __stdcall #define EXPFUNC __stdcall #else #define INTFUNC FAR PASCAL #define EXPFUNC __export CALLBACK #endif /***********************************************************************/ /* External variables. */ /***********************************************************************/ extern HINSTANCE NEAR s_hModule; // DLL handle. #ifdef DEBTRACE extern FILE *debug; #endif extern bool clearerror; /***********************************************************************/ /* Additional values used by PlugDB for ODBC. */ /***********************************************************************/ #define RES_TYPE_PREPARE 1 /* Result from SQLPrepare */ #define RES_TYPE_CATALOG 2 /* Result from catalog funcs */ #define MAXPATHLEN _MAX_PATH /* Max path length */ #define MAXKEYLEN 16 /* Max keyword length */ #define MAXDESC 256 /* Max description length */ #define MAXDSNAME 33 /* Max data source name length */ #define MAXCRNAME 18 /* Max stmt cursor name length */ #define DEFMAXRES 6300 /* Default MaxRes value */ #define NAM_LEN 128 /* Length of col and tab names */ #define MAXRESULT 1000 /* ? */ #define MAXCOMMAND 200 /* ? */ #define RC_ERROR RC_LAST-1 #define RC_FREE 3 #if !defined(NOLIB) #define CNXKEY uint /* C Key returned by Conn DLL */ #else typedef struct _conninfo *PCONN; #endif /* !NOLIB */ #if defined(DEBTRACE) #define TRACE0(X) fprintf(debug,X); #define TRACE1(X,A) fprintf(debug,X,A); #define TRACE2(X,A,B) fprintf(debug,X,A,B); #define TRACE3(X,A,B,C) fprintf(debug,X,A,B,C); #define TRACE4(X,A,B,C,D) fprintf(debug,X,A,B,C,D); #define TRACE5(X,A,B,C,D,E) fprintf(debug,X,A,B,C,D,E); #define TRACE6(X,A,B,C,D,E,F) fprintf(debug,X,A,B,C,D,E,F); #else /* !DEBTRACE*/ #define TRACE0(X) #define TRACE1(X,A) #define TRACE2(X,A,B) #define TRACE3(X,A,B,C) #define TRACE4(X,A,B,C,D) #define TRACE5(X,A,B,C,D,E) #define TRACE6(X,A,B,C,D,E,F) #endif /* !DEBTRACE*/ // This definition MUST be identical to the value in plgdbsem.h #define XMOD_PREPARE 1 /***********************************************************************/ /* ODBC.INI keywords (use extern definition in SETUP.C) */ /***********************************************************************/ extern char const *EMPTYSTR; /* Empty String */ extern char const *OPTIONON; extern char const *OPTIONOFF; extern char const *INI_SDEFAULT; /* Default data source name */ extern char const *ODBC_INI; /* ODBC initialization file */ extern char const *INI_KDEFL; /* Is SQL to use by default? */ extern char const *INI_KLANG; /* Application language */ extern char const *INI_KDATA; /* Data description file */ extern char const *INI_KSVR; /* PLG Server */ /************************************************************************/ /* Attribute key indexes (into an array of Attr structs, see below) */ /************************************************************************/ #define KEY_DSN 0 #define KEY_DEFL 1 #define KEY_LANG 2 #define KEY_DATA 3 #define KEY_SERVER 4 #define LAST_KEY 5 /* Number of keys in TAG's */ #define KEY_DESC 5 #define KEY_TRANSNAME 6 #define KEY_TRANSOPTION 7 #define KEY_TRANSDLL 8 #define NUMOFKEYS 9 /* Number of keys supported */ #define FOURYEARS 126230400 // Four years in seconds (1 leap) /***********************************************************************/ /* This is used when an "out of memory" error happens, because this */ /* error recording system allocates memory when it logs an error, */ /* and it would be bad if it tried to allocate memory when it got an */ /* out of memory error. */ /***********************************************************************/ typedef enum _ERRSTAT { errstatOK, errstatNO_MEMORY, } ERRSTAT; /***********************************************************************/ /* Types */ /***********************************************************************/ typedef struct TagAttr { bool fSupplied; char Attr[MAXPATHLEN]; } TAG, *PTAG; typedef struct _parscons { /* Parse constants */ int Slen; /* String length */ int Ntag; /* Number of entries in tags */ int Nlook; /* Number of entries in lookup */ char Sep; /* Separator */ } PARC, *PPARC; /***********************************************************************/ /* Attribute string look-up table (maps keys to associated indexes) */ /***********************************************************************/ typedef struct _Look { const char *szKey; int iKey; } LOOK, *PLOOK; /***********************************************************************/ /* This is info about a single error. */ /***********************************************************************/ typedef struct _ERRBLK *PERRBLK; typedef struct _ERRBLK { PERRBLK Next; /* Next block in linked list of error blocks */ DWORD Native_Error; /* Native error */ DWORD Stderr; /* SQLC error code */ PSZ Message; /* Points to text of message */ } ERRBLK; /***********************************************************************/ /* This is a header block, it records information about a list of */ /* errors (ERRBLOCK's). */ /***********************************************************************/ typedef struct _ERRINFO { PERRBLK First; /* First block in linked list of error blocks. */ PERRBLK Last; /* Last block in above list. */ ERRSTAT Errstat; /* Status for special condition out of memory */ } ERRINFO, *PERRINFO; /***********************************************************************/ /* Environment information. */ /***********************************************************************/ typedef struct _env { ERRINFO Errinfo; /* Error list */ UDWORD ODBCver; UDWORD ODBCdateformat; } ENV, *PENV; /***********************************************************************/ /* Classes used in the PlugDB ODBC Driver. */ /***********************************************************************/ typedef class DBC *PDBC; typedef class STMT *PSTMT; typedef class CURSOR *PCURSOR; typedef class RESULT *PRESULT; typedef class BINDDATA *PBIND; typedef class BINDPARM *PBDPARM; typedef class CPLGdrv *PSCDRV; typedef class DESCRIPTOR *PDSC; /***********************************************************************/ /* ODBC Prototypes. */ /***********************************************************************/ void PostSQLError(HENV, HDBC, HSTMT, DWORD, DWORD, PSZ); void ClearSQLError(HENV, HDBC, HSTMT); short LoadRcString(UWORD, LPSTR, short); RETCODE RetcodeCopyBytes(HDBC, HSTMT, UCHAR FAR *, SWORD, SWORD FAR *, UCHAR FAR *, SWORD, bool); /***********************************************************************/ /* Private functions used by the driver. */ /***********************************************************************/ bool EXPFUNC FDriverConnectProc(HWND, WORD, WPARAM, LPARAM); extern void ParseAttrString(PLOOK, PTAG, UCHAR FAR *, PPARC); RETCODE PASCAL StringCopy(HDBC, HSTMT, PTR, SWORD, SWORD FAR *, char FAR *); RETCODE PASCAL ShortCopy(HDBC, HSTMT, PTR, SWORD, SWORD FAR *, short); RETCODE PASCAL LongCopy(HDBC, HSTMT, PTR, SWORD, SWORD FAR *, int); RETCODE PASCAL GeneralCopy(HDBC, HSTMT, PTR, SWORD, SWORD FAR *, PTR, SWORD); /* --------------------- End of PLGODBC.H ---------------------------- */