LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/odbc - ogr_odbc.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 0 10 0.0 %
Date: 2024-11-21 22:18:42 Functions: 0 5 0.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  OpenGIS Simple Features Reference Implementation
       5             :  * Purpose:  Private definitions for OGR/ODBC driver.
       6             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2003, Frank Warmerdam <warmerdam@pobox.com>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #ifndef OGR_ODBC_H_INCLUDED
      15             : #define OGR_ODBC_H_INCLUDED
      16             : 
      17             : #include "ogrsf_frmts.h"
      18             : #include "cpl_odbc.h"
      19             : #include "cpl_error.h"
      20             : 
      21             : #include <map>
      22             : #include <unordered_set>
      23             : 
      24             : /************************************************************************/
      25             : /*                            OGRODBCLayer                              */
      26             : /************************************************************************/
      27             : 
      28             : class OGRODBCDataSource;
      29             : 
      30             : class OGRODBCLayer CPL_NON_FINAL : public OGRLayer
      31             : {
      32             :   protected:
      33             :     OGRFeatureDefn *poFeatureDefn;
      34             : 
      35             :     int m_nStatementFlags = 0;
      36             :     CPLODBCStatement *poStmt;
      37             : 
      38             :     // Layer spatial reference system, and srid.
      39             :     OGRSpatialReference *poSRS;
      40             :     int nSRSId;
      41             : 
      42             :     GIntBig iNextShapeId;
      43             : 
      44             :     OGRODBCDataSource *poDS;
      45             : 
      46             :     int bGeomColumnWKB;
      47             :     char *pszGeomColumn;
      48             :     char *pszFIDColumn;
      49             : 
      50             :     int *panFieldOrdinals;
      51             : 
      52             :     bool m_bEOF = false;
      53             : 
      54             :     CPLErr BuildFeatureDefn(const char *pszLayerName, CPLODBCStatement *poStmt);
      55             : 
      56           0 :     virtual CPLODBCStatement *GetStatement()
      57             :     {
      58           0 :         return poStmt;
      59             :     }
      60             : 
      61             :   public:
      62             :     OGRODBCLayer();
      63             :     virtual ~OGRODBCLayer();
      64             : 
      65             :     virtual void ResetReading() override;
      66             :     virtual OGRFeature *GetNextRawFeature();
      67             :     virtual OGRFeature *GetNextFeature() override;
      68             : 
      69             :     virtual OGRFeature *GetFeature(GIntBig nFeatureId) override;
      70             : 
      71           0 :     OGRFeatureDefn *GetLayerDefn() override
      72             :     {
      73           0 :         return poFeatureDefn;
      74             :     }
      75             : 
      76             :     virtual OGRSpatialReference *GetSpatialRef() override;
      77             : 
      78             :     virtual int TestCapability(const char *) override;
      79             : };
      80             : 
      81             : /************************************************************************/
      82             : /*                           OGRODBCTableLayer                          */
      83             : /************************************************************************/
      84             : 
      85             : class OGRODBCTableLayer final : public OGRODBCLayer
      86             : {
      87             :     char *pszQuery;
      88             : 
      89             :     int bHaveSpatialExtents;
      90             : 
      91             :     void ClearStatement();
      92             :     OGRErr ResetStatement();
      93             : 
      94             :     virtual CPLODBCStatement *GetStatement() override;
      95             : 
      96             :     char *pszTableName;
      97             :     char *pszSchemaName;
      98             : 
      99             :   public:
     100             :     explicit OGRODBCTableLayer(OGRODBCDataSource *, int);
     101             :     virtual ~OGRODBCTableLayer();
     102             : 
     103             :     CPLErr Initialize(const char *pszTableName, const char *pszGeomCol);
     104             : 
     105             :     virtual void ResetReading() override;
     106             :     virtual GIntBig GetFeatureCount(int) override;
     107             : 
     108             :     virtual OGRErr SetAttributeFilter(const char *) override;
     109             : #ifdef notdef
     110             :     virtual OGRErr ISetFeature(OGRFeature *poFeature);
     111             :     virtual OGRErr ICreateFeature(OGRFeature *poFeature);
     112             : 
     113             :     virtual OGRErr CreateField(OGRFieldDefn *poField, int bApproxOK = TRUE);
     114             : #endif
     115             :     virtual OGRFeature *GetFeature(GIntBig nFeatureId) override;
     116             : 
     117             :     virtual OGRSpatialReference *GetSpatialRef() override;
     118             : 
     119             :     virtual int TestCapability(const char *) override;
     120             : 
     121             : #ifdef notdef
     122             :     // follow methods are not base class overrides
     123             :     void SetLaunderFlag(int bFlag)
     124             :     {
     125             :         bLaunderColumnNames = bFlag;
     126             :     }
     127             : 
     128             :     void SetPrecisionFlag(int bFlag)
     129             :     {
     130             :         bPreservePrecision = bFlag;
     131             :     }
     132             : #endif
     133             : };
     134             : 
     135             : /************************************************************************/
     136             : /*                          OGRODBCSelectLayer                          */
     137             : /************************************************************************/
     138             : 
     139             : class OGRODBCSelectLayer final : public OGRODBCLayer
     140             : {
     141             :     char *pszBaseStatement;
     142             : 
     143             :     void ClearStatement();
     144             :     OGRErr ResetStatement();
     145             : 
     146             :     virtual CPLODBCStatement *GetStatement() override;
     147             : 
     148             :   public:
     149             :     OGRODBCSelectLayer(OGRODBCDataSource *, CPLODBCStatement *);
     150             :     virtual ~OGRODBCSelectLayer();
     151             : 
     152             :     virtual void ResetReading() override;
     153             :     virtual GIntBig GetFeatureCount(int) override;
     154             : 
     155             :     virtual OGRFeature *GetFeature(GIntBig nFeatureId) override;
     156             : 
     157             :     virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE) override;
     158             : 
     159           0 :     virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
     160             :                              int bForce) override
     161             :     {
     162           0 :         return OGRLayer::GetExtent(iGeomField, psExtent, bForce);
     163             :     }
     164             : 
     165             :     virtual int TestCapability(const char *) override;
     166             : };
     167             : 
     168             : /************************************************************************/
     169             : /*                           OGRODBCDataSource                          */
     170             : /************************************************************************/
     171             : 
     172             : class OGRODBCDataSource final : public GDALDataset
     173             : {
     174             :     OGRODBCLayer **papoLayers;
     175             :     int nLayers;
     176             : 
     177             :     CPLODBCSession oSession;
     178             : 
     179             : #if 0
     180             :     // NOTE: nothing uses the SRS cache currently. Hence disabled.
     181             : 
     182             :     // We maintain a list of known SRID to reduce the number of trips to
     183             :     // the database to get SRSes.
     184             :     std::map<int,
     185             :              std::unique_ptr<OGRSpatialReference, OGRSpatialReferenceReleaser>>
     186             :         m_oSRSCache{};
     187             : #endif
     188             : 
     189             :     // set of all lowercase table names. Note that this is only used when
     190             :     // opening MDB datasources, not generic ODBC ones.
     191             :     std::unordered_set<std::string> m_aosAllLCTableNames;
     192             : 
     193             :     int m_nStatementFlags = 0;
     194             : 
     195             :     int OpenMDB(GDALOpenInfo *poOpenInfo);
     196             :     static bool IsPrivateLayerName(const CPLString &osName);
     197             : 
     198             :   public:
     199             :     OGRODBCDataSource();
     200             :     virtual ~OGRODBCDataSource();
     201             : 
     202             :     int Open(GDALOpenInfo *poOpenInfo);
     203             :     int OpenTable(const char *pszTableName, const char *pszGeomCol);
     204             : 
     205           0 :     int GetLayerCount() override
     206             :     {
     207           0 :         return nLayers;
     208             :     }
     209             : 
     210             :     OGRLayer *GetLayer(int) override;
     211             :     OGRLayer *GetLayerByName(const char *) override;
     212             :     bool IsLayerPrivate(int) const override;
     213             : 
     214             :     int TestCapability(const char *) override;
     215             : 
     216             :     virtual OGRLayer *ExecuteSQL(const char *pszSQLCommand,
     217             :                                  OGRGeometry *poSpatialFilter,
     218             :                                  const char *pszDialect) override;
     219             :     virtual void ReleaseResultSet(OGRLayer *poLayer) override;
     220             : 
     221             :     // Internal use
     222           0 :     CPLODBCSession *GetSession()
     223             :     {
     224           0 :         return &oSession;
     225             :     }
     226             : };
     227             : 
     228             : #endif /* ndef OGR_ODBC_H_INCLUDED */

Generated by: LCOV version 1.14