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: 2024-11-21 22:18:42 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         758 : OGRGeoPackageSelectLayer::OGRGeoPackageSelectLayer(
      20             :     GDALGeoPackageDataset *poDS, const CPLString &osSQLIn,
      21             :     sqlite3_stmt *hStmtIn, bool bUseStatementForGetNextFeature,
      22         758 :     bool bEmptyLayer)
      23         758 :     : OGRGeoPackageLayer(poDS)
      24             : {
      25             :     // Cannot be moved to initializer list because of use of this, which MSVC
      26             :     // 2008 doesn't like
      27         758 :     poBehavior = new OGRSQLiteSelectLayerCommonBehaviour(poDS, this, osSQLIn,
      28         758 :                                                          bEmptyLayer);
      29             : 
      30         758 :     BuildFeatureDefn("SELECT", hStmtIn);
      31             : 
      32         758 :     if (bUseStatementForGetNextFeature)
      33             :     {
      34         629 :         m_poQueryStatement = hStmtIn;
      35         629 :         m_bDoStep = false;
      36             :     }
      37             :     else
      38             :     {
      39         129 :         sqlite3_finalize(hStmtIn);
      40             :     }
      41         758 : }
      42             : 
      43             : /************************************************************************/
      44             : /*                       ~OGRGeoPackageSelectLayer()                    */
      45             : /************************************************************************/
      46             : 
      47        1516 : OGRGeoPackageSelectLayer::~OGRGeoPackageSelectLayer()
      48             : {
      49         758 :     delete poBehavior;
      50        1516 : }
      51             : 
      52             : /************************************************************************/
      53             : /*                            ResetReading()                            */
      54             : /************************************************************************/
      55             : 
      56         133 : void OGRGeoPackageSelectLayer::ResetReading()
      57             : {
      58         133 :     poBehavior->ResetReading();
      59         133 : }
      60             : 
      61             : /************************************************************************/
      62             : /*                           GetNextFeature()                           */
      63             : /************************************************************************/
      64             : 
      65        1991 : OGRFeature *OGRGeoPackageSelectLayer::GetNextFeature()
      66             : {
      67        1991 :     return poBehavior->GetNextFeature();
      68             : }
      69             : 
      70             : /************************************************************************/
      71             : /*                           GetNextFeature()                           */
      72             : /************************************************************************/
      73             : 
      74         261 : GIntBig OGRGeoPackageSelectLayer::GetFeatureCount(int bForce)
      75             : {
      76         261 :     return poBehavior->GetFeatureCount(bForce);
      77             : }
      78             : 
      79             : /************************************************************************/
      80             : /*                           ResetStatement()                           */
      81             : /************************************************************************/
      82             : 
      83          59 : OGRErr OGRGeoPackageSelectLayer::ResetStatement()
      84             : 
      85             : {
      86          59 :     ClearStatement();
      87             : 
      88          59 :     m_iNextShapeId = 0;
      89          59 :     m_bDoStep = true;
      90             : 
      91             : #ifdef DEBUG
      92          59 :     CPLDebug("OGR_GPKG", "prepare_v2(%s)", poBehavior->m_osSQLCurrent.c_str());
      93             : #endif
      94             : 
      95             :     const int rc =
      96          59 :         sqlite3_prepare_v2(m_poDS->GetDB(), poBehavior->m_osSQLCurrent,
      97          59 :                            static_cast<int>(poBehavior->m_osSQLCurrent.size()),
      98             :                            &m_poQueryStatement, nullptr);
      99             : 
     100          59 :     if (rc == SQLITE_OK)
     101             :     {
     102          59 :         return OGRERR_NONE;
     103             :     }
     104             :     else
     105             :     {
     106           0 :         CPLError(CE_Failure, CPLE_AppDefined,
     107             :                  "In ResetStatement(): sqlite3_prepare_v2(%s):\n  %s",
     108           0 :                  poBehavior->m_osSQLCurrent.c_str(),
     109           0 :                  sqlite3_errmsg(m_poDS->GetDB()));
     110           0 :         m_poQueryStatement = nullptr;
     111           0 :         return OGRERR_FAILURE;
     112             :     }
     113             : }
     114             : 
     115             : /************************************************************************/
     116             : /*                         SetAttributeFilter()                         */
     117             : /************************************************************************/
     118             : 
     119          34 : OGRErr OGRGeoPackageSelectLayer::SetAttributeFilter(const char *pszQuery)
     120             : {
     121          34 :     return poBehavior->SetAttributeFilter(pszQuery);
     122             : }
     123             : 
     124             : /************************************************************************/
     125             : /*                          SetSpatialFilter()                          */
     126             : /************************************************************************/
     127             : 
     128          47 : void OGRGeoPackageSelectLayer::SetSpatialFilter(int iGeomField,
     129             :                                                 OGRGeometry *poGeomIn)
     130             : 
     131             : {
     132          47 :     poBehavior->SetSpatialFilter(iGeomField, poGeomIn);
     133          47 : }
     134             : 
     135             : /************************************************************************/
     136             : /*                           TestCapability()                           */
     137             : /************************************************************************/
     138             : 
     139          26 : int OGRGeoPackageSelectLayer::TestCapability(const char *pszCap)
     140             : {
     141          26 :     return poBehavior->TestCapability(pszCap);
     142             : }
     143             : 
     144             : /************************************************************************/
     145             : /*                             GetExtent()                              */
     146             : /************************************************************************/
     147             : 
     148           4 : OGRErr OGRGeoPackageSelectLayer::GetExtent(int iGeomField,
     149             :                                            OGREnvelope *psExtent, int bForce)
     150             : {
     151           4 :     return poBehavior->GetExtent(iGeomField, psExtent, bForce);
     152             : }

Generated by: LCOV version 1.14