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
00168 public:
00169 CPLODBCSession();
00170 ~CPLODBCSession();
00171
00172 int EstablishSession( const char *pszDSN,
00173 const char *pszUserid,
00174 const char *pszPassword );
00175 const char *GetLastError();
00176
00177
00178
00179 int CloseSession();
00180
00181 int Failed( int, HSTMT = NULL );
00182 HDBC GetConnection() { return m_hDBC; }
00183 HENV GetEnvironment() { return m_hEnv; }
00184 };
00185
00195 class CPL_DLL CPLODBCStatement {
00196
00197 CPLODBCSession *m_poSession;
00198 HSTMT m_hStmt;
00199
00200 SQLSMALLINT m_nColCount;
00201 char **m_papszColNames;
00202 SQLSMALLINT *m_panColType;
00203 char **m_papszColTypeNames;
00204 _SQLULEN *m_panColSize;
00205 SQLSMALLINT *m_panColPrecision;
00206 SQLSMALLINT *m_panColNullable;
00207
00208 char **m_papszColValues;
00209 _SQLLEN *m_panColValueLengths;
00210
00211 int Failed( int );
00212
00213 char *m_pszStatement;
00214 size_t m_nStatementMax;
00215 size_t m_nStatementLen;
00216
00217 public:
00218 CPLODBCStatement( CPLODBCSession * );
00219 ~CPLODBCStatement();
00220
00221 HSTMT GetStatement() { return m_hStmt; }
00222
00223
00224 void Clear();
00225 void AppendEscaped( const char * );
00226 void Append( const char * );
00227 void Append( int );
00228 void Append( double );
00229 int Appendf( const char *, ... );
00230 const char *GetCommand() { return m_pszStatement; }
00231
00232 int ExecuteSQL( const char * = NULL );
00233
00234
00235 int Fetch( int nOrientation = SQL_FETCH_NEXT,
00236 int nOffset = 0 );
00237 void ClearColumnData();
00238
00239 int GetColCount();
00240 const char *GetColName( int );
00241 short GetColType( int );
00242 const char *GetColTypeName( int );
00243 short GetColSize( int );
00244 short GetColPrecision( int );
00245 short GetColNullable( int );
00246
00247 int GetColId( const char * );
00248 const char *GetColData( int, const char * = NULL );
00249 const char *GetColData( const char *, const char * = NULL );
00250 int GetColDataLength( int );
00251
00252
00253 int GetColumns( const char *pszTable,
00254 const char *pszCatalog = NULL,
00255 const char *pszSchema = NULL );
00256 int GetPrimaryKeys( const char *pszTable,
00257 const char *pszCatalog = NULL,
00258 const char *pszSchema = NULL );
00259
00260 int GetTables( const char *pszCatalog = NULL,
00261 const char *pszSchema = NULL );
00262
00263 void DumpResult( FILE *fp, int bShowSchema = FALSE );
00264
00265 static CPLString GetTypeName( int );
00266 static SQLSMALLINT GetTypeMapping( SQLSMALLINT );
00267
00268 int CollectResultsInfo();
00269 };
00270
00271 #endif
00272
00273 #endif
00274
00275