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: 2025-01-18 12:42:00 Functions: 0 5 0.0 %

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

Generated by: LCOV version 1.14