Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

cpl_odbc.h

Go to the documentation of this file.
00001 /******************************************************************************
00002  * $Id: cpl_odbc.h,v 1.12 2005/06/29 01:01:01 ssoule Exp $
00003  *
00004  * Project:  OGR ODBC Driver
00005  * Purpose:  Declarations for ODBC Access Cover API.
00006  * Author:   Frank Warmerdam, warmerdam@pobox.com
00007  *
00008  ******************************************************************************
00009  * Copyright (c) 2003, Frank Warmerdam
00010  *
00011  * Permission is hereby granted, free of charge, to any person obtaining a
00012  * copy of this software and associated documentation files (the "Software"),
00013  * to deal in the Software without restriction, including without limitation
00014  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00015  * and/or sell copies of the Software, and to permit persons to whom the
00016  * Software is furnished to do so, subject to the following conditions:
00017  *
00018  * The above copyright notice and this permission notice shall be included
00019  * in all copies or substantial portions of the Software.
00020  *
00021  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00022  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00023  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00024  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00025  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00026  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00027  * DEALINGS IN THE SOFTWARE.
00028  ******************************************************************************
00029  *
00030  * $Log: cpl_odbc.h,v $
00031  * Revision 1.12  2005/06/29 01:01:01  ssoule
00032  * Changed return type of CPLODBCStatement::GetTypeName from const char * to
00033  * std::string.
00034  *
00035  * Revision 1.11  2005/01/13 03:24:54  fwarmerdam
00036  * changed type of m_panColSize, per ODBC 3.52 requirements
00037  *
00038  * Revision 1.10  2004/06/23 16:11:30  warmerda
00039  * just testing cvs commits
00040  *
00041  * Revision 1.9  2004/06/01 20:40:02  warmerda
00042  * expanded tabs
00043  *
00044  * Revision 1.8  2003/11/24 20:45:00  warmerda
00045  * make CollectResultsInfo() public
00046  *
00047  * Revision 1.7  2003/10/29 17:56:57  warmerda
00048  * Added PrimaryKeys() support
00049  *
00050  * Revision 1.6  2003/10/06 20:04:08  warmerda
00051  * added escaping support
00052  *
00053  * Revision 1.5  2003/10/06 17:16:18  warmerda
00054  * added windows.h for windows, and fixed m_panColSize type
00055  *
00056  * Revision 1.4  2003/09/26 20:02:41  warmerda
00057  * update GetColData()
00058  *
00059  * Revision 1.3  2003/09/26 13:51:02  warmerda
00060  * Add documentation
00061  *
00062  * Revision 1.2  2003/09/25 17:09:49  warmerda
00063  * added some more methods
00064  *
00065  * Revision 1.1  2003/09/24 15:39:14  warmerda
00066  * New
00067  *
00068  */
00069 
00070 #ifndef CPL_ODBC_H_INCLUDED
00071 #define CPL_ODBC_H_INCLUDED
00072 
00073 #include "cpl_port.h"
00074 
00075 #ifdef WIN32
00076 #  include <windows.h>
00077 #endif
00078 
00079 #include <sql.h>
00080 #include <sqlext.h>
00081 #include <string>
00082 
00089 class CPLODBCStatement;
00090 
00091 
00092 #ifdef SQLULEN
00093 /* ODBC types to support 64 bit compilation */
00094 #  define _SQLULEN SQLULEN
00095 #  define _SQLLEN  SQLLEN
00096 #else
00097 #  define _SQLULEN SQLUINTEGER
00098 #  define _SQLLEN  SQLINTEGER
00099 #endif  /* ifdef SQLULEN */
00100 
00101 
00108 class CPL_DLL CPLODBCSession {
00109     char      m_szLastError[SQL_MAX_MESSAGE_LENGTH + 1];
00110     HENV      m_hEnv;
00111     HDBC      m_hDBC;
00112 
00113   public:
00114     CPLODBCSession();
00115     ~CPLODBCSession();
00116 
00117     int         EstablishSession( const char *pszDSN, 
00118                                   const char *pszUserid, 
00119                                   const char *pszPassword );
00120     const char  *GetLastError();
00121 
00122     // Essentially internal. 
00123 
00124     int         CloseSession();
00125 
00126     int         Failed( int, HSTMT = NULL );
00127     HDBC        GetConnection() { return m_hDBC; }
00128     HENV        GetEnvironment()  { return m_hEnv; }
00129 };
00130 
00140 class CPL_DLL CPLODBCStatement {
00141 
00142     CPLODBCSession     *m_poSession;
00143     HSTMT               m_hStmt;
00144 
00145     short          m_nColCount;
00146     char         **m_papszColNames;
00147     short         *m_panColType;
00148     _SQLULEN       *m_panColSize;
00149     short         *m_panColPrecision;
00150     short         *m_panColNullable;
00151 
00152     char         **m_papszColValues;
00153     
00154     int            Failed( int );
00155 
00156     char          *m_pszStatement;
00157     int            m_nStatementMax;
00158     int            m_nStatementLen;
00159 
00160   public:
00161     CPLODBCStatement( CPLODBCSession * );
00162     ~CPLODBCStatement();
00163 
00164     HSTMT          GetStatement() { return m_hStmt; }
00165 
00166     // Command buffer related.
00167     void           Clear();
00168     void           AppendEscaped( const char * );
00169     void           Append( const char * );
00170     void           Append( int );
00171     void           Append( double );
00172     int            Appendf( const char *, ... );
00173     const char    *GetCommand() { return m_pszStatement; }
00174 
00175     int            ExecuteSQL( const char * = NULL );
00176 
00177     // Results fetching
00178     int            Fetch( int nOrientation = SQL_FETCH_NEXT, 
00179                           int nOffset = 0 );
00180     void           ClearColumnData();
00181 
00182     int            GetColCount();
00183     const char    *GetColName(int iCol);
00184     short          GetColType(int iCol);
00185     short          GetColSize(int iCol);
00186     short          GetColPrecision(int iCol);
00187     short          GetColNullable(int iCol);
00188 
00189     int            GetColId( const char * );
00190     const char    *GetColData( int, const char * = NULL );
00191     const char    *GetColData( const char *, const char * = NULL );
00192 
00193     // Fetch special metadata.
00194     int            GetColumns( const char *pszTable, 
00195                                const char *pszCatalog = NULL,
00196                                const char *pszSchema = NULL );
00197     int            GetPrimaryKeys( const char *pszTable, 
00198                                    const char *pszCatalog = NULL,
00199                                    const char *pszSchema = NULL );
00200 
00201     int            GetTables( const char *pszCatalog = NULL,
00202                               const char *pszSchema = NULL );
00203 
00204     void           DumpResult( FILE *fp, int bShowSchema = FALSE );
00205 
00206     static std::string GetTypeName( int );
00207 
00208     int            CollectResultsInfo();
00209 };
00210 
00211 #endif
00212 
00213 

Generated on Mon Aug 29 04:05:42 2005 for OGR by doxygen 1.3.6