LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/generic - ogrlayerdecorator.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 122 201 60.7 %
Date: 2024-11-21 22:18:42 Functions: 38 49 77.6 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  OpenGIS Simple Features Reference Implementation
       4             :  * Purpose:  Implements OGRLayerDecorator class
       5             :  * Author:   Even Rouault, even dot rouault at spatialys.com
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2012-2013, Even Rouault <even dot rouault at spatialys.com>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #ifndef DOXYGEN_SKIP
      14             : 
      15             : #include "ogrlayerdecorator.h"
      16             : #include "ogr_recordbatch.h"
      17             : 
      18        1059 : OGRLayerDecorator::OGRLayerDecorator(OGRLayer *poDecoratedLayer,
      19        1059 :                                      int bTakeOwnership)
      20        1059 :     : m_poDecoratedLayer(poDecoratedLayer), m_bHasOwnership(bTakeOwnership)
      21             : {
      22        1059 :     CPLAssert(poDecoratedLayer != nullptr);
      23        1059 :     SetDescription(poDecoratedLayer->GetDescription());
      24        1059 : }
      25             : 
      26        1059 : OGRLayerDecorator::~OGRLayerDecorator()
      27             : {
      28        1059 :     if (m_bHasOwnership)
      29         410 :         delete m_poDecoratedLayer;
      30        1059 : }
      31             : 
      32          20 : OGRGeometry *OGRLayerDecorator::GetSpatialFilter()
      33             : {
      34          20 :     if (!m_poDecoratedLayer)
      35           0 :         return nullptr;
      36          20 :     return m_poDecoratedLayer->GetSpatialFilter();
      37             : }
      38             : 
      39         146 : void OGRLayerDecorator::SetSpatialFilter(OGRGeometry *poGeom)
      40             : {
      41         146 :     if (!m_poDecoratedLayer)
      42           0 :         return;
      43         146 :     m_poDecoratedLayer->SetSpatialFilter(poGeom);
      44             : }
      45             : 
      46         100 : void OGRLayerDecorator::SetSpatialFilter(int iGeomField, OGRGeometry *poGeom)
      47             : {
      48         100 :     if (!m_poDecoratedLayer)
      49           0 :         return;
      50         100 :     m_poDecoratedLayer->SetSpatialFilter(iGeomField, poGeom);
      51             : }
      52             : 
      53           0 : void OGRLayerDecorator::SetSpatialFilterRect(double dfMinX, double dfMinY,
      54             :                                              double dfMaxX, double dfMaxY)
      55             : {
      56           0 :     if (!m_poDecoratedLayer)
      57           0 :         return;
      58           0 :     m_poDecoratedLayer->SetSpatialFilterRect(dfMinX, dfMinY, dfMaxX, dfMaxY);
      59             : }
      60             : 
      61           0 : void OGRLayerDecorator::SetSpatialFilterRect(int iGeomField, double dfMinX,
      62             :                                              double dfMinY, double dfMaxX,
      63             :                                              double dfMaxY)
      64             : {
      65           0 :     if (!m_poDecoratedLayer)
      66           0 :         return;
      67           0 :     m_poDecoratedLayer->SetSpatialFilterRect(iGeomField, dfMinX, dfMinY, dfMaxX,
      68           0 :                                              dfMaxY);
      69             : }
      70             : 
      71         620 : OGRErr OGRLayerDecorator::SetAttributeFilter(const char *poAttrFilter)
      72             : {
      73         620 :     if (!m_poDecoratedLayer)
      74           0 :         return OGRERR_FAILURE;
      75         620 :     return m_poDecoratedLayer->SetAttributeFilter(poAttrFilter);
      76             : }
      77             : 
      78        1066 : void OGRLayerDecorator::ResetReading()
      79             : {
      80        1066 :     if (!m_poDecoratedLayer)
      81           0 :         return;
      82        1066 :     m_poDecoratedLayer->ResetReading();
      83             : }
      84             : 
      85        2361 : OGRFeature *OGRLayerDecorator::GetNextFeature()
      86             : {
      87        2361 :     if (!m_poDecoratedLayer)
      88           0 :         return nullptr;
      89        2361 :     return m_poDecoratedLayer->GetNextFeature();
      90             : }
      91             : 
      92          75 : GDALDataset *OGRLayerDecorator::GetDataset()
      93             : {
      94          75 :     if (!m_poDecoratedLayer)
      95           0 :         return nullptr;
      96          75 :     return m_poDecoratedLayer->GetDataset();
      97             : }
      98             : 
      99         111 : bool OGRLayerDecorator::GetArrowStream(struct ArrowArrayStream *out_stream,
     100             :                                        CSLConstList papszOptions)
     101             : {
     102         111 :     if (!m_poDecoratedLayer)
     103             :     {
     104           0 :         memset(out_stream, 0, sizeof(*out_stream));
     105           0 :         return false;
     106             :     }
     107         111 :     return m_poDecoratedLayer->GetArrowStream(out_stream, papszOptions);
     108             : }
     109             : 
     110          82 : OGRErr OGRLayerDecorator::SetNextByIndex(GIntBig nIndex)
     111             : {
     112          82 :     if (!m_poDecoratedLayer)
     113           0 :         return OGRERR_FAILURE;
     114          82 :     return m_poDecoratedLayer->SetNextByIndex(nIndex);
     115             : }
     116             : 
     117         152 : OGRFeature *OGRLayerDecorator::GetFeature(GIntBig nFID)
     118             : {
     119         152 :     if (!m_poDecoratedLayer)
     120           0 :         return nullptr;
     121         152 :     return m_poDecoratedLayer->GetFeature(nFID);
     122             : }
     123             : 
     124          24 : OGRErr OGRLayerDecorator::ISetFeature(OGRFeature *poFeature)
     125             : {
     126          24 :     if (!m_poDecoratedLayer)
     127           0 :         return OGRERR_FAILURE;
     128          24 :     return m_poDecoratedLayer->SetFeature(poFeature);
     129             : }
     130             : 
     131        1568 : OGRErr OGRLayerDecorator::ICreateFeature(OGRFeature *poFeature)
     132             : {
     133        1568 :     if (!m_poDecoratedLayer)
     134           0 :         return OGRERR_FAILURE;
     135        1568 :     return m_poDecoratedLayer->CreateFeature(poFeature);
     136             : }
     137             : 
     138           0 : OGRErr OGRLayerDecorator::IUpsertFeature(OGRFeature *poFeature)
     139             : {
     140           0 :     if (!m_poDecoratedLayer)
     141           0 :         return OGRERR_FAILURE;
     142           0 :     return m_poDecoratedLayer->UpsertFeature(poFeature);
     143             : }
     144             : 
     145           4 : OGRErr OGRLayerDecorator::IUpdateFeature(OGRFeature *poFeature,
     146             :                                          int nUpdatedFieldsCount,
     147             :                                          const int *panUpdatedFieldsIdx,
     148             :                                          int nUpdatedGeomFieldsCount,
     149             :                                          const int *panUpdatedGeomFieldsIdx,
     150             :                                          bool bUpdateStyleString)
     151             : {
     152           4 :     if (!m_poDecoratedLayer)
     153           0 :         return OGRERR_FAILURE;
     154           4 :     return m_poDecoratedLayer->UpdateFeature(
     155             :         poFeature, nUpdatedFieldsCount, panUpdatedFieldsIdx,
     156           4 :         nUpdatedGeomFieldsCount, panUpdatedGeomFieldsIdx, bUpdateStyleString);
     157             : }
     158             : 
     159          46 : OGRErr OGRLayerDecorator::DeleteFeature(GIntBig nFID)
     160             : {
     161          46 :     if (!m_poDecoratedLayer)
     162           0 :         return OGRERR_FAILURE;
     163          46 :     return m_poDecoratedLayer->DeleteFeature(nFID);
     164             : }
     165             : 
     166        1976 : const char *OGRLayerDecorator::GetName()
     167             : {
     168        1976 :     if (!m_poDecoratedLayer)
     169           0 :         return GetDescription();
     170        1976 :     return m_poDecoratedLayer->GetName();
     171             : }
     172             : 
     173         470 : OGRwkbGeometryType OGRLayerDecorator::GetGeomType()
     174             : {
     175         470 :     if (!m_poDecoratedLayer)
     176           0 :         return wkbNone;
     177         470 :     return m_poDecoratedLayer->GetGeomType();
     178             : }
     179             : 
     180        4908 : OGRFeatureDefn *OGRLayerDecorator::GetLayerDefn()
     181             : {
     182        4908 :     if (!m_poDecoratedLayer)
     183           0 :         return nullptr;
     184        4908 :     return m_poDecoratedLayer->GetLayerDefn();
     185             : }
     186             : 
     187          66 : OGRSpatialReference *OGRLayerDecorator::GetSpatialRef()
     188             : {
     189          66 :     if (!m_poDecoratedLayer)
     190           0 :         return nullptr;
     191          66 :     return m_poDecoratedLayer->GetSpatialRef();
     192             : }
     193             : 
     194         230 : GIntBig OGRLayerDecorator::GetFeatureCount(int bForce)
     195             : {
     196         230 :     if (!m_poDecoratedLayer)
     197           0 :         return 0;
     198         230 :     return m_poDecoratedLayer->GetFeatureCount(bForce);
     199             : }
     200             : 
     201          34 : OGRErr OGRLayerDecorator::GetExtent(OGREnvelope *psExtent, int bForce)
     202             : {
     203          34 :     if (!m_poDecoratedLayer)
     204           0 :         return OGRERR_FAILURE;
     205          34 :     return m_poDecoratedLayer->GetExtent(psExtent, bForce);
     206             : }
     207             : 
     208          72 : OGRErr OGRLayerDecorator::GetExtent(int iGeomField, OGREnvelope *psExtent,
     209             :                                     int bForce)
     210             : {
     211          72 :     if (!m_poDecoratedLayer)
     212           0 :         return OGRERR_FAILURE;
     213          72 :     return m_poDecoratedLayer->GetExtent(iGeomField, psExtent, bForce);
     214             : }
     215             : 
     216        1231 : int OGRLayerDecorator::TestCapability(const char *pszCapability)
     217             : {
     218        1231 :     if (!m_poDecoratedLayer)
     219           0 :         return FALSE;
     220        1231 :     return m_poDecoratedLayer->TestCapability(pszCapability);
     221             : }
     222             : 
     223        1369 : OGRErr OGRLayerDecorator::CreateField(const OGRFieldDefn *poField,
     224             :                                       int bApproxOK)
     225             : {
     226        1369 :     if (!m_poDecoratedLayer)
     227           0 :         return OGRERR_FAILURE;
     228        1369 :     return m_poDecoratedLayer->CreateField(poField, bApproxOK);
     229             : }
     230             : 
     231           1 : OGRErr OGRLayerDecorator::DeleteField(int iField)
     232             : {
     233           1 :     if (!m_poDecoratedLayer)
     234           0 :         return OGRERR_FAILURE;
     235           1 :     return m_poDecoratedLayer->DeleteField(iField);
     236             : }
     237             : 
     238           0 : OGRErr OGRLayerDecorator::ReorderFields(int *panMap)
     239             : {
     240           0 :     if (!m_poDecoratedLayer)
     241           0 :         return OGRERR_FAILURE;
     242           0 :     return m_poDecoratedLayer->ReorderFields(panMap);
     243             : }
     244             : 
     245           0 : OGRErr OGRLayerDecorator::AlterFieldDefn(int iField,
     246             :                                          OGRFieldDefn *poNewFieldDefn,
     247             :                                          int nFlagsIn)
     248             : {
     249           0 :     if (!m_poDecoratedLayer)
     250           0 :         return OGRERR_FAILURE;
     251           0 :     return m_poDecoratedLayer->AlterFieldDefn(iField, poNewFieldDefn, nFlagsIn);
     252             : }
     253             : 
     254           0 : OGRErr OGRLayerDecorator::AlterGeomFieldDefn(
     255             :     int iGeomField, const OGRGeomFieldDefn *poNewGeomFieldDefn, int nFlagsIn)
     256             : {
     257           0 :     if (!m_poDecoratedLayer)
     258           0 :         return OGRERR_FAILURE;
     259           0 :     return m_poDecoratedLayer->AlterGeomFieldDefn(iGeomField,
     260           0 :                                                   poNewGeomFieldDefn, nFlagsIn);
     261             : }
     262             : 
     263           0 : OGRErr OGRLayerDecorator::CreateGeomField(const OGRGeomFieldDefn *poField,
     264             :                                           int bApproxOK)
     265             : {
     266           0 :     if (!m_poDecoratedLayer)
     267           0 :         return OGRERR_FAILURE;
     268           0 :     return m_poDecoratedLayer->CreateGeomField(poField, bApproxOK);
     269             : }
     270             : 
     271           0 : OGRErr OGRLayerDecorator::SyncToDisk()
     272             : {
     273           0 :     if (!m_poDecoratedLayer)
     274           0 :         return OGRERR_FAILURE;
     275           0 :     return m_poDecoratedLayer->SyncToDisk();
     276             : }
     277             : 
     278           3 : OGRStyleTable *OGRLayerDecorator::GetStyleTable()
     279             : {
     280           3 :     if (!m_poDecoratedLayer)
     281           0 :         return nullptr;
     282           3 :     return m_poDecoratedLayer->GetStyleTable();
     283             : }
     284             : 
     285           0 : void OGRLayerDecorator::SetStyleTableDirectly(OGRStyleTable *poStyleTable)
     286             : {
     287           0 :     if (!m_poDecoratedLayer)
     288           0 :         return;
     289           0 :     m_poDecoratedLayer->SetStyleTableDirectly(poStyleTable);
     290             : }
     291             : 
     292          46 : void OGRLayerDecorator::SetStyleTable(OGRStyleTable *poStyleTable)
     293             : {
     294          46 :     if (!m_poDecoratedLayer)
     295           0 :         return;
     296          46 :     m_poDecoratedLayer->SetStyleTable(poStyleTable);
     297             : }
     298             : 
     299          16 : OGRErr OGRLayerDecorator::StartTransaction()
     300             : {
     301          16 :     if (!m_poDecoratedLayer)
     302           0 :         return OGRERR_FAILURE;
     303          16 :     return m_poDecoratedLayer->StartTransaction();
     304             : }
     305             : 
     306          14 : OGRErr OGRLayerDecorator::CommitTransaction()
     307             : {
     308          14 :     if (!m_poDecoratedLayer)
     309           0 :         return OGRERR_FAILURE;
     310          14 :     return m_poDecoratedLayer->CommitTransaction();
     311             : }
     312             : 
     313           2 : OGRErr OGRLayerDecorator::RollbackTransaction()
     314             : {
     315           2 :     if (!m_poDecoratedLayer)
     316           0 :         return OGRERR_FAILURE;
     317           2 :     return m_poDecoratedLayer->RollbackTransaction();
     318             : }
     319             : 
     320         397 : const char *OGRLayerDecorator::GetFIDColumn()
     321             : {
     322         397 :     if (!m_poDecoratedLayer)
     323           0 :         return "";
     324         397 :     return m_poDecoratedLayer->GetFIDColumn();
     325             : }
     326             : 
     327          39 : const char *OGRLayerDecorator::GetGeometryColumn()
     328             : {
     329          39 :     if (!m_poDecoratedLayer)
     330           0 :         return "";
     331          39 :     return m_poDecoratedLayer->GetGeometryColumn();
     332             : }
     333             : 
     334         237 : OGRErr OGRLayerDecorator::SetIgnoredFields(CSLConstList papszFields)
     335             : {
     336         237 :     if (!m_poDecoratedLayer)
     337           0 :         return OGRERR_FAILURE;
     338         237 :     return m_poDecoratedLayer->SetIgnoredFields(papszFields);
     339             : }
     340             : 
     341          51 : char **OGRLayerDecorator::GetMetadata(const char *pszDomain)
     342             : {
     343          51 :     if (!m_poDecoratedLayer)
     344           0 :         return nullptr;
     345          51 :     return m_poDecoratedLayer->GetMetadata(pszDomain);
     346             : }
     347             : 
     348          22 : CPLErr OGRLayerDecorator::SetMetadata(char **papszMetadata,
     349             :                                       const char *pszDomain)
     350             : {
     351          22 :     if (!m_poDecoratedLayer)
     352           0 :         return CE_Failure;
     353          22 :     return m_poDecoratedLayer->SetMetadata(papszMetadata, pszDomain);
     354             : }
     355             : 
     356          80 : const char *OGRLayerDecorator::GetMetadataItem(const char *pszName,
     357             :                                                const char *pszDomain)
     358             : {
     359          80 :     if (!m_poDecoratedLayer)
     360           0 :         return nullptr;
     361          80 :     return m_poDecoratedLayer->GetMetadataItem(pszName, pszDomain);
     362             : }
     363             : 
     364           0 : CPLErr OGRLayerDecorator::SetMetadataItem(const char *pszName,
     365             :                                           const char *pszValue,
     366             :                                           const char *pszDomain)
     367             : {
     368           0 :     if (!m_poDecoratedLayer)
     369           0 :         return CE_Failure;
     370           0 :     return m_poDecoratedLayer->SetMetadataItem(pszName, pszValue, pszDomain);
     371             : }
     372             : 
     373           8 : OGRErr OGRLayerDecorator::Rename(const char *pszNewName)
     374             : {
     375           8 :     if (!m_poDecoratedLayer)
     376           0 :         return OGRERR_FAILURE;
     377           8 :     OGRErr eErr = m_poDecoratedLayer->Rename(pszNewName);
     378           8 :     if (eErr == OGRERR_NONE)
     379             :     {
     380           4 :         SetDescription(m_poDecoratedLayer->GetDescription());
     381             :     }
     382           8 :     return eErr;
     383             : }
     384             : 
     385             : #endif /* #ifndef DOXYGEN_SKIP */

Generated by: LCOV version 1.14