Main Page | Class Hierarchy | Class List | Directories | 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.14 2005/09/05 20:18:43 fwarmerdam 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.14  2005/09/05 20:18:43  fwarmerdam
00032  * added binary column support
00033  *
00034  * Revision 1.13  2005/08/31 03:32:41  fwarmerdam
00035  * GetTypeName now returns CPLString
00036  *
00037  * Revision 1.12  2005/06/29 01:01:01  ssoule
00038  * Changed return type of CPLODBCStatement::GetTypeName from const char * to
00039  * std::string.
00040  *
00041  * Revision 1.11  2005/01/13 03:24:54  fwarmerdam
00042  * changed type of m_panColSize, per ODBC 3.52 requirements
00043  *
00044  * Revision 1.10  2004/06/23 16:11:30  warmerda
00045  * just testing cvs commits
00046  *
00047  * Revision 1.9  2004/06/01 20:40:02  warmerda
00048  * expanded tabs
00049  *
00050  * Revision 1.8  2003/11/24 20:45:00  warmerda
00051  * make CollectResultsInfo() public
00052  *
00053  * Revision 1.7  2003/10/29 17:56:57  warmerda
00054  * Added PrimaryKeys() support
00055  *
00056  * Revision 1.6  2003/10/06 20:04:08  warmerda
00057  * added escaping support
00058  *
00059  * Revision 1.5  2003/10/06 17:16:18  warmerda
00060  * added windows.h for windows, and fixed m_panColSize type
00061  *
00062  * Revision 1.4  2003/09/26 20:02:41  warmerda
00063  * update GetColData()
00064  *
00065  * Revision 1.3  2003/09/26 13:51:02  warmerda
00066  * Add documentation
00067  *
00068  * Revision 1.2  2003/09/25 17:09:49  warmerda
00069  * added some more methods
00070  *
00071  * Revision 1.1  2003/09/24 15:39:14  warmerda
00072  * New
00073  *
00074  */
00075 
00076 #ifndef CPL_ODBC_H_INCLUDED
00077 #define CPL_ODBC_H_INCLUDED
00078 
00079 #include "cpl_port.h"
00080 
00081 #ifdef WIN32
00082 #  include <windows.h>
00083 #endif
00084 
00085 #include <sql.h>
00086 #include <sqlext.h>
00087 #include "cpl_string.h"
00088 
00095 class CPLODBCStatement;
00096 
00097 
00098 #ifdef SQLULEN
00099 /* ODBC types to support 64 bit compilation */
00100 #  define _SQLULEN SQLULEN
00101 #  define _SQLLEN  SQLLEN
00102 #else
00103 #  define _SQLULEN SQLUINTEGER
00104 #  define _SQLLEN  SQLINTEGER
00105 #endif  /* ifdef SQLULEN */
00106 
00107 
00114 class CPL_DLL CPLODBCSession {
00115     char      m_szLastError[SQL_MAX_MESSAGE_LENGTH + 1];
00116     HENV      m_hEnv;
00117     HDBC      m_hDBC;
00118 
00119   public:
00120     CPLODBCSession();
00121     ~CPLODBCSession();
00122 
00123     int         EstablishSession( const char *pszDSN, 
00124                                   const char *pszUserid, 
00125                                   const char *pszPassword );
00126     const char  *GetLastError();
00127 
00128     // Essentially internal. 
00129 
00130     int         CloseSession();
00131 
00132     int         Failed( int, HSTMT = NULL );
00133     HDBC        GetConnection() { return m_hDBC; }
00134     HENV        GetEnvironment()  { return m_hEnv; }
00135 };
00136 
00146 class CPL_DLL CPLODBCStatement {
00147 
00148     CPLODBCSession     *m_poSession;
00149     HSTMT               m_hStmt;
00150 
00151     short          m_nColCount;
00152     char         **m_papszColNames;
00153     short         *m_panColType;
00154     _SQLULEN       *m_panColSize;
00155     short         *m_panColPrecision;
00156     short         *m_panColNullable;
00157 
00158     char         **m_papszColValues;
00159     int           *m_panColValueLengths;
00160     
00161     int            Failed( int );
00162 
00163     char          *m_pszStatement;
00164     int            m_nStatementMax;
00165     int            m_nStatementLen;
00166 
00167   public:
00168     CPLODBCStatement( CPLODBCSession * );
00169     ~CPLODBCStatement();
00170 
00171     HSTMT          GetStatement() { return m_hStmt; }
00172 
00173     // Command buffer related.
00174     void           Clear();
00175     void           AppendEscaped( const char * );
00176     void           Append( const char * );
00177     void           Append( int );
00178     void           Append( double );
00179     int            Appendf( const char *, ... );
00180     const char    *GetCommand() { return m_pszStatement; }
00181 
00182     int            ExecuteSQL( const char * = NULL );
00183 
00184     // Results fetching
00185     int            Fetch( int nOrientation = SQL_FETCH_NEXT, 
00186                           int nOffset = 0 );
00187     void           ClearColumnData();
00188 
00189     int            GetColCount();
00190     const char    *GetColName(int iCol);
00191     short          GetColType(int iCol);
00192     short          GetColSize(int iCol);
00193     short          GetColPrecision(int iCol);
00194     short          GetColNullable(int iCol);
00195 
00196     int            GetColId( const char * );
00197     const char    *GetColData( int, const char * = NULL );
00198     const char    *GetColData( const char *, const char * = NULL );
00199     int            GetColDataLength( int );
00200 
00201     // Fetch special metadata.
00202     int            GetColumns( const char *pszTable, 
00203                                const char *pszCatalog = NULL,
00204                                const char *pszSchema = NULL );
00205     int            GetPrimaryKeys( const char *pszTable, 
00206                                    const char *pszCatalog = NULL,
00207                                    const char *pszSchema = NULL );
00208 
00209     int            GetTables( const char *pszCatalog = NULL,
00210                               const char *pszSchema = NULL );
00211 
00212     void           DumpResult( FILE *fp, int bShowSchema = FALSE );
00213 
00214     static CPLString GetTypeName( int );
00215 
00216     int            CollectResultsInfo();
00217 };
00218 
00219 #endif
00220 
00221 

Generated on Tue Oct 4 15:11:56 2005 for OGR by  doxygen 1.4.1