mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			230 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /***********************************************************************/
 | |
| /*  PLGODBC.H - This is the ODBC PlugDB driver include file.           */
 | |
| /***********************************************************************/
 | |
| //efine WINVER 0x0300 // prevent Windows 3.1 feature usage
 | |
| #include <windows.h>                           /* Windows include file */
 | |
| #include <windowsx.h>                          /* Message crackers     */
 | |
| #include <commctrl.h>
 | |
| 
 | |
| /***********************************************************************/
 | |
| /*  Included C-definition files required by the interface.             */
 | |
| /***********************************************************************/
 | |
| #include <string.h>                  /* String manipulation declares   */
 | |
| #include <stdlib.h>                  /* C standard library             */
 | |
| #include <ctype.h>                   /* C language specific types      */
 | |
| #include <stdio.h>                   /* FOPEN_MAX   declaration        */
 | |
| #include <time.h>                    /* 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 ---------------------------- */
 | 
