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