cpl_odbc.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef CPL_ODBC_H_INCLUDED
00031 #define CPL_ODBC_H_INCLUDED
00032
00033 #include "cpl_port.h"
00034
00035 #ifndef WIN32CE
00036
00037 #ifdef WIN32
00038 # include <windows.h>
00039 #endif
00040
00041 #include <sql.h>
00042 #include <sqlext.h>
00043 #include <odbcinst.h>
00044 #include "cpl_string.h"
00045
00046 #ifdef PATH_MAX
00047 # define ODBC_FILENAME_MAX PATH_MAX
00048 #else
00049 # define ODBC_FILENAME_MAX (255 + 1)
00050 #endif
00051
00052
00062 class CPL_DLL CPLODBCDriverInstaller
00063 {
00064 char m_szPathOut[ODBC_FILENAME_MAX];
00065 char m_szError[SQL_MAX_MESSAGE_LENGTH];
00066 DWORD m_nErrorCode;
00067 DWORD m_nUsageCount;
00068
00069 public:
00070
00071
00072 CPLODBCDriverInstaller();
00073
00074
00092 int InstallDriver( const char* pszDriver, const char* pszPathIn,
00093 WORD fRequest = ODBC_INSTALL_COMPLETE );
00094
00111 int RemoveDriver( const char* pszDriverName, int fRemoveDSN = FALSE );
00112
00113
00114
00115 int GetUsageCount() const { return m_nUsageCount; }
00116
00117
00118
00119
00120
00121 const char* GetPathOut() const { return m_szPathOut; }
00122
00123
00124
00125
00126
00127 const char* GetLastError() const { return m_szError; }
00128
00129
00130
00131
00132
00133
00134 DWORD GetLastErrorCode() const { return m_nErrorCode; }
00135 };
00136
00137 class CPLODBCStatement;
00138
00139
00140
00141
00142
00143 #if defined(_MSC_VER) && !defined(SQLULEN) && !defined(_WIN64)
00144 # define MISSING_SQLULEN
00145 #endif
00146
00147 #if !defined(MISSING_SQLULEN)
00148
00149 # define _SQLULEN SQLULEN
00150 # define _SQLLEN SQLLEN
00151 #else
00152 # define _SQLULEN SQLUINTEGER
00153 # define _SQLLEN SQLINTEGER
00154 #endif
00155
00156
00163 class CPL_DLL CPLODBCSession {
00164 char m_szLastError[SQL_MAX_MESSAGE_LENGTH + 1];
00165 HENV m_hEnv;
00166 HDBC m_hDBC;
00167 int m_bInTransaction;
00168 int m_bAutoCommit;
00169
00170 public:
00171 CPLODBCSession();
00172 ~CPLODBCSession();
00173
00174 int EstablishSession( const char *pszDSN,
00175 const char *pszUserid,
00176 const char *pszPassword );
00177 const char *GetLastError();
00178
00179
00180
00181 int ClearTransaction();
00182 int BeginTransaction();
00183 int CommitTransaction();
00184 int RollbackTransaction();
00185 int IsInTransaction() { return m_bInTransaction; }
00186
00187
00188
00189 int CloseSession();
00190
00191 int Failed( int, HSTMT = NULL );
00192 HDBC GetConnection() { return m_hDBC; }
00193 HENV GetEnvironment() { return m_hEnv; }
00194 };
00195
00205 class CPL_DLL CPLODBCStatement {
00206
00207 CPLODBCSession *m_poSession;
00208 HSTMT m_hStmt;
00209
00210 SQLSMALLINT m_nColCount;
00211 char **m_papszColNames;
00212 SQLSMALLINT *m_panColType;
00213 char **m_papszColTypeNames;
00214 _SQLULEN *m_panColSize;
00215 SQLSMALLINT *m_panColPrecision;
00216 SQLSMALLINT *m_panColNullable;
00217
00218 char **m_papszColValues;
00219 _SQLLEN *m_panColValueLengths;
00220
00221 int Failed( int );
00222
00223 char *m_pszStatement;
00224 size_t m_nStatementMax;
00225 size_t m_nStatementLen;
00226
00227 public:
00228 CPLODBCStatement( CPLODBCSession * );
00229 ~CPLODBCStatement();
00230
00231 HSTMT GetStatement() { return m_hStmt; }
00232
00233
00234 void Clear();
00235 void AppendEscaped( const char * );
00236 void Append( const char * );
00237 void Append( int );
00238 void Append( double );
00239 int Appendf( const char *, ... ) CPL_PRINT_FUNC_FORMAT (2, 3);
00240 const char *GetCommand() { return m_pszStatement; }
00241
00242 int ExecuteSQL( const char * = NULL );
00243
00244
00245 int Fetch( int nOrientation = SQL_FETCH_NEXT,
00246 int nOffset = 0 );
00247 void ClearColumnData();
00248
00249 int GetColCount();
00250 const char *GetColName( int );
00251 short GetColType( int );
00252 const char *GetColTypeName( int );
00253 short GetColSize( int );
00254 short GetColPrecision( int );
00255 short GetColNullable( int );
00256
00257 int GetColId( const char * );
00258 const char *GetColData( int, const char * = NULL );
00259 const char *GetColData( const char *, const char * = NULL );
00260 int GetColDataLength( int );
00261
00262
00263 int GetColumns( const char *pszTable,
00264 const char *pszCatalog = NULL,
00265 const char *pszSchema = NULL );
00266 int GetPrimaryKeys( const char *pszTable,
00267 const char *pszCatalog = NULL,
00268 const char *pszSchema = NULL );
00269
00270 int GetTables( const char *pszCatalog = NULL,
00271 const char *pszSchema = NULL );
00272
00273 void DumpResult( FILE *fp, int bShowSchema = FALSE );
00274
00275 static CPLString GetTypeName( int );
00276 static SQLSMALLINT GetTypeMapping( SQLSMALLINT );
00277
00278 int CollectResultsInfo();
00279 };
00280
00281 #endif
00282
00283 #endif
00284
00285