ext/filegdb/filegdb/include/Geodatabase.h in filegdb-0.0.6 vs ext/filegdb/filegdb/include/Geodatabase.h in filegdb-1.0.0
- old
+ new
@@ -1,291 +1,319 @@
-//
-// Geodatabase.h
-//
-
-/*
- COPYRIGHT © 2012 ESRI
- TRADE SECRETS: ESRI PROPRIETARY AND CONFIDENTIAL
- Unpublished material - all rights reserved under the
- Copyright Laws of the United States and applicable international
- laws, treaties, and conventions.
-
- For additional information, contact:
- Environmental Systems Research Institute, Inc.
- Attn: Contracts and Legal Services Department
- 380 New York Street
- Redlands, California, 92373
- USA
-
- email: contracts@esri.com
-*/
-
-#pragma once
-
-#include <string>
-#include <vector>
-#include <map>
-
-#ifndef EXPORT_FILEGDB_API
-# if defined linux || defined __APPLE__
-# define EXT_FILEGDB_API
-# else
-# define EXT_FILEGDB_API _declspec(dllimport)
-# endif
-#else
-# if defined linux || defined __APPLE__
-# define EXT_FILEGDB_API __attribute__((visibility("default")))
-# else
-# define EXT_FILEGDB_API _declspec(dllexport)
-# endif
-#endif
-
-#include "FileGDBCore.h"
-
-class Catalog;
-class CatalogRef;
-
-namespace FileGDBAPI
-{
-
-class EnumRows;
-class Row;
-class Table;
-
-/// A class representing a File Geodatabase.
-class EXT_FILEGDB_API Geodatabase
-{
-public:
-
- /// @name Schema browsing
- //@{
- /// Gets a list of the dataset types in the geodatabase.
- /// @param[out] datasetTypes The dataset types in the geodatabase.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetDatasetTypes(std::vector<std::wstring>& datasetTypes) const;
-
- /// Gets a list of relationship types in the geodatabase.
- /// @param[out] relationshipTypes The relationship types in the geodatabase.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetDatasetRelationshipTypes(std::vector<std::wstring>& relationshipTypes) const;
-
- /// Gets the child datasets for a particular dataset, if any.
- /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
- /// @param[in] parentPath The dataset to find the children of, e.g. "\usa".
- /// @param[in] datasetType The child dataset type as a wstring, e.g. "Feature Class". Passing in
- /// an empty string will return all child datasets. <a href="ItemTypes.txt">DatasetType</a>
- /// @param[out] childDatasets The children of the parent dataset, if any.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetChildDatasets(const std::wstring& parentPath, const std::wstring& datasetType, std::vector<std::wstring>& childDatasets) const;
-
- /// Gets the related datasets for a particular dataset, if any.
- /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
- /// @param[in] path The path of the dataset to find related datasets for, e.g. "\usa\streets_topology".
- /// @param[in] relType The relationship type to filter return values with, e.g. "DatasetInFeatureDataset". Passing in
- /// an empty string will return all related datasets. <a href="RelationshipTypes.txt">RelationshipType</a>
- /// @param[in] datasetType The type of the dataset to find related datasets for. <a href="ItemTypes.txt">DatasetType</a>
- /// @param[out] relatedDatasets The origin dataset's related datasets, if any.
- /// @result Error code indicating whether the method finished successfully.
- fgdbError GetRelatedDatasets(const std::wstring& path, const std::wstring& relType, const std::wstring& datasetType, std::vector<std::wstring>& relatedDatasets) const;
- //@}
-
- /// @name Schema definition
- //@{
- /// Gets the definition of a dataset as an XML document.
- /// If the dataset does not exist, this will fail with an error code of -2147220655 (The table was not found).
- /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
- /// @param[in] path The requested dataset's path. e.g. "\usa\city_anno"
- /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
- /// @param[out] datasetDef The dataset's definition as an XML document.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetDatasetDefinition(const std::wstring& path, const std::wstring& datasetType, std::string& datasetDef) const;
-
- /// Gets the definitions of child datasets as a collection of XML documents.
- /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
- /// @param[in] parentPath The parent dataset's path, e.g. "\usa".
- /// @param[in] datasetType The parent dataset's type as a string, e.g. "Feature Dataset". Passing in
- /// an empty string will return all child datasets. <a href="ItemTypes.txt">DatasetType</a>
- /// @param[out] childDatasetDefs A collection of child dataset definitions, if any.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetChildDatasetDefinitions(const std::wstring& parentPath, const std::wstring& datasetType, std::vector<std::string>& childDatasetDefs) const;
-
- /// Gets the definitions of related datasets as a collection of XML documents.
- /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
- /// @param[in] path The origin dataset's path, e.g. "\usa\streets_topology"
- /// @param[in] relType The relationship type to filter return values with, e.g. "DatasetInFeatureDataset". <a href="RelationshipTypes.txt">RelationshipType</a>
- /// @param[in] datasetType The origin dataset's type as a string, e.g. "Relationship Class". Passing in
- /// an empty string will return all related datasets. <a href="ItemTypes.txt">DatasetType</a>
- /// @param[out] relatedDatasetDefs A collection of related dataset definitions, if any.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetRelatedDatasetDefinitions(const std::wstring& path, const std::wstring& relType, const std::wstring& datasetType, std::vector<std::string>& relatedDatasetDefs) const;
-
- /// Gets the metadata of a dataset as XML.
- /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
- /// @param[in] path The requested dataset's path. e.g. "\address_list"
- /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
- /// @param[out] documentation The dataset's metadata as XML.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetDatasetDocumentation(const std::wstring& path, const std::wstring& datasetType, std::string& documentation) const;
- //@}
-
- /// @name Datasets
- //@{
- /// Creates a new feature dataset.
- /// If the feature dataset already exists, a -2147220733 (The dataset already exists) error will be returned.<br/>
- /// If the feature dataset name is missing from the XML, a -2147220645 (INVALID_NAME) error will be returned.<br/>
- /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
- /// <a href="FeatureDataset.xml">XML</a>
- /// <br><br>
- /// @param[in] featureDatasetDef The XML definition of the feature dataset to be created.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError CreateFeatureDataset(const std::string& featureDatasetDef);
-
- /// Creates a new table. This can either be a table or a feature class. If a geometry is to support Zs or Ms (measures), HasZ
- /// and or HasM must be set to true in the GeometryDef in the XML. The ZOrigin, MOrigin, ZScale and MScale
- /// must also be set in the SpatialReferences in the XML. These do not default.
- /// See the samlples\XMLsamples\FC_GCS_LineMin.xml for an example. Domain definitions in the table XML definition
- /// will be ignored. Use Table.AlterField to assign a domain. <br/>
- /// If the table already exists, a -2147220653 (The table already exists) error will be returned.<br/>
- /// If the table name is missing from the XML, a -2147220654 (The table name is invalid) error will be returned.<br/>
- /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
- /// <br><a href="Table.xml">XML-Table</a><br><a href="FC_GCS_Line.xml">XML-Feature Class</a>
- /// <br><a href="FC_GCS_LineMin.xml">XML-Feature Class with the minimum spatial reference definition</a>
- /// <br><a href="FeatureClassInAFeatureDataset.xml">XML-Feature Class to be created in a feature dataset</a>
- /// @param[in] tableDef The XML definition of the table to be created.
- /// @param[in] parent The location where the table will be created. Pass an empty string if you want to
- /// create a table or feature class at the root. If you want to create a feature class in an existing feature
- /// dataset use the path "\USA".
- /// @param[out] table An Table instance for the newly created table.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError CreateTable(const std::string& tableDef, const std::wstring& parent, Table& table);
-
- /// Opens a table. This can also be used to open attributed and M:N relationship class tables.
- /// If the table does not exist, a -2147220655 (The table was not found) error will be returned.
- /// Attempting to open a compressed file is not supported and a -2147220109 (FileGDB compression is
- /// not installed.) error will be returned.
- /// @param[in] path The path of the table to open. Opening a table or feature class at
- /// the root make sure to include "\". If opening a feature class in a feature dataset include
- /// the feature dataset name in the path "\USA\counties".
- /// @param[out] table An Table instance for the opened table.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError OpenTable(const std::wstring& path, Table& table);
-
- /// Closes a table that has been previously created or opened.
- /// @param[in] table The table to close.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError CloseTable(Table& table);
-
- /// Renames a dataset.
- /// @param[in] path The path of the dataset, e.g. "\Landbase\Parcels".
- /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
- /// @param[in] newName The name to apply to the dataset, e.g. "Parcels2".
- /// @return Error code indicating whether the method finished successfully.
- fgdbError Rename(const std::wstring& path, const std::wstring& datasetType, const std::wstring& newName);
-
- /// Moves a dataset from one container to another.
- /// @param[in] path The path of the dataset to move, e.g. "\Landbase\Parcels".
- /// @param[in] newParentPath The path of the container the dataset will be moved to, e.g. "\LandUse".
- /// @return Error code indicating whether the method finished successfully.
- fgdbError Move(const std::wstring& path, const std::wstring& newParentPath);
-
- /// Deletes a dataset.
- /// If a the dataset does not exist, this will fail with an error code of -2147219118 (A requested row object could not be located).<br/>
- /// If you do not have delete access to the dataset, this will fail with an error code of E_FAIL.<br/>
- /// @param[in] path The path of the dataset to delete, e.g. "\Owners".
- /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
- /// @return Error code indicating whether the method finished successfully.
- fgdbError Delete(const std::wstring& path, const std::wstring& datasetType);
- //@}
-
- /// @name Domains
- //@{
-
- /// Gets the names of all domains, if any.
- /// @param[out] domainNames The domains.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetDomains(std::vector<std::wstring>& domainNames) const;
-
- /// Creates a domain.
- /// If the XML is not UTF-8, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
- /// If the domain name already exists, a -2147209212 (Domain name already in use) error will be returned.<br/>
- /// <a href="CodedValueDomain.xml">XML - Coded Value Domain</a> <a href="RangeDomain.xml">XML - Range Domain</a>
- /// @param[in] domainDef The XML definition of the domain to be created.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError CreateDomain(const std::string& domainDef);
-
- /// Modifies the properties of an existing domain.
- /// If the XML is not UTF-8, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
- /// @param[in] domainDef The modified XML definition of the domain.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError AlterDomain(const std::string& domainDef);
-
- /// Deletes the specified domain.
- ///If the domain does not exist, this will fail with an error code of -2147209215 (The domain was not found).<br/>
- /// @param[in] domainName The name of the domain to delete.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError DeleteDomain(const std::wstring& domainName);
-
- /// Gets the definition of the specified domain.
- /// @param[in] domainName The name of the domain.
- /// @param[out] domainDef The XML definition of the domain.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetDomainDefinition(const std::wstring& domainName, std::string& domainDef) const;
- //@}
-
- /// @name SQL
- //@{
- /// Gets the query name (the name to use in SQL statements) of a table based on its path.
- /// @param[in] path The path of the dataset that will be queried.
- /// @param[out] queryName The name that should be used for the table in SQL statements.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError GetQueryName(const std::wstring& path, std::wstring& queryName) const;
-
- /// Executes a SQL statement on the geodatabase. This may or may not return a result set.
- /// If the SQL statement is invalid, an -2147220985 (An invalid SQL statement was used) error will be returned.<br/>
- /// @param[in] sqlStmt The SQL statement to be executed.
- /// @param[in] recycling Indicates whether the row enumerator should recycle memory.
- /// @param[out] rows An enumerator of rows or a null value.
- /// @return Error code indicating whether the method finished successfully.
- fgdbError ExecuteSQL(const std::wstring& sqlStmt, bool recycling, EnumRows& rows) const;
- //@}
-
- /// @name Constructors and Destructors
- //@{
- /// The class constructor.
- Geodatabase();
-
- /// The class destructor.
- ~Geodatabase();
- //@}
-
-private:
-
- /// @cond PRIVATE
- fgdbError CreateGeodatabase(const std::wstring& path);
- fgdbError OpenGeodatabase(const std::wstring& path);
- fgdbError CloseGeodatabase();
- fgdbError DeleteGeodatabase();
-
- bool IsSetup() const;
-
- Catalog* m_pCatalog;
-
-#pragma warning(push)
-#pragma warning(disable : 4251)
-
- std::map<Table*, Table*> m_tableROT;
-
-#pragma warning(pop)
-
- friend EXT_FILEGDB_API fgdbError CreateGeodatabase(const std::wstring& path, Geodatabase& geodatabase);
- friend EXT_FILEGDB_API fgdbError OpenGeodatabase(const std::wstring& path, Geodatabase& geodatabase);
- friend EXT_FILEGDB_API fgdbError CloseGeodatabase(Geodatabase& geodatabase);
- friend EXT_FILEGDB_API fgdbError DeleteGeodatabase(const std::wstring& path);
-
- friend class Table;
-
- Geodatabase(const Geodatabase&) { }
- Geodatabase& operator=(const Geodatabase&) { return *this; }
- /// @endcond
-};
-
-}; // namespace FileGDBAPI
+//
+// Geodatabase.h
+//
+
+/*
+ COPYRIGHT © 2015 ESRI
+ TRADE SECRETS: ESRI PROPRIETARY AND CONFIDENTIAL
+ Unpublished material - all rights reserved under the
+ Copyright Laws of the United States and applicable international
+ laws, treaties, and conventions.
+
+ For additional information, contact:
+ Environmental Systems Research Institute, Inc.
+ Attn: Contracts and Legal Services Department
+ 380 New York Street
+ Redlands, California, 92373
+ USA
+
+ email: contracts@esri.com
+*/
+
+/// A set of functions for opening, querying, creating, listing and deleting file geodatabase data.
+/// @file Geodatabase.h
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <map>
+
+#ifndef EXPORT_FILEGDB_API
+# if defined linux || defined __APPLE__
+# define EXT_FILEGDB_API
+# else
+# define EXT_FILEGDB_API _declspec(dllimport)
+# endif
+#else
+# if defined linux || defined __APPLE__
+# define EXT_FILEGDB_API __attribute__((visibility("default")))
+# else
+# define EXT_FILEGDB_API _declspec(dllexport)
+# endif
+#endif
+
+#include "FileGDBCore.h"
+
+class Catalog;
+class CatalogRef;
+
+namespace FileGDBAPI
+{
+
+class EnumRows;
+class Row;
+class Table;
+class FieldDef;
+class SpatialReference;
+
+/// A class representing a File Geodatabase.
+class EXT_FILEGDB_API Geodatabase
+{
+public:
+
+ /// @name Schema browsing
+ //@{
+ /// Gets a list of the dataset types in the geodatabase.
+ /// @param[out] datasetTypes The dataset types in the geodatabase.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetDatasetTypes(std::vector<std::wstring>& datasetTypes) const;
+
+ /// Gets a list of relationship types in the geodatabase.
+ /// @param[out] relationshipTypes The relationship types in the geodatabase.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetDatasetRelationshipTypes(std::vector<std::wstring>& relationshipTypes) const;
+
+ /// Gets the child datasets for a particular dataset, if any.
+ /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
+ /// @param[in] parentPath The dataset to find the children of, e.g. "\usa".
+ /// @param[in] datasetType The child dataset type as a wstring, e.g. "Feature Class". Passing in
+ /// an empty string will return all child datasets. <a href="ItemTypes.txt">DatasetType</a>
+ /// @param[out] childDatasets The children of the parent dataset, if any.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetChildDatasets(const std::wstring& parentPath, const std::wstring& datasetType, std::vector<std::wstring>& childDatasets) const;
+
+ /// Gets the related datasets for a particular dataset, if any.
+ /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
+ /// @param[in] path The path of the dataset to find related datasets for, e.g. "\usa\streets_topology".
+ /// @param[in] relType The relationship type to filter return values with, e.g. "DatasetInFeatureDataset". Passing in
+ /// an empty string will return all related datasets. <a href="RelationshipTypes.txt">RelationshipType</a>
+ /// @param[in] datasetType The type of the dataset to find related datasets for. <a href="ItemTypes.txt">DatasetType</a>
+ /// @param[out] relatedDatasets The origin dataset's related datasets, if any.
+ /// @result Error code indicating whether the method finished successfully.
+ fgdbError GetRelatedDatasets(const std::wstring& path, const std::wstring& relType, const std::wstring& datasetType, std::vector<std::wstring>& relatedDatasets) const;
+ //@}
+
+ /// @name Schema definition
+ //@{
+ /// Gets the definition of a dataset as an XML document.
+ /// If the dataset does not exist, this will fail with an error code of -2147220655 (The table was not found).
+ /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
+ /// @param[in] path The requested dataset's path. e.g. "\usa\city_anno"
+ /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
+ /// @param[out] datasetDef The dataset's definition as an XML document.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetDatasetDefinition(const std::wstring& path, const std::wstring& datasetType, std::string& datasetDef) const;
+
+ /// Gets the definitions of child datasets as a collection of XML documents.
+ /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
+ /// @param[in] parentPath The parent dataset's path, e.g. "\usa".
+ /// @param[in] datasetType The parent dataset's type as a string, e.g. "Feature Dataset". Passing in
+ /// an empty string will return all child datasets. <a href="ItemTypes.txt">DatasetType</a>
+ /// @param[out] childDatasetDefs A collection of child dataset definitions, if any.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetChildDatasetDefinitions(const std::wstring& parentPath, const std::wstring& datasetType, std::vector<std::string>& childDatasetDefs) const;
+
+ /// Gets the definitions of related datasets as a collection of XML documents.
+ /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
+ /// @param[in] path The origin dataset's path, e.g. "\usa\streets_topology"
+ /// @param[in] relType The relationship type to filter return values with, e.g. "DatasetInFeatureDataset". <a href="RelationshipTypes.txt">RelationshipType</a>
+ /// @param[in] datasetType The origin dataset's type as a string, e.g. "Relationship Class". Passing in
+ /// an empty string will return all related datasets. <a href="ItemTypes.txt">DatasetType</a>
+ /// @param[out] relatedDatasetDefs A collection of related dataset definitions, if any.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetRelatedDatasetDefinitions(const std::wstring& path, const std::wstring& relType, const std::wstring& datasetType, std::vector<std::string>& relatedDatasetDefs) const;
+
+ /// Gets the metadata of a dataset as XML.
+ /// If a non-existent path is provided, a -2147211775 (The item was not found) error will be returned.
+ /// @param[in] path The requested dataset's path. e.g. "\address_list"
+ /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
+ /// @param[out] documentation The dataset's metadata as XML.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetDatasetDocumentation(const std::wstring& path, const std::wstring& datasetType, std::string& documentation) const;
+ //@}
+
+ /// @name Datasets
+ //@{
+ /// Creates a new feature dataset.
+ /// If the feature dataset already exists, a -2147220733 (The dataset already exists) error will be returned.<br/>
+ /// If the feature dataset name is missing from the XML, a -2147220645 (INVALID_NAME) error will be returned.<br/>
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
+ /// <a href="FeatureDataset.xml">XML</a>
+ ///
+ /// @param[in] featureDatasetDef The XML definition of the feature dataset to be created.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError CreateFeatureDataset(const std::string& featureDatasetDef);
+
+ /// Creates a new feature dataset.
+ /// If the feature dataset already exists, a -2147220733 (The dataset already exists) error will be returned.<br/>
+ /// @param[in] path The name of the feature dataset to be created.
+ /// @param[in] spatialReference The spatial reference of the feature dataset to be created.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError CreateFeatureDataset(const std::wstring& path, const SpatialReference& spatialReference);
+
+ /// Creates a new table. This can either be a table or a feature class. If a geometry is to support Zs or Ms (measures), HasZ
+ /// and or HasM must be set to true in the GeometryDef in the XML. The ZOrigin, MOrigin, ZScale and MScale
+ /// must also be set in the SpatialReferences in the XML. These do not default.
+ /// See the samples\XMLsamples\FC_GCS_LineMin.xml for an example. Domain definitions in the table XML definition
+ /// will be ignored. Use Table.AlterField to assign a domain.
+ /// If the table already exists, a -2147220653 (The table already exists) error will be returned.<br/>
+ /// If the table name is missing from the XML, a -2147220654 (The table name is invalid) error will be returned.<br/>
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
+ /// <a href="Table.xml">XML-Table</a><a href="FC_GCS_Line.xml">XML-Feature Class</a>
+ /// <a href="FC_GCS_LineMin.xml">XML-Feature Class with the minimum spatial reference definition</a>
+ /// <a href="FeatureClassInAFeatureDataset.xml">XML-Feature Class to be created in a feature dataset</a>
+ /// @param[in] tableDef The XML definition of the table to be created.
+ /// @param[in] parent The location where the table will be created. Pass an empty string if you want to
+ /// create a table or feature class at the root. If you want to create a feature class in an existing feature
+ /// dataset use the path "\USA".
+ /// @param[out] table A Table instance for the newly created table.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError CreateTable(const std::string& tableDef, const std::wstring& parent, Table& table);
+
+ /// @param[in] path The path of the table to create. If creating a table or feature class at
+ /// the root make sure to include "\". If creating a feature class in a feature dataset include
+ /// the feature dataset name in the path "\USA\counties".
+ /// @param[in] fieldDefs The field definitions of the table to be created.
+ /// @param[in] configurationKeyword The configuration keyword of the table to be created.
+ /// If a empty string or unknown keyword is entered, the DEFAULTS keyword is used.
+ /// <a href="Keywords.html">Configuration Keywords</a>
+ /// @param[out] table A Table instance for the newly created table.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError CreateTable(const std::wstring& path, const std::vector<FieldDef>& fieldDefs, const std::wstring& configurationKeyword, Table& table);
+
+ /// Opens a table. This can also be used to open attributed and M:N relationship class tables.
+ /// If the table does not exist, a -2147220655 (The table was not found) error will be returned.
+ /// Attempting to open a compressed file is not supported and a -2147220109 (FileGDB compression is
+ /// not installed.) error will be returned.
+ /// @param[in] path The path of the table to open. Opening a table or feature class at
+ /// the root make sure to include "\". If opening a feature class in a feature dataset include
+ /// the feature dataset name in the path "\USA\counties".
+ /// @param[out] table An Table instance for the opened table.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError OpenTable(const std::wstring& path, Table& table);
+
+ /// Closes a table that has been previously created or opened.
+ /// @param[in] table The table to close.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError CloseTable(Table& table);
+
+ /// Renames a dataset.
+ /// @param[in] path The path of the dataset, e.g. "\Landbase\Parcels".
+ /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
+ /// @param[in] newName The name to apply to the dataset, e.g. "Parcels2".
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError Rename(const std::wstring& path, const std::wstring& datasetType, const std::wstring& newName);
+
+ /// Moves a dataset from one container to another.
+ /// @param[in] path The path of the dataset to move, e.g. "\Landbase\Parcels".
+ /// @param[in] newParentPath The path of the container the dataset will be moved to, e.g. "\LandUse".
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError Move(const std::wstring& path, const std::wstring& newParentPath);
+
+ /// Deletes a dataset.
+ /// If a the dataset does not exist, this will fail with an error code of -2147219118 (A requested row object could not be located).<br/>
+ /// If you do not have delete access to the dataset, this will fail with an error code of E_FAIL.<br/>
+ /// @param[in] path The path of the dataset to delete, e.g. "\Owners".
+ /// @param[in] datasetType The requested dataset's type as a string, e.g. "Table". <a href="ItemTypes.txt">DatasetType</a>
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError Delete(const std::wstring& path, const std::wstring& datasetType);
+
+ /// Compacts the geodatabase.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError CompactDatabase();
+ //@}
+
+ /// @name Domains
+ //@{
+
+ /// Gets the names of all domains, if any.
+ /// @param[out] domainNames The domains.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetDomains(std::vector<std::wstring>& domainNames) const;
+
+ /// Creates a domain.
+ /// If the XML is not UTF-8, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
+ /// If the domain name already exists, a -2147209212 (Domain name already in use) error will be returned.<br/>
+ /// <a href="CodedValueDomain.xml">XML - Coded Value Domain</a> <a href="RangeDomain.xml">XML - Range Domain</a>
+ /// @param[in] domainDef The XML definition of the domain to be created.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError CreateDomain(const std::string& domainDef);
+
+ /// Modifies the properties of an existing domain.
+ /// If the XML is not UTF-8, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
+ /// @param[in] domainDef The modified XML definition of the domain.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError AlterDomain(const std::string& domainDef);
+
+ /// Deletes the specified domain.
+ ///If the domain does not exist, this will fail with an error code of -2147209215 (The domain was not found).<br/>
+ /// @param[in] domainName The name of the domain to delete.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError DeleteDomain(const std::wstring& domainName);
+
+ /// Gets the definition of the specified domain.
+ /// @param[in] domainName The name of the domain.
+ /// @param[out] domainDef The XML definition of the domain.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetDomainDefinition(const std::wstring& domainName, std::string& domainDef) const;
+ //@}
+
+ /// @name SQL
+ //@{
+ /// Gets the query name (the name to use in SQL statements) of a table based on its path.
+ /// @param[in] path The path of the dataset that will be queried.
+ /// @param[out] queryName The name that should be used for the table in SQL statements.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError GetQueryName(const std::wstring& path, std::wstring& queryName) const;
+
+ /// Executes a SQL statement on the geodatabase. This may or may not return a result set.
+ /// A DELETE without a WHERE clause will result in a truncate.
+ /// If the SQL statement is invalid, an -2147220985 (An invalid SQL statement was used) error will be returned.<br/>
+ /// @param[in] sqlStmt The SQL statement to be executed.
+ /// @param[in] recycling Indicates whether the row enumerator should recycle memory.
+ /// @param[out] rows An enumerator of rows or a null value.
+ /// @return Error code indicating whether the method finished successfully.
+ fgdbError ExecuteSQL(const std::wstring& sqlStmt, bool recycling, EnumRows& rows) const;
+ //@}
+
+ /// @name Constructors and Destructors
+ //@{
+ /// The class constructor.
+ Geodatabase();
+
+ /// The class destructor.
+ ~Geodatabase();
+ //@}
+
+private:
+
+ /// @cond PRIVATE
+ fgdbError CreateGeodatabase(const std::wstring& path);
+ fgdbError OpenGeodatabase(const std::wstring& path);
+ fgdbError CloseGeodatabase();
+ fgdbError DeleteGeodatabase();
+
+ bool IsSetup() const;
+
+ Catalog* m_pCatalog;
+
+#pragma warning(push)
+#pragma warning(disable : 4251)
+
+ std::map<Table*, Table*> m_tableROT;
+
+#pragma warning(pop)
+
+ friend EXT_FILEGDB_API fgdbError CreateGeodatabase(const std::wstring& path, Geodatabase& geodatabase);
+ friend EXT_FILEGDB_API fgdbError OpenGeodatabase(const std::wstring& path, Geodatabase& geodatabase);
+ friend EXT_FILEGDB_API fgdbError CloseGeodatabase(Geodatabase& geodatabase);
+ friend EXT_FILEGDB_API fgdbError DeleteGeodatabase(const std::wstring& path);
+
+ friend class Table;
+
+ Geodatabase(const Geodatabase&) { }
+ Geodatabase& operator=(const Geodatabase&) { return *this; }
+ /// @endcond
+};
+
+}; // namespace FileGDBAPI