Line data Source code
1 : /******************************************************************************
2 : *
3 : * Project: OpenGIS Simple Features Reference Implementation
4 : * Purpose: The generic portions of the GDALDataset class.
5 : * Author: Frank Warmerdam, warmerdam@pobox.com
6 : *
7 : ******************************************************************************
8 : * Copyright (c) 1999, Les Technologies SoftMap Inc.
9 : * Copyright (c) 2008-2014, Even Rouault <even dot rouault at spatialys.com>
10 : *
11 : * SPDX-License-Identifier: MIT
12 : ****************************************************************************/
13 :
14 : #include "ogrsf_frmts.h"
15 : #include "ogr_api.h"
16 : #include "ograpispy.h"
17 :
18 : /************************************************************************/
19 : /* ~OGRDataSource() */
20 : /************************************************************************/
21 :
22 0 : OGRDataSource::OGRDataSource()
23 : {
24 0 : }
25 :
26 : /************************************************************************/
27 : /* DestroyDataSource() */
28 : /************************************************************************/
29 :
30 : //! @cond Doxygen_Suppress
31 0 : void OGRDataSource::DestroyDataSource(OGRDataSource *poDS)
32 :
33 : {
34 0 : delete poDS;
35 0 : }
36 :
37 : //! @endcond
38 :
39 : /************************************************************************/
40 : /* OGR_DS_Destroy() */
41 : /************************************************************************/
42 :
43 25 : void OGR_DS_Destroy(OGRDataSourceH hDS)
44 :
45 : {
46 25 : if (hDS == nullptr)
47 0 : return;
48 25 : GDALClose(reinterpret_cast<GDALDatasetH>(hDS));
49 : // VALIDATE_POINTER0( hDS, "OGR_DS_Destroy" );
50 : }
51 :
52 : /************************************************************************/
53 : /* OGR_DS_Reference() */
54 : /************************************************************************/
55 :
56 0 : int OGR_DS_Reference(OGRDataSourceH hDataSource)
57 :
58 : {
59 0 : VALIDATE_POINTER1(hDataSource, "OGR_DS_Reference", 0);
60 :
61 0 : return GDALDataset::FromHandle(hDataSource)->Reference();
62 : }
63 :
64 : /************************************************************************/
65 : /* OGR_DS_Dereference() */
66 : /************************************************************************/
67 :
68 0 : int OGR_DS_Dereference(OGRDataSourceH hDataSource)
69 :
70 : {
71 0 : VALIDATE_POINTER1(hDataSource, "OGR_DS_Dereference", 0);
72 :
73 0 : return GDALDataset::FromHandle(hDataSource)->Dereference();
74 : }
75 :
76 : /************************************************************************/
77 : /* OGR_DS_GetRefCount() */
78 : /************************************************************************/
79 :
80 12 : int OGR_DS_GetRefCount(OGRDataSourceH hDataSource)
81 :
82 : {
83 12 : VALIDATE_POINTER1(hDataSource, "OGR_DS_GetRefCount", 0);
84 :
85 12 : return GDALDataset::FromHandle(hDataSource)->GetRefCount();
86 : }
87 :
88 : /************************************************************************/
89 : /* OGR_DS_GetSummaryRefCount() */
90 : /************************************************************************/
91 :
92 0 : int OGR_DS_GetSummaryRefCount(OGRDataSourceH hDataSource)
93 :
94 : {
95 0 : VALIDATE_POINTER1(hDataSource, "OGR_DS_GetSummaryRefCount", 0);
96 :
97 0 : return GDALDataset::FromHandle(hDataSource)->GetSummaryRefCount();
98 : }
99 :
100 : /************************************************************************/
101 : /* OGR_DS_CreateLayer() */
102 : /************************************************************************/
103 :
104 26 : OGRLayerH OGR_DS_CreateLayer(OGRDataSourceH hDS, const char *pszName,
105 : OGRSpatialReferenceH hSpatialRef,
106 : OGRwkbGeometryType eType, char **papszOptions)
107 :
108 : {
109 26 : VALIDATE_POINTER1(hDS, "OGR_DS_CreateLayer", nullptr);
110 :
111 26 : if (pszName == nullptr)
112 : {
113 0 : CPLError(CE_Failure, CPLE_ObjectNull,
114 : "Name was NULL in OGR_DS_CreateLayer");
115 0 : return nullptr;
116 : }
117 : OGRLayerH hLayer =
118 52 : OGRLayer::ToHandle(GDALDataset::FromHandle(hDS)->CreateLayer(
119 26 : pszName, OGRSpatialReference::FromHandle(hSpatialRef), eType,
120 : papszOptions));
121 :
122 : #ifdef OGRAPISPY_ENABLED
123 26 : if (bOGRAPISpyEnabled)
124 0 : OGRAPISpy_DS_CreateLayer(hDS, pszName, hSpatialRef, eType, papszOptions,
125 : hLayer);
126 : #endif
127 :
128 26 : return hLayer;
129 : }
130 :
131 : /************************************************************************/
132 : /* OGR_DS_CopyLayer() */
133 : /************************************************************************/
134 :
135 0 : OGRLayerH OGR_DS_CopyLayer(OGRDataSourceH hDS, OGRLayerH hSrcLayer,
136 : const char *pszNewName, char **papszOptions)
137 :
138 : {
139 0 : VALIDATE_POINTER1(hDS, "OGR_DS_CopyLayer", nullptr);
140 0 : VALIDATE_POINTER1(hSrcLayer, "OGR_DS_CopyLayer", nullptr);
141 0 : VALIDATE_POINTER1(pszNewName, "OGR_DS_CopyLayer", nullptr);
142 :
143 0 : return OGRLayer::ToHandle(GDALDataset::FromHandle(hDS)->CopyLayer(
144 0 : OGRLayer::FromHandle(hSrcLayer), pszNewName, papszOptions));
145 : }
146 :
147 : /************************************************************************/
148 : /* OGR_DS_DeleteLayer() */
149 : /************************************************************************/
150 :
151 7 : OGRErr OGR_DS_DeleteLayer(OGRDataSourceH hDS, int iLayer)
152 :
153 : {
154 7 : VALIDATE_POINTER1(hDS, "OGR_DS_DeleteLayer", OGRERR_INVALID_HANDLE);
155 :
156 : #ifdef OGRAPISPY_ENABLED
157 7 : if (bOGRAPISpyEnabled)
158 0 : OGRAPISpy_DS_DeleteLayer(reinterpret_cast<GDALDatasetH>(hDS), iLayer);
159 : #endif
160 :
161 7 : OGRErr eErr = GDALDataset::FromHandle(hDS)->DeleteLayer(iLayer);
162 :
163 7 : return eErr;
164 : }
165 :
166 : /************************************************************************/
167 : /* OGR_DS_GetLayerByName() */
168 : /************************************************************************/
169 :
170 0 : OGRLayerH OGR_DS_GetLayerByName(OGRDataSourceH hDS, const char *pszLayerName)
171 :
172 : {
173 0 : VALIDATE_POINTER1(hDS, "OGR_DS_GetLayerByName", nullptr);
174 :
175 0 : OGRLayerH hLayer = OGRLayer::ToHandle(
176 0 : GDALDataset::FromHandle(hDS)->GetLayerByName(pszLayerName));
177 :
178 : #ifdef OGRAPISPY_ENABLED
179 0 : if (bOGRAPISpyEnabled)
180 0 : OGRAPISpy_DS_GetLayerByName(reinterpret_cast<GDALDatasetH>(hDS),
181 : pszLayerName, hLayer);
182 : #endif
183 :
184 0 : return hLayer;
185 : }
186 :
187 : /************************************************************************/
188 : /* OGR_DS_ExecuteSQL() */
189 : /************************************************************************/
190 :
191 2 : OGRLayerH OGR_DS_ExecuteSQL(OGRDataSourceH hDS, const char *pszStatement,
192 : OGRGeometryH hSpatialFilter, const char *pszDialect)
193 :
194 : {
195 2 : VALIDATE_POINTER1(hDS, "OGR_DS_ExecuteSQL", nullptr);
196 :
197 : OGRLayerH hLayer =
198 4 : OGRLayer::ToHandle(GDALDataset::FromHandle(hDS)->ExecuteSQL(
199 2 : pszStatement, OGRGeometry::FromHandle(hSpatialFilter), pszDialect));
200 :
201 : #ifdef OGRAPISPY_ENABLED
202 2 : if (bOGRAPISpyEnabled)
203 0 : OGRAPISpy_DS_ExecuteSQL(reinterpret_cast<GDALDatasetH>(hDS),
204 : pszStatement, hSpatialFilter, pszDialect,
205 : hLayer);
206 : #endif
207 :
208 2 : return hLayer;
209 : }
210 :
211 : /************************************************************************/
212 : /* OGR_DS_ReleaseResultSet() */
213 : /************************************************************************/
214 :
215 2 : void OGR_DS_ReleaseResultSet(OGRDataSourceH hDS, OGRLayerH hLayer)
216 :
217 : {
218 2 : VALIDATE_POINTER0(hDS, "OGR_DS_ReleaseResultSet");
219 :
220 : #ifdef OGRAPISPY_ENABLED
221 2 : if (bOGRAPISpyEnabled)
222 0 : OGRAPISpy_DS_ReleaseResultSet(reinterpret_cast<GDALDatasetH>(hDS),
223 : hLayer);
224 : #endif
225 :
226 4 : GDALDataset::FromHandle(hDS)->ReleaseResultSet(
227 2 : OGRLayer::FromHandle(hLayer));
228 : }
229 :
230 : /************************************************************************/
231 : /* OGR_DS_TestCapability() */
232 : /************************************************************************/
233 :
234 0 : int OGR_DS_TestCapability(OGRDataSourceH hDS, const char *pszCapability)
235 :
236 : {
237 0 : VALIDATE_POINTER1(hDS, "OGR_DS_TestCapability", 0);
238 0 : VALIDATE_POINTER1(pszCapability, "OGR_DS_TestCapability", 0);
239 :
240 0 : return GDALDataset::FromHandle(hDS)->TestCapability(pszCapability);
241 : }
242 :
243 : /************************************************************************/
244 : /* OGR_DS_GetLayerCount() */
245 : /************************************************************************/
246 :
247 8 : int OGR_DS_GetLayerCount(OGRDataSourceH hDS)
248 :
249 : {
250 8 : VALIDATE_POINTER1(hDS, "OGR_DS_GetLayerCount", 0);
251 :
252 : #ifdef OGRAPISPY_ENABLED
253 8 : if (bOGRAPISpyEnabled)
254 0 : OGRAPISpy_DS_GetLayerCount(reinterpret_cast<GDALDatasetH>(hDS));
255 : #endif
256 :
257 8 : return GDALDataset::FromHandle(hDS)->GetLayerCount();
258 : }
259 :
260 : /************************************************************************/
261 : /* OGR_DS_GetLayer() */
262 : /************************************************************************/
263 :
264 21 : OGRLayerH OGR_DS_GetLayer(OGRDataSourceH hDS, int iLayer)
265 :
266 : {
267 21 : VALIDATE_POINTER1(hDS, "OGR_DS_GetLayer", nullptr);
268 :
269 : OGRLayerH hLayer =
270 21 : OGRLayer::ToHandle(GDALDataset::FromHandle(hDS)->GetLayer(iLayer));
271 :
272 : #ifdef OGRAPISPY_ENABLED
273 21 : if (bOGRAPISpyEnabled)
274 0 : OGRAPISpy_DS_GetLayer(reinterpret_cast<GDALDatasetH>(hDS), iLayer,
275 : hLayer);
276 : #endif
277 :
278 21 : return hLayer;
279 : }
280 :
281 : /************************************************************************/
282 : /* OGR_DS_GetName() */
283 : /************************************************************************/
284 :
285 0 : const char *OGR_DS_GetName(OGRDataSourceH hDS)
286 :
287 : {
288 0 : VALIDATE_POINTER1(hDS, "OGR_DS_GetName", nullptr);
289 :
290 0 : return GDALDataset::FromHandle(hDS)->GetDescription();
291 : }
292 :
293 : /************************************************************************/
294 : /* OGR_DS_SyncToDisk() */
295 : /************************************************************************/
296 :
297 0 : OGRErr OGR_DS_SyncToDisk(OGRDataSourceH hDS)
298 :
299 : {
300 0 : VALIDATE_POINTER1(hDS, "OGR_DS_SyncToDisk", OGRERR_INVALID_HANDLE);
301 :
302 0 : GDALDataset::FromHandle(hDS)->FlushCache(false);
303 0 : if (CPLGetLastErrorType() != 0)
304 0 : return OGRERR_FAILURE;
305 : else
306 0 : return OGRERR_NONE;
307 : }
308 :
309 : /************************************************************************/
310 : /* OGR_DS_GetDriver() */
311 : /************************************************************************/
312 :
313 0 : OGRSFDriverH OGR_DS_GetDriver(OGRDataSourceH hDS)
314 :
315 : {
316 0 : VALIDATE_POINTER1(hDS, "OGR_DS_GetDriver", nullptr);
317 :
318 : return reinterpret_cast<OGRSFDriverH>(
319 0 : reinterpret_cast<OGRDataSource *>(hDS)->GetDriver());
320 : }
321 :
322 : /************************************************************************/
323 : /* OGR_DS_GetStyleTable() */
324 : /************************************************************************/
325 :
326 0 : OGRStyleTableH OGR_DS_GetStyleTable(OGRDataSourceH hDS)
327 :
328 : {
329 0 : VALIDATE_POINTER1(hDS, "OGR_DS_GetStyleTable", nullptr);
330 :
331 : return reinterpret_cast<OGRStyleTableH>(
332 0 : GDALDataset::FromHandle(hDS)->GetStyleTable());
333 : }
334 :
335 : /************************************************************************/
336 : /* OGR_DS_SetStyleTableDirectly() */
337 : /************************************************************************/
338 :
339 0 : void OGR_DS_SetStyleTableDirectly(OGRDataSourceH hDS,
340 : OGRStyleTableH hStyleTable)
341 :
342 : {
343 0 : VALIDATE_POINTER0(hDS, "OGR_DS_SetStyleTableDirectly");
344 :
345 0 : GDALDataset::FromHandle(hDS)->SetStyleTableDirectly(
346 0 : reinterpret_cast<OGRStyleTable *>(hStyleTable));
347 : }
348 :
349 : /************************************************************************/
350 : /* OGR_DS_SetStyleTable() */
351 : /************************************************************************/
352 :
353 0 : void OGR_DS_SetStyleTable(OGRDataSourceH hDS, OGRStyleTableH hStyleTable)
354 :
355 : {
356 0 : VALIDATE_POINTER0(hDS, "OGR_DS_SetStyleTable");
357 0 : VALIDATE_POINTER0(hStyleTable, "OGR_DS_SetStyleTable");
358 :
359 0 : GDALDataset::FromHandle(hDS)->SetStyleTable(
360 0 : reinterpret_cast<OGRStyleTable *>(hStyleTable));
361 : }
|