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 void SetNullable(
bool bNullable)
69 m_bNullable = bNullable;
72 void SetUnique(
bool bUnique)
77 void SetComment(
const std::string &osComment)
79 m_osComment = osComment;
82 void SetAlias(
const std::string &osAlias)
87 void SetTimezone(
const std::string &osTimezone)
89 m_osTimezone = osTimezone;
92 void SetDomainName(
const std::string &osDomainName)
94 m_osDomainName = osDomainName;
97 void SetDefaultValue(
const std::string &osDefaultValue)
99 m_osDefaultValue = osDefaultValue;
102 std::optional<std::string> GetFieldName()
const
107 std::optional<OGRFieldType> GetSrcFieldType()
const
112 std::optional<OGRFieldSubType> GetSrcFieldSubType()
const
114 return m_eSrcSubType;
117 std::optional<OGRFieldType> GetFieldType()
const
122 std::optional<OGRFieldSubType> GetFieldSubType()
const
127 std::optional<int> GetFieldWidth()
const
132 std::optional<int> GetFieldPrecision()
const
137 std::optional<int> GetNullable()
const
142 std::optional<int> GetUnique()
const
147 std::optional<std::string> GetComment()
const
152 std::optional<std::string> GetAlias()
const
157 std::optional<std::string> GetTimezone()
const
162 std::optional<std::string> GetDomainName()
const
164 return m_osDomainName;
168 bool IsValid()
const;
174 OGRFieldDefn ToFieldDefn(
const std::string &osDefaultName)
const;
177 std::optional<std::string> m_osName{};
178 std::optional<OGRFieldType> m_eSrcType{};
179 std::optional<OGRFieldSubType> m_eSrcSubType{};
180 std::optional<OGRFieldType> m_eType{};
181 std::optional<OGRFieldSubType> m_eSubType{};
182 std::optional<int> m_nWidth{};
183 std::optional<int> m_nPrecision{};
184 std::optional<bool> m_bUnique{};
185 std::optional<bool> m_bNullable{};
186 std::optional<std::string> m_osComment{};
187 std::optional<std::string> m_osAlias{};
188 std::optional<std::string> m_osTimezone{};
189 std::optional<std::string> m_osDomainName{};
190 std::optional<std::string> m_osDefaultValue{};
196class CPL_DLL OGRGeomFieldDefnOverride
199 OGRGeomFieldDefnOverride() =
default;
201 void SetFieldName(
const std::string &osName)
216 void SetNullable(
bool bNullable)
218 m_bNullable = bNullable;
221 std::optional<std::string> GetFieldName()
const
226 std::optional<OGRwkbGeometryType> GetGeometryType()
const
231 std::optional<OGRSpatialReference> GetSRS()
const
236 std::optional<bool> GetNullable()
const
247 ToGeometryFieldDefn(
const std::string &osDefaultName)
const;
250 std::optional<bool> m_bNullable{};
251 std::optional<std::string> m_osName{};
252 std::optional<OGRwkbGeometryType> m_eType{};
253 std::optional<OGRSpatialReference> m_oSRS{};
257class CPL_DLL OGRLayerSchemaOverride
260 OGRLayerSchemaOverride() =
default;
262 void SetLayerName(
const std::string &osLayerName);
264 void SetFIDColumnName(
const std::string &osFIDColumnName);
266 void AddNamedFieldOverride(
const std::string &osFieldName,
267 const OGRFieldDefnOverride &oFieldOverride);
269 void AddUnnamedFieldOverride(
const OGRFieldDefnOverride &oFieldOverride);
271 const std::string &GetLayerName()
const;
273 const std::string &GetFIDColumnName()
const;
275 const std::map<std::string, OGRFieldDefnOverride> &
276 GetNamedFieldOverrides()
const;
278 const std::vector<OGRFieldDefnOverride> &GetUnnamedFieldOverrides()
const;
280 void AddGeometryFieldOverride(
281 const OGRGeomFieldDefnOverride &oGeomFieldOverride);
283 const std::vector<OGRGeomFieldDefnOverride> &
284 GetGeometryFieldOverrides()
const;
286 std::vector<OGRFieldDefn> GetFieldDefinitions()
const;
288 std::vector<OGRGeomFieldDefn> GetGeomFieldDefinitions()
const;
290 bool IsFullOverride()
const;
292 void SetFullOverride(
bool bIsFullOverride);
294 bool IsValid()
const;
299 std::string m_osLayerName{};
300 std::string m_osFIDColumnName{};
301 std::map<std::string, OGRFieldDefnOverride> m_oNamedFieldOverrides{};
302 std::vector<OGRFieldDefnOverride> m_aoUnnamedFieldOverrides{};
303 std::vector<OGRGeomFieldDefnOverride> m_aoGeomFieldOverrides{};
304 bool m_bIsFullOverride =
false;
310class CPL_DLL OGRSchemaOverride
313 OGRSchemaOverride() =
default;
315 void AddLayerOverride(
const OGRLayerSchemaOverride &oLayerOverride);
323 bool LoadFromJSON(
const std::string &osJSON,
324 bool bAllowGeometryFields =
false);
326 const std::vector<OGRLayerSchemaOverride> &GetLayerOverrides()
const;
328 bool IsValid()
const;
336 std::function<
void(
OGRLayer *,
int)> callbackWhenRemovingField =
339 const OGRLayerSchemaOverride &
340 GetLayerOverride(
const std::string &osLayerName)
const;
343 std::vector<OGRLayerSchemaOverride> m_aoLayerOverrides{};
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:77
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:72
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:335
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:61
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:152
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:817
OGRFieldType
List of feature field types.
Definition ogr_core.h:790
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:423