LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/gpkg - ogrgeopackageselectlayer.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 39 44 88.6 %
Date: 2025-09-10 17:48:50 Functions: 11 11 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  GeoPackage Translator
       4             :  * Purpose:  Implements OGRGeoPackageSelectLayer class
       5             :  * Author:   Even Rouault <even dot rouault at spatialys.com>
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2014, Even Rouault <even dot rouault at spatialys.com>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #include "ogr_geopackage.h"
      14             : 
      15             : /************************************************************************/
      16             : /*                        OGRGeoPackageSelectLayer()                    */
      17             : /************************************************************************/
      18             : 
      19         774 : OGRGeoPackageSelectLayer::OGRGeoPackageSelectLayer(
      20             :     GDALGeoPackageDataset *poDS, const CPLString &osSQLIn,
      21             :     sqlite3_stmt *hStmtIn, bool bUseStatementForGetNextFeature,
      22         774 :     bool bEmptyLayer)
      23         774 :     : OGRGeoPackageLayer(poDS)
      24             : {
      25             :     // Cannot be moved to initializer list because of use of this, which MSVC
      26             :     // 2008 doesn't like
      27         774 :     poBehavior = new OGRSQLiteSelectLayerCommonBehaviour(poDS, this, osSQLIn,
      28         774 :                                                          bEmptyLayer);
      29             : 
      30         774 :     BuildFeatureDefn("SELECT", hStmtIn);
      31             : 
      32         774 :     m_bEOF = bEmptyLayer;
      33         774 :     if (bUseStatementForGetNextFeature)
      34             :     {
      35         639 :         m_poQueryStatement = hStmtIn;
      36         639 :         m_bDoStep = false;
      37             :     }
      38             :     else
      39             :     {
      40         135 :         sqlite3_finalize(hStmtIn);
      41             :     }
      42         774 : }
      43             : 
      44             : /************************************************************************/
      45             : /*                       ~OGRGeoPackageSelectLayer()                    */
      46             : /************************************************************************/
      47             : 
      48        1548 : OGRGeoPackageSelectLayer::~OGRGeoPackageSelectLayer()
      49             : {
      50         774 :     delete poBehavior;
      51        1548 : }
      52             : 
      53             : /************************************************************************/
      54             : /*                            ResetReading()                            */
      55             : /************************************************************************/
      56             : 
      57         137 : void OGRGeoPackageSelectLayer::ResetReading()
      58             : {
      59         137 :     poBehavior->ResetReading();
      60         137 : }
      61             : 
      62             : /************************************************************************/
      63             : /*                           GetNextFeature()                           */
      64             : /************************************************************************/
      65             : 
      66        2023 : OGRFeature *OGRGeoPackageSelectLayer::GetNextFeature()
      67             : {
      68        2023 :     return poBehavior->GetNextFeature();
      69             : }
      70             : 
      71             : /************************************************************************/
      72             : /*                           GetNextFeature()                           */
      73             : /************************************************************************/
      74             : 
      75         268 : GIntBig OGRGeoPackageSelectLayer::GetFeatureCount(int bForce)
      76             : {
      77         268 :     return poBehavior->GetFeatureCount(bForce);
      78             : }
      79             : 
      80             : /************************************************************************/
      81             : /*                           ResetStatement()                           */
      82             : /************************************************************************/
      83             : 
      84          61 : OGRErr OGRGeoPackageSelectLayer::ResetStatement()
      85             : 
      86             : {
      87          61 :     ClearStatement();
      88             : 
      89          61 :     m_iNextShapeId = 0;
      90          61 :     m_bDoStep = true;
      91             : 
      92             : #ifdef DEBUG
      93          61 :     CPLDebug("OGR_GPKG", "prepare_v2(%s)", poBehavior->m_osSQLCurrent.c_str());
      94             : #endif
      95             : 
      96             :     const int rc =
      97          61 :         sqlite3_prepare_v2(m_poDS->GetDB(), poBehavior->m_osSQLCurrent,
      98          61 :                            static_cast<int>(poBehavior->m_osSQLCurrent.size()),
      99             :                            &m_poQueryStatement, nullptr);
     100             : 
     101          61 :     if (rc == SQLITE_OK)
     102             :     {
     103          61 :         return OGRERR_NONE;
     104             :     }
     105             :     else
     106             :     {
     107           0 :         CPLError(CE_Failure, CPLE_AppDefined,
     108             :                  "In ResetStatement(): sqlite3_prepare_v2(%s):\n  %s",
     109           0 :                  poBehavior->m_osSQLCurrent.c_str(),
     110           0 :                  sqlite3_errmsg(m_poDS->GetDB()));
     111           0 :         m_poQueryStatement = nullptr;
     112           0 :         return OGRERR_FAILURE;
     113             :     }
     114             : }
     115             : 
     116             : /************************************************************************/
     117             : /*                         SetAttributeFilter()                         */
     118             : /************************************************************************/
     119             : 
     120          34 : OGRErr OGRGeoPackageSelectLayer::SetAttributeFilter(const char *pszQuery)
     121             : {
     122          34 :     return poBehavior->SetAttributeFilter(pszQuery);
     123             : }
     124             : 
     125             : /************************************************************************/
     126             : /*                         ISetSpatialFilter()                          */
     127             : /************************************************************************/
     128             : 
     129          45 : OGRErr OGRGeoPackageSelectLayer::ISetSpatialFilter(int iGeomField,
     130             :                                                    const OGRGeometry *poGeomIn)
     131             : 
     132             : {
     133          45 :     return poBehavior->SetSpatialFilter(iGeomField, poGeomIn);
     134             : }
     135             : 
     136             : /************************************************************************/
     137             : /*                           TestCapability()                           */
     138             : /************************************************************************/
     139             : 
     140          27 : int OGRGeoPackageSelectLayer::TestCapability(const char *pszCap) const
     141             : {
     142          27 :     return poBehavior->TestCapability(pszCap);
     143             : }
     144             : 
     145             : /************************************************************************/
     146             : /*                             IGetExtent()                             */
     147             : /************************************************************************/
     148             : 
     149           2 : OGRErr OGRGeoPackageSelectLayer::IGetExtent(int iGeomField,
     150             :                                             OGREnvelope *psExtent, bool bForce)
     151             : {
     152           2 :     return poBehavior->GetExtent(iGeomField, psExtent, bForce);
     153             : }

Generated by: LCOV version 1.14