filegdb 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +28 -0
  6. data/Makefile +12 -0
  7. data/README.md +27 -0
  8. data/Rakefile +24 -0
  9. data/ext/filegdb/base.hpp +126 -0
  10. data/ext/filegdb/extconf.rb +13 -0
  11. data/ext/filegdb/filegdb.cpp +27 -0
  12. data/ext/filegdb/filegdb.hpp +44 -0
  13. data/ext/filegdb/filegdb/include/FileGDBAPI.h +30 -0
  14. data/ext/filegdb/filegdb/include/FileGDBCore.h +226 -0
  15. data/ext/filegdb/filegdb/include/Geodatabase.h +291 -0
  16. data/ext/filegdb/filegdb/include/GeodatabaseManagement.h +79 -0
  17. data/ext/filegdb/filegdb/include/Raster.h +101 -0
  18. data/ext/filegdb/filegdb/include/Row.h +336 -0
  19. data/ext/filegdb/filegdb/include/Table.h +296 -0
  20. data/ext/filegdb/filegdb/include/Util.h +936 -0
  21. data/ext/filegdb/filegdb/include/make.include +98 -0
  22. data/ext/filegdb/filegdb/lib/libFileGDBAPI.dylib +0 -0
  23. data/ext/filegdb/filegdb/lib/libFileGDBAPI.so +0 -0
  24. data/ext/filegdb/filegdb/lib/libfgdbunixrtl.dylib +0 -0
  25. data/ext/filegdb/filegdb/lib/libfgdbunixrtl.so +0 -0
  26. data/ext/filegdb/geodatabase.cpp +529 -0
  27. data/ext/filegdb/geodatabase.hpp +53 -0
  28. data/ext/filegdb/multi_point_shape_buffer.cpp +254 -0
  29. data/ext/filegdb/multi_point_shape_buffer.hpp +35 -0
  30. data/ext/filegdb/point.cpp +44 -0
  31. data/ext/filegdb/point.hpp +31 -0
  32. data/ext/filegdb/point_shape_buffer.cpp +162 -0
  33. data/ext/filegdb/point_shape_buffer.hpp +32 -0
  34. data/ext/filegdb/row.cpp +222 -0
  35. data/ext/filegdb/row.hpp +37 -0
  36. data/ext/filegdb/shape_buffer.cpp +19 -0
  37. data/ext/filegdb/shape_buffer.hpp +20 -0
  38. data/ext/filegdb/shape_buffer_base.hpp +33 -0
  39. data/ext/filegdb/table.cpp +65 -0
  40. data/ext/filegdb/table.hpp +29 -0
  41. data/ext/filegdb/util.cpp +16 -0
  42. data/filegdb.gemspec +23 -0
  43. data/lib/filegdb.rb +2 -0
  44. data/lib/filegdb/version.rb +3 -0
  45. data/spec/data/domain_definition.xml +22 -0
  46. data/spec/data/domain_definition_altered.xml +26 -0
  47. data/spec/data/feature_dataset_definition.xml +25 -0
  48. data/spec/data/table_definition.xml +177 -0
  49. data/spec/filegdb_spec.rb +36 -0
  50. data/spec/geodatabase_spec.rb +107 -0
  51. data/spec/multi_point_shape_buffer_spec.rb +58 -0
  52. data/spec/point_shape_buffer_spec.rb +39 -0
  53. data/spec/row_spec.rb +76 -0
  54. data/spec/spec_helper.rb +41 -0
  55. metadata +153 -0
@@ -0,0 +1,336 @@
1
+ //
2
+ // Row.h
3
+ //
4
+
5
+ /*
6
+ COPYRIGHT � 2012 ESRI
7
+ TRADE SECRETS: ESRI PROPRIETARY AND CONFIDENTIAL
8
+ Unpublished material - all rights reserved under the
9
+ Copyright Laws of the United States and applicable international
10
+ laws, treaties, and conventions.
11
+
12
+ For additional information, contact:
13
+ Environmental Systems Research Institute, Inc.
14
+ Attn: Contracts and Legal Services Department
15
+ 380 New York Street
16
+ Redlands, California, 92373
17
+ USA
18
+
19
+ email: contracts@esri.com
20
+ */
21
+
22
+ #pragma once
23
+
24
+ #include <string>
25
+ #include <vector>
26
+
27
+ #ifndef EXPORT_FILEGDB_API
28
+ # if defined linux || defined __APPLE__
29
+ # define EXT_FILEGDB_API
30
+ # else
31
+ # define EXT_FILEGDB_API _declspec(dllimport)
32
+ # endif
33
+ #else
34
+ # if defined linux || defined __APPLE__
35
+ # define EXT_FILEGDB_API __attribute__((visibility("default")))
36
+ # else
37
+ # define EXT_FILEGDB_API _declspec(dllexport)
38
+ # endif
39
+ #endif
40
+
41
+ #include "FileGDBCore.h"
42
+
43
+ struct IFields;
44
+ struct FieldValue;
45
+ class FieldValues;
46
+
47
+ namespace FileGDBAPI
48
+ {
49
+
50
+ class ShapeBuffer;
51
+ class ByteArray;
52
+ class Raster;
53
+ class EnumRows;
54
+ class FieldInfo;
55
+ class FieldDef;
56
+ class Guid;
57
+
58
+ /// Provides methods to get and set data on table rows.
59
+ class EXT_FILEGDB_API Row
60
+ {
61
+ public:
62
+
63
+ /// @name Getters and setters
64
+ //@{
65
+ /// Indicates whether the specified field contains a null value.
66
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field
67
+ /// was not found or could not be retrieved properly).
68
+ /// @param[in] field The field to check for a null value.
69
+ /// @param[out] isNull Indicates whether the specified field contains a null value.
70
+ /// @return Error code indicating whether the method finished successfully.
71
+ fgdbError IsNull(const std::wstring& field, bool& isNull) const;
72
+
73
+ /// Assigns a null value to the specified field.
74
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not
75
+ /// found or could not be retrieved properly).
76
+ /// If the field is not nullable, this will fail with an error code of -2147219879 (The field is not nullable).
77
+ /// @param[in] field The field to set as null.
78
+ /// @return Error code indicating whether the method finished successfully.
79
+ fgdbError SetNull(const std::wstring& field);
80
+
81
+ /// Gets the row's Object ID.
82
+ /// If the row's table does not have an Object ID column, this will fail with an error code of -2147219885
83
+ /// (An expected Field was not found or could not be retrieved properly).
84
+ /// @param[out] objectID The row's Object ID.
85
+ /// @return Error code indicating whether the method finished successfully.
86
+ fgdbError GetOID(int32& objectID) const;
87
+
88
+ /// Gets the row's Global ID.
89
+ /// If the row's table does not have an Global ID column, this will fail with an error code of -2147219885
90
+ /// (An expected Field was not found or could not be retrieved properly).
91
+ /// @param[out] globalID The row's Global ID.
92
+ /// @return Error code indicating whether the method finished successfully.
93
+ fgdbError GetGlobalID(Guid& globalID) const;
94
+
95
+ /// Gets the row's geometry. The buffer is a shape record as defined in the ESRI Shapefile Technical
96
+ /// Description, which is included in the documentation. The Editing and Querying samples write and
97
+ /// read a point shape buffer. Other shape types can be read based on the shapefile specification.
98
+ /// If the row's table does not have a geometry column, this will fail with an error code of -2147219885
99
+ /// (An expected Field was not found or could not be retrieved properly).
100
+ /// @param[out] shapeBuffer The row's geometry.
101
+ /// @return Error code indicating whether the method finished successfully.
102
+ fgdbError GetGeometry(ShapeBuffer& shapeBuffer) const;
103
+
104
+ /// Sets the row's geometry. The buffer is a shape record as defined in the ESRI Shapefile Technical
105
+ /// Description, which is included in the documentation. The Editing and Querying samples write and
106
+ /// read a point shape buffer. If the row's table does not have a geometry column, this will fail with
107
+ /// an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
108
+ /// If the geometry has an invalid geometry type, this will fail with an error code of E_FAIL.
109
+ /// @param[in] shapeBuffer The geometry to assign to the row.
110
+ /// @return Error code indicating whether the method finished successfully.
111
+ fgdbError SetGeometry(const ShapeBuffer& shapeBuffer);
112
+
113
+ /// Gets a short value from the specified field.
114
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
115
+ /// If the field is has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
116
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
117
+ /// @param[in] field The name of the field to get the value from.
118
+ /// @param[out] value The field's value.
119
+ /// @return Error code indicating whether the method finished successfully.
120
+ fgdbError GetShort(const std::wstring& field, short& value) const;
121
+
122
+ /// Assigns a short value to the specified field.
123
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
124
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
125
+ /// @param[in] field The name of the field to assign the value to.
126
+ /// @param[out] value The value to assign to the field.
127
+ /// @return Error code indicating whether the method finished successfully.
128
+ fgdbError SetShort(const std::wstring& field, short value);
129
+
130
+ /// Gets an integer value from the specified field.
131
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
132
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
133
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
134
+ /// @param[in] field The name of the field to get the value from.
135
+ /// @param[out] value The field's value.
136
+ /// @return Error code indicating whether the method finished successfully.
137
+ fgdbError GetInteger(const std::wstring& field, int32& value) const;
138
+
139
+ /// Assigns an integer value to the specified field.
140
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
141
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
142
+ /// @param[in] field The name of the field to assign the value to.
143
+ /// @param[in] value The value to assign to the field.
144
+ /// @return Error code indicating whether the method finished successfully.
145
+ fgdbError SetInteger(const std::wstring& field, int32 value);
146
+
147
+ /// Gets a float value from the specified field.
148
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
149
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
150
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
151
+ /// @param[in] field The name of the field to get the value from.
152
+ /// @param[out] value The field's value.
153
+ /// @return Error code indicating whether the method finished successfully.
154
+ fgdbError GetFloat(const std::wstring& field, float& value) const;
155
+
156
+ /// Assigns a float value to the specified field.
157
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
158
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
159
+ /// @param[in] field The name of the field to assign the value to.
160
+ /// @param[in] value The value to assign to the field.
161
+ /// @return Error code indicating whether the method finished successfully.
162
+ fgdbError SetFloat(const std::wstring& field, float value);
163
+
164
+ /// Gets a double value from the specified field.
165
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
166
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
167
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
168
+ /// @param[in] field The name of the field to get the value from.
169
+ /// @param[out] value The field's value.
170
+ /// @return Error code indicating whether the method finished successfully.
171
+ fgdbError GetDouble(const std::wstring& field, double& value) const;
172
+
173
+ /// Assigns a double value to the specified field.
174
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
175
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
176
+ /// @param[in] field The name of the field to assign the value to.
177
+ /// @param[in] value The value to assign to the field.
178
+ /// @return Error code indicating whether the method finished successfully.
179
+ fgdbError SetDouble(const std::wstring& field, double value);
180
+
181
+ /// Gets a date/time value from the specified field.
182
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
183
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
184
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
185
+ /// @param[in] field The name of the field to get the value from.
186
+ /// @param[out] value The field's value.
187
+ /// @return Error code indicating whether the method finished successfully.
188
+ fgdbError GetDate(const std::wstring& field, struct tm& value) const;
189
+
190
+ /// Assigns a date/time value to the specified field.
191
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
192
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
193
+ /// @param[in] field The name of the field to get the value from.
194
+ /// @param[in] value The value to assign to the field.
195
+ /// @return Error code indicating whether the method finished successfully.
196
+ fgdbError SetDate(const std::wstring& field, const struct tm& value);
197
+
198
+ /// Gets a string value from the specified field.
199
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
200
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
201
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
202
+ /// @param[in] field The name of the field to get the value from.
203
+ /// @param[out] value The field's value.
204
+ /// @return Error code indicating whether the method finished successfully.
205
+ fgdbError GetString(const std::wstring& field, std::wstring& value) const;
206
+
207
+ /// Assigns a string value to the specified field.
208
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
209
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
210
+ /// @param[in] field The name of the field to assign the value to.
211
+ /// @param[in] value The value to assign to the field.
212
+ /// @return Error code indicating whether the method finished successfully.
213
+ fgdbError SetString(const std::wstring& field, const std::wstring& value);
214
+
215
+ /// Gets a GUID value from the specified field.
216
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
217
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
218
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
219
+ /// @param[in] field The name of the field to get the value from.
220
+ /// @param[out] value The field's value.
221
+ /// @return Error code indicating whether the method finished successfully.
222
+ fgdbError GetGUID(const std::wstring& field, Guid& value) const;
223
+
224
+ /// Assigns a GUID value to the specified field.
225
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
226
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
227
+ /// @param[in] field The name of the field to assign the value to.
228
+ /// @param[in] value The value to assign to the field.
229
+ /// @return Error code indicating whether the method finished successfully.
230
+ fgdbError SetGUID(const std::wstring& field, const Guid& value);
231
+
232
+ /// Gets an XML value from the specified field.
233
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
234
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
235
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
236
+ /// @param[in] field The name of the field to get the value from.
237
+ /// @param[out] value The field's value.
238
+ /// @return Error code indicating whether the method finished successfully.
239
+ fgdbError GetXML(const std::wstring& field, std::string& value) const;
240
+
241
+ /// Assigns an XML value to the specified field.
242
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
243
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
244
+ /// @param[in] field The name of the field to assign the value to.
245
+ /// @param[in] value The value to assign to the field.
246
+ /// @return Error code indicating whether the method finished successfully.
247
+ fgdbError SetXML(const std::wstring& field, const std::string& value);
248
+
249
+ /// Gets a raster from the specified field.
250
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
251
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
252
+ /// @param[in] field The name of the field to get the value from.
253
+ /// @param[out] raster The field's value.
254
+ /// @return Error code indicating whether the method finished successfully.
255
+ fgdbError GetRaster(const std::wstring& field, Raster& raster) const;
256
+
257
+ /// Assigns a raster to the specified field.
258
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
259
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
260
+ /// @param[in] field The name of the field to assign the value to.
261
+ /// @param[in] raster The value to assign to the field.
262
+ /// @return Error code indicating whether the method finished successfully.
263
+ fgdbError SetRaster(const std::wstring& field, const Raster& raster);
264
+
265
+ /// Gets a byte array from the specified field.
266
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
267
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
268
+ /// If the field contains a null value, this will fail with an error code of E_FAIL.
269
+ /// @param[in] field The name of the field to get the value from.
270
+ /// @param[out] binaryBuf The field's value.
271
+ /// @return Error code indicating whether the method finished successfully.
272
+ fgdbError GetBinary(const std::wstring& field, ByteArray& binaryBuf) const;
273
+
274
+ /// Assigns a byte array to the specified field.
275
+ /// If the field does not exist, this will fail with an error code of -2147219885 (An expected Field was not found or could not be retrieved properly).
276
+ /// If the field has an incompatible data type, this will fail with an error code of -2147217395 (The value type is incompatible with the field type).
277
+ /// @param[in] field The name of the field to assign the value to.
278
+ /// @param[in] binaryBuf The value to assign to the field.
279
+ /// @return Error code indicating whether the method finished successfully.
280
+ fgdbError SetBinary(const std::wstring& field, const ByteArray& binaryBuf);
281
+ //@}
282
+
283
+ /// @name Field properties
284
+ //@{
285
+ /// Return information about the fields in the row.
286
+ /// @param[out] fieldInfo The field information.
287
+ /// @return Error code indicating whether the method finished successfully.
288
+ fgdbError GetFieldInformation(FieldInfo& fieldInfo) const;
289
+
290
+ /// Returns an array of FieldDef objects of the table's field collection.
291
+ /// @param[out] fieldDefs An array of FieldDef objects containing a collection of field definitions.
292
+ /// @return Error code indicating whether the method finished successfully.
293
+ fgdbError GetFields(std::vector<FieldDef>& fieldDefs) const;
294
+ //@}
295
+
296
+ /// @name Constructors and Destructors
297
+ //@{
298
+ /// The class constructor.
299
+ Row();
300
+
301
+ /// The class destructor.
302
+ ~Row();
303
+ //@}
304
+
305
+ private:
306
+
307
+ /// @cond PRIVATE
308
+ fgdbError SetupRow(IFields* pFields, FieldValues* pFieldValues, bool takeOwnership);
309
+ bool IsSetup() const;
310
+
311
+ fgdbError FindField(const std::wstring& field, int& fieldNumber, FieldType& fieldType) const;
312
+ fgdbError GetFieldIsNullable(int fieldNumber, bool& isNullable) const;
313
+
314
+ fgdbError SetOID(int32 objectID);
315
+ fgdbError SetGlobalID(const Guid& globalID);
316
+
317
+ int m_numFields;
318
+ int* m_pFieldMap;
319
+ FieldValue* m_pValues;
320
+ int m_oidFieldNumber;
321
+ int m_globalIDFieldNumber;
322
+ int m_shpFieldNumber;
323
+ IFields* m_pFields;
324
+
325
+ FieldValues* m_pFieldValues;
326
+ bool m_ownsFieldValues;
327
+
328
+ friend class EnumRows;
329
+ friend class Table;
330
+
331
+ Row(const Row&) { }
332
+ Row& operator=(const Row&) { return *this; }
333
+ /// @endcond
334
+ };
335
+
336
+ }; // namespace FileGDBAPI
@@ -0,0 +1,296 @@
1
+ //
2
+ // Table.h
3
+ //
4
+
5
+ /*
6
+ COPYRIGHT � 2012 ESRI
7
+ TRADE SECRETS: ESRI PROPRIETARY AND CONFIDENTIAL
8
+ Unpublished material - all rights reserved under the
9
+ Copyright Laws of the United States and applicable international
10
+ laws, treaties, and conventions.
11
+
12
+ For additional information, contact:
13
+ Environmental Systems Research Institute, Inc.
14
+ Attn: Contracts and Legal Services Department
15
+ 380 New York Street
16
+ Redlands, California, 92373
17
+ USA
18
+
19
+ email: contracts@esri.com
20
+ */
21
+
22
+ #pragma once
23
+
24
+ #include <string>
25
+ #include <vector>
26
+
27
+ #ifndef EXPORT_FILEGDB_API
28
+ # if defined linux || defined __APPLE__
29
+ # define EXT_FILEGDB_API
30
+ # else
31
+ # define EXT_FILEGDB_API _declspec(dllimport)
32
+ # endif
33
+ #else
34
+ # if defined linux || defined __APPLE__
35
+ # define EXT_FILEGDB_API __attribute__((visibility("default")))
36
+ # else
37
+ # define EXT_FILEGDB_API _declspec(dllexport)
38
+ # endif
39
+ #endif
40
+
41
+ #include "FileGDBCore.h"
42
+
43
+ class Datafile;
44
+ class AutoLock;
45
+
46
+ namespace FileGDBAPI
47
+ {
48
+
49
+ class EnumRows;
50
+ class Envelope;
51
+ class Row;
52
+ class Geodatabase;
53
+ class FieldInfo;
54
+ class IndexDef;
55
+ class FieldDef;
56
+
57
+ /// Provides methods to work with tables, such as querying and modifying both schema and data.
58
+ class EXT_FILEGDB_API Table
59
+ {
60
+ public:
61
+
62
+ /// @name Schema
63
+ //@{
64
+ /// Gets the table's definition as an XML document.
65
+ /// @param[out] tableDef An XML document than defines the table's schema.
66
+ /// @return Error code indicating whether the method finished successfully.
67
+ fgdbError GetDefinition(std::string& tableDef) const;
68
+
69
+ /// Gets the table's metadata as XML.
70
+ /// @param[out] documentation The table's metadata as XML.
71
+ /// @return Error code indicating whether the method finished successfully.
72
+ fgdbError GetDocumentation(std::string& documentation) const;
73
+
74
+ /// Assigns metadata to the table.
75
+ /// @param[in] documentation An XML document that will be the table's metadata.
76
+ /// @return Error code indicating whether the method finished successfully.
77
+ fgdbError SetDocumentation(const std::string& documentation);
78
+
79
+ /// Return information about the fields in the table.
80
+ /// @param[out] fieldInfo The field information.
81
+ /// @return Error code indicating whether the method finished successfully.
82
+ fgdbError GetFieldInformation(FieldInfo& fieldInfo) const;
83
+
84
+ /// Returns an array of FieldDef objects of the table's field collection.
85
+ /// @param[out] fieldDefs An array of FieldDef objects containing a collection of field definitions.
86
+ /// @return Error code indicating whether the method finished successfully.
87
+ fgdbError GetFields(std::vector<FieldDef>& fieldDefs) const;
88
+
89
+ /// Adds a field to the table.
90
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
91
+ /// If you are adding an OBJECTID field and one already exists, a -2147219707 (The Fields collection contained multiple OID fields)
92
+ /// error will be returned. Only one OBJECTID field is allowed.<br/>
93
+ /// If you are adding an GLOBALID field and one already exists, a -2147219703 (The Fields collection contained multiple Global ID fields)
94
+ /// error will be returned. Only one GLOBALID field is allowed.<br/>
95
+ /// If you attempt to add a NOT NULLABLE field to a table already contains rows,
96
+ /// a -2147219879 (The field is not nullable) will be returned. <br/>
97
+ /// If the field already exists, a -2147219884 (The Field already exists) will be returned.<br/>
98
+ /// <a href="esriFieldTypes.txt">FieldTypes</a> <a href="Field.xml">XML</a>
99
+ /// @param[in] fieldDef An XML document defining the field's properties.
100
+ /// @return Error code indicating whether the method finished successfully.
101
+ fgdbError AddField(const std::string& fieldDef);
102
+
103
+ /// Adds a field to the table.
104
+ /// @param[in] fieldDef A FieldDef object defining the field's properties.
105
+ /// @return Error code indicating whether the method finished successfully.
106
+ fgdbError AddField(const FieldDef& fieldDef);
107
+
108
+ /// Modifies a field in the table.
109
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
110
+ /// @param[in] fieldDef An XML document defining the field's properties.
111
+ /// @return Error code indicating whether the method finished successfully.
112
+ fgdbError AlterField(const std::string& fieldDef);
113
+
114
+ /// Deletes a field from the table.
115
+ /// If the field does not exist, an -2147219885 (An expected Field was not found or could not be retrieved properly) error will be returned.<br/>
116
+ /// @param[in] fieldName The name of the field to delete.
117
+ /// @return Error code indicating whether the method finished successfully.
118
+ fgdbError DeleteField(const std::wstring& fieldName);
119
+
120
+ /// Returns an XML definition of the table's index collection.
121
+ /// @param[out] indexDefs An XML document containing a collection of index definitions.
122
+ /// @return Error code indicating whether the method finished successfully.
123
+ fgdbError GetIndexes(std::vector<std::string>& indexDefs) const;
124
+
125
+ /// Returns an array of IndexDef objects of the table's index collection.
126
+ /// @param[out] indexDefs An array of IndexDef objects containing a collection of index definitions.
127
+ /// @return Error code indicating whether the method finished successfully.
128
+ fgdbError GetIndexes(std::vector<IndexDef>& indexDefs) const;
129
+
130
+ /// Adds an index to the table.
131
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
132
+ /// <a href="Index.xml">XML</a>
133
+ /// @param[in] indexDef An XML document defining the index's properties.
134
+ /// @return Error code indicating whether the method finished successfully.
135
+ fgdbError AddIndex(const std::string& indexDef);
136
+
137
+ /// Adds an index to the table.
138
+ /// @param[in] indexDef An IndexDef object defining the index's properties.
139
+ /// @return Error code indicating whether the method finished successfully.
140
+ fgdbError AddIndex(const IndexDef& indexDef);
141
+
142
+ /// Deletes an index from the table.
143
+ /// If the index is not found, an -2147219629 (The index was not found) error will be returned.<br/>
144
+ /// @param[in] indexName The name of the index to delete.
145
+ /// @return Error code indicating whether the method finished successfully.
146
+ fgdbError DeleteIndex(const std::wstring& indexName);
147
+
148
+ /// Creates a new subtype to the table.
149
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
150
+ /// <a href="SubType.xml">XML</a>
151
+ /// @param[in] subtypeDef An XML document defining the subtype's properties.
152
+ /// @return Error code indicating whether the method finished successfully.
153
+ fgdbError CreateSubtype(const std::string& subtypeDef);
154
+
155
+ /// Modifies an existing subtype of the table.
156
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
157
+ /// @param[in] subtypeDef An XML document defining the subtype's properties.
158
+ /// @return Error code indicating whether the method finished successfully.
159
+ fgdbError AlterSubtype(const std::string& subtypeDef);
160
+
161
+ /// Deletes a subtype from the table.
162
+ /// @param[in] subtypeName The name of the subtype to delete.
163
+ /// @return Error code indicating whether the method finished successfully.
164
+ fgdbError DeleteSubtype(const std::wstring& subtypeName);
165
+
166
+ /// Enables subtypes on a table.
167
+ /// If the XML is not UTF-8 encoded, create will fail with an error code of -2147024809 (Invalid function arguments).<br/>
168
+ /// <a href="esriFieldTypes.txt">FieldTypes</a> <a href="Field.xml">XML</a>
169
+ /// @param[in] subtypeFieldName The field to use as the subtype field.
170
+ /// @param[in] subtypeDef The field to use as the subtype Def.
171
+ /// @return Error code indicating whether the method finished successfully.
172
+ fgdbError EnableSubtypes(const std::wstring& subtypeFieldName, const std::string& subtypeDef);
173
+
174
+ /// Returns the default subtype code.
175
+ /// @param[out] defaultCode The table's default subtype code.
176
+ /// @return Error code indicating whether the method finished successfully.
177
+ fgdbError GetDefaultSubtypeCode(int& defaultCode) const;
178
+
179
+ /// Sets the default subtype code.
180
+ /// @param[out] defaultCode The code to assign as the default subtype code.
181
+ /// @return Error code indicating whether the method finished successfully.
182
+ fgdbError SetDefaultSubtypeCode(int defaultCode);
183
+
184
+ /// Drops the table's subtypes.
185
+ /// @return Error code indicating whether the method finished successfully.
186
+ fgdbError DisableSubtypes();
187
+ //@}
188
+
189
+ /// @name Data
190
+ //@{
191
+ /// Performs a spatial query (envelope intersects) on the table.
192
+ /// @param[in] subfields (Optional) The fields that should be fetched by the query's returned rows. Must
193
+ /// include a comma delimited list of fields or a "*". Passing in blank will return a -2147220985 (An invalid SQL statement was used) error.
194
+ /// @param[in] whereClause (Optional) Attribute constraints to apply to the query.
195
+ /// @param[in] envelope The spatial extent of the query.
196
+ /// @param[in] recycling Indicates whether row memory should be recycled.
197
+ /// @param[out] rows The results of the query.
198
+ /// @return Error code indicating whether the method finished successfully.
199
+ fgdbError Search(const std::wstring& subfields, const std::wstring& whereClause, const Envelope& envelope, bool recycling, EnumRows& rows);
200
+
201
+ /// Performs an attribute query on the table.
202
+ /// @param[in] subfields (Optional) The fields that should be fetched by the query's returned rows. Must
203
+ /// include a comma delimited list of fields or a "*". A blank will return a -2147220985 (An invalid SQL statement was used) error.
204
+ /// @param[in] whereClause (Optional) Attribute constraints to apply to the query.
205
+ /// @param[in] recycling Indicates whether row memory should be recycled.
206
+ /// @param[out] rows The results of the query.
207
+ /// @return Error code indicating whether the method finished successfully.
208
+ fgdbError Search(const std::wstring& subfields, const std::wstring& whereClause, bool recycling, EnumRows& rows);
209
+
210
+ /// Creates a new row in memory for the table.
211
+ /// @param[out] row The newly-created row.
212
+ /// @return Error code indicating whether the method finished successfully.
213
+ fgdbError CreateRowObject(Row& row);
214
+
215
+ /// Inserts a newly-created and populated row into the table. When bulk inserting rows use LoadOnlyMode and SetWriteLock\FreeWriteLock to improve performance.
216
+ /// @param[in] row The row to insert.
217
+ /// @return Error code indicating whether the method finished successfully.
218
+ fgdbError Insert(Row& row);
219
+
220
+ /// Updates an existing row in the table.
221
+ /// @param[in] row The row to update.
222
+ /// @return Error code indicating whether the method finished successfully.
223
+ fgdbError Update(Row& row);
224
+
225
+ /// Deletes a row from the table.
226
+ /// @param[in] row The row to delete.
227
+ /// @return Error code indicating whether the method finished successfully.
228
+ fgdbError Delete(Row& row);
229
+
230
+ /// Indicates whether the table should be edited.
231
+ /// @param[out] isEditable True if the table can safely be edited.
232
+ /// @return Error code indicating whether the method finished successfully.
233
+ fgdbError IsEditable(bool& isEditable);
234
+
235
+ /// Returns the number of rows in the table.
236
+ /// @param[out] rowCount The number of rows in the table.
237
+ /// @return Error code indicating whether the method finished successfully.
238
+ fgdbError GetRowCount(int& rowCount) const;
239
+
240
+ /// Returns the extent of the feature class.
241
+ /// If the table is not a feature class an error of 1 will be returned.
242
+ /// @param[out] extent The extent of the feature class.
243
+ /// @return Error code indicating whether the method finished successfully.
244
+ fgdbError GetExtent(Envelope& extent) const;
245
+
246
+ /// Sets a write lock on a table.
247
+ /// This should be used when performing bulk updates and inserts. Otherwise a
248
+ /// lock will be created for each update or insert. Should be followed by a call
249
+ /// to FreeWriteLock.
250
+ fgdbError SetWriteLock(void);
251
+
252
+ /// Frees a write lock on a table.
253
+ /// This should be used when performing bulk updates and inserts. Otherwise a
254
+ /// lock will be created for each update or insert. Should be preceded by a call
255
+ /// to SetWriteLock.
256
+ fgdbError FreeWriteLock(void);
257
+
258
+ /// Begin or End load only mode.
259
+ /// @param[in] loadOnlyMode true to begin LoadOnlyMode, false to end.
260
+ fgdbError LoadOnlyMode(bool loadOnlyMode);
261
+ //@}
262
+
263
+ /// @name Constructors and destructors
264
+ //@{
265
+ /// The class constructor.
266
+ Table();
267
+
268
+ /// The class destructor.
269
+ ~Table();
270
+ //@}
271
+
272
+ private:
273
+
274
+ /// @cond PRIVATE
275
+ fgdbError SetupTable(const std::wstring& path, Geodatabase* pGeodatabase, Datafile* pDatafile);
276
+ bool IsSetup() const;
277
+
278
+ #pragma warning(push)
279
+ #pragma warning(disable : 4251)
280
+
281
+ Geodatabase* m_pGeodatabase;
282
+ Datafile* m_pDatafile;
283
+ std::wstring m_Path;
284
+ AutoLock* m_pWriteLock;
285
+ int m_isEditable;
286
+
287
+ #pragma warning(pop)
288
+
289
+ friend class Geodatabase;
290
+
291
+ Table(const Table&) { }
292
+ Table& operator=(const Table&) { return *this; }
293
+ /// @endcond
294
+ };
295
+
296
+ }; // namespace FileGDBAPI