Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: VFK Reader 4 : * Purpose: Private Declarations for OGR free VFK Reader code. 5 : * Author: Martin Landa, landa.martin gmail.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2012-2018, Martin Landa <landa.martin gmail.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef GDAL_OGR_VFK_VFKREADERP_H_INCLUDED 14 : #define GDAL_OGR_VFK_VFKREADERP_H_INCLUDED 15 : 16 : #include <map> 17 : #include <string> 18 : 19 : #include "vfkreader.h" 20 : #include "ogr_api.h" 21 : 22 : #include "sqlite3.h" 23 : 24 : class VFKReader; 25 : 26 : /************************************************************************/ 27 : /* VFKReader */ 28 : /************************************************************************/ 29 : class VFKReader : public IVFKReader 30 : { 31 : private: 32 : const char *m_pszEncoding; 33 : 34 : VSILFILE *m_poFD; 35 : char *ReadLine(); 36 : 37 : void AddInfo(const char *) override; 38 : 39 : CPL_DISALLOW_COPY_ASSIGN(VFKReader) 40 : 41 : protected: 42 : char *m_pszFilename; 43 : VSIStatBufL *m_poFStat; 44 : bool m_bAmendment; 45 : bool m_bFileField; 46 : int m_nDataBlockCount; 47 : IVFKDataBlock **m_papoDataBlock; 48 : 49 : IVFKDataBlock *CreateDataBlock(const char *) override; 50 : void AddDataBlock(IVFKDataBlock *, const char *) override; 51 : virtual OGRErr AddFeature(IVFKDataBlock *, VFKFeature *) override; 52 : void ReadEncoding(); 53 : 54 : // Metadata. 55 : std::map<CPLString, CPLString> poInfo; 56 : 57 : public: 58 : explicit VFKReader(const GDALOpenInfo *); 59 : virtual ~VFKReader(); 60 : 61 1 : const char *GetFilename() const override 62 : { 63 1 : return m_pszFilename; 64 : } 65 : 66 9232 : const char *GetEncoding() const override 67 : { 68 9232 : return m_pszEncoding; 69 : } 70 : 71 0 : bool IsSpatial() const override 72 : { 73 0 : return false; 74 : } 75 : 76 0 : bool IsPreProcessed() const override 77 : { 78 0 : return false; 79 : } 80 : 81 0 : bool IsValid() const override 82 : { 83 0 : return true; 84 : } 85 : 86 1007 : bool HasFileField() const override 87 : { 88 1007 : return m_bFileField; 89 : } 90 : 91 : int ReadDataBlocks(bool = false) override; 92 : int64_t ReadDataRecords(IVFKDataBlock * = nullptr) override; 93 : int LoadGeometry() override; 94 : 95 5720 : int GetDataBlockCount() const override 96 : { 97 5720 : return m_nDataBlockCount; 98 : } 99 : 100 : IVFKDataBlock *GetDataBlock(int) const override; 101 : IVFKDataBlock *GetDataBlock(const char *) const override; 102 : 103 : const char *GetInfo(const char *) override; 104 : }; 105 : 106 : /************************************************************************/ 107 : /* VFKReaderSQLite */ 108 : /************************************************************************/ 109 : 110 : class VFKReaderSQLite : public VFKReader 111 : { 112 : private: 113 : char *m_pszDBname; 114 : sqlite3 *m_poDB; 115 : bool m_bSpatial; 116 : bool m_bNewDb; 117 : bool m_bDbSource; 118 : 119 : IVFKDataBlock *CreateDataBlock(const char *) override; 120 : void AddDataBlock(IVFKDataBlock *, const char *) override; 121 : OGRErr AddFeature(IVFKDataBlock *, VFKFeature *) override; 122 : 123 : void StoreInfo2DB(); 124 : 125 : void CreateIndex(const char *, const char *, const char *, bool = true); 126 : void CreateIndices(); 127 : 128 : friend class VFKFeatureSQLite; 129 : 130 : public: 131 : explicit VFKReaderSQLite(const GDALOpenInfo *); 132 : virtual ~VFKReaderSQLite(); 133 : 134 1134 : bool IsSpatial() const override 135 : { 136 1134 : return m_bSpatial; 137 : } 138 : 139 0 : bool IsPreProcessed() const override 140 : { 141 0 : return !m_bNewDb; 142 : } 143 : 144 17 : bool IsValid() const override 145 : { 146 17 : return m_poDB != nullptr; 147 : } 148 : 149 : int ReadDataBlocks(bool = false) override; 150 : int64_t ReadDataRecords(IVFKDataBlock * = nullptr) override; 151 : 152 : sqlite3_stmt *PrepareStatement(const char *); 153 : OGRErr ExecuteSQL(const char *, CPLErr = CE_Failure); 154 : OGRErr ExecuteSQL(sqlite3_stmt *&); 155 : }; 156 : 157 : #endif // GDAL_OGR_VFK_VFKREADERP_H_INCLUDED