12#ifndef OGR_SCHEMA_OVERRIDE_H_INCLUDED
13#define OGR_SCHEMA_OVERRIDE_H_INCLUDED
27class CPL_DLL OGRFieldDefnOverride
30 OGRFieldDefnOverride() =
default;
32 void SetFieldName(
const std::string &osName)
44 m_eSrcSubType = eSubType;
54 m_eSubType = eSubType;
57 void SetFieldWidth(
int nWidth)
62 void SetFieldPrecision(
int nPrecision)
64 m_nPrecision = nPrecision;
67 std::optional<std::string> GetFieldName()
const
72 std::optional<OGRFieldType> GetSrcFieldType()
const
77 std::optional<OGRFieldSubType> GetSrcFieldSubType()
const
82 std::optional<OGRFieldType> GetFieldType()
const
87 std::optional<OGRFieldSubType> GetFieldSubType()
const
92 std::optional<int> GetFieldWidth()
const
97 std::optional<int> GetFieldPrecision()
const
103 bool IsValid()
const;
106 std::optional<std::string> m_osName{};
107 std::optional<OGRFieldType> m_eSrcType{};
108 std::optional<OGRFieldSubType> m_eSrcSubType{};
109 std::optional<OGRFieldType> m_eType{};
110 std::optional<OGRFieldSubType> m_eSubType{};
111 std::optional<int> m_nWidth{};
112 std::optional<int> m_nPrecision{};
116class CPL_DLL OGRLayerSchemaOverride
119 OGRLayerSchemaOverride() =
default;
121 void SetLayerName(
const std::string &osLayerName)
123 m_osLayerName = osLayerName;
126 void AddNamedFieldOverride(
const std::string &osFieldName,
127 const OGRFieldDefnOverride &oFieldOverride)
129 m_oNamedFieldOverrides[osFieldName] = oFieldOverride;
132 void AddUnnamedFieldOverride(
const OGRFieldDefnOverride &oFieldOverride)
134 m_aoUnnamedFieldOverrides.push_back(oFieldOverride);
137 const std::string &GetLayerName()
const
139 return m_osLayerName;
142 const std::map<std::string, OGRFieldDefnOverride> &
143 GetNamedFieldOverrides()
const
145 return m_oNamedFieldOverrides;
148 const std::vector<OGRFieldDefnOverride> &GetUnnamedFieldOverrides()
const
150 return m_aoUnnamedFieldOverrides;
153 bool IsFullOverride()
const
155 return m_bIsFullOverride;
158 void SetFullOverride(
bool bIsFullOverride)
160 m_bIsFullOverride = bIsFullOverride;
163 bool IsValid()
const;
166 std::string m_osLayerName{};
167 std::map<std::string, OGRFieldDefnOverride> m_oNamedFieldOverrides{};
168 std::vector<OGRFieldDefnOverride> m_aoUnnamedFieldOverrides{};
169 bool m_bIsFullOverride =
false;
175class CPL_DLL OGRSchemaOverride
178 OGRSchemaOverride() =
default;
180 void AddLayerOverride(
const OGRLayerSchemaOverride &oLayerOverride)
182 m_aoLayerOverrides.push_back(oLayerOverride);
185 bool LoadFromJSON(
const std::string &osJSON);
187 const std::vector<OGRLayerSchemaOverride> &GetLayerOverrides()
const
189 return m_aoLayerOverrides;
192 bool IsValid()
const;
196 GDALDataset *poDS,
const char *pszDebugKey,
197 std::function<
void(OGRLayer *,
int)> callbackWhenRemovingField =
198 [](OGRLayer *,
int) {})
const;
201 std::vector<OGRLayerSchemaOverride> m_aoLayerOverrides{};
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:76
Interface for read and write JSON documents.
C API and defines for OGRFeature, OGRGeometry, and OGRDataSource related classes.
OGRFieldSubType
List of field subtypes.
Definition ogr_core.h:799
OGRFieldType
List of feature field types.
Definition ogr_core.h:772