52
52
#include "sqlite3.h"
53
53
#include "spatialite.h"
55
void cleanup_shapefile(const char *filename)
56
cleanup_shapefile (const char *filename)
63
snprintf(nam, 1000, "%s.dbf", filename);
65
snprintf(nam, 1000, "%s.prj", filename);
67
snprintf(nam, 1000, "%s.shp", filename);
69
snprintf(nam, 1000, "%s.shx", filename);
65
snprintf (nam, 1000, "%s.dbf", filename);
67
snprintf (nam, 1000, "%s.prj", filename);
69
snprintf (nam, 1000, "%s.shp", filename);
71
snprintf (nam, 1000, "%s.shx", filename);
73
int do_test(sqlite3 *handle)
76
do_test (sqlite3 * handle)
75
78
/* testing some DB */
76
#ifndef OMIT_ICONV /* only if ICONV is supported */
77
char *dumpname = __FILE__"dump";
79
#ifndef OMIT_ICONV /* only if ICONV is supported */
80
char *dumpname = __FILE__ "dump";
78
81
char *err_msg = NULL;
81
84
gaiaVectorLayersListPtr list;
83
ret = sqlite3_exec (handle, "CREATE TABLE Point_Test (Name TEXT, Description TEXT)", NULL, NULL, &err_msg);
84
if (ret != SQLITE_OK) {
85
fprintf (stderr, "CREATE TABLE error: %s\n", err_msg);
86
sqlite3_free(err_msg);
87
sqlite3_close(handle);
91
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Point_Test', 'geomZ', 4326, 'POINT', 'XYZ', 0)", NULL, NULL, &err_msg);
92
if (ret != SQLITE_OK) {
93
fprintf (stderr, "AddGeometryColumn POINT XYZ error: %s\n", err_msg);
94
sqlite3_free(err_msg);
95
sqlite3_close(handle);
99
ret = sqlite3_exec (handle, "INSERT INTO Point_Test (Name, Description, geomZ) VALUES ('Point 1', 'Some point', GeomFromText('POINTZ(136 -33 365)', 4326))", NULL, NULL, &err_msg);
100
if (ret != SQLITE_OK) {
101
fprintf (stderr, "INSERT POINT XYZ error: %s\n", err_msg);
102
sqlite3_free(err_msg);
103
sqlite3_close(handle);
107
ret = dump_shapefile (handle, "Point_Test", "geomZ", dumpname, "UTF-8", "POINT", 1, &row_count, err_msg);
109
fprintf (stderr, "dump_shapefile() error for POINT XYZ: %s\n", err_msg);
110
sqlite3_close(handle);
113
cleanup_shapefile(dumpname);
115
ret = dump_shapefile (handle, "Point_Test", "geomZ", dumpname, "UTF-8", "MULTIPOINT", 1, &row_count, err_msg);
117
fprintf (stderr, "dump_shapefile() error for POINT XYZ: %s\n", err_msg);
118
sqlite3_close(handle);
121
cleanup_shapefile(dumpname);
123
ret = dump_shapefile (handle, "Point_Test", "geomZ", dumpname, "UTF-8", "", 1, &row_count, err_msg);
125
fprintf (stderr, "dump_shapefile() error for POINT XYZ: %s\n", err_msg);
126
sqlite3_close(handle);
127
return -7; /* dupe */
129
cleanup_shapefile(dumpname);
131
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Point_Test', 'geomM', 4326, 'POINT', 'XYM', 0)", NULL, NULL, &err_msg);
132
if (ret != SQLITE_OK) {
133
fprintf (stderr, "AddGeometryColumn POINT XYM error: %s\n", err_msg);
134
sqlite3_free(err_msg);
135
sqlite3_close(handle);
139
ret = sqlite3_exec (handle, "INSERT INTO Point_Test (Name, Description, geomM) VALUES ('Point 2', 'Some pointM', GeomFromText('POINTM(136 -33 26.7)', 4326))", NULL, NULL, &err_msg);
140
if (ret != SQLITE_OK) {
141
fprintf (stderr, "INSERT POINT XYM error: %s\n", err_msg);
142
sqlite3_free(err_msg);
143
sqlite3_close(handle);
147
ret = dump_shapefile (handle, "Point_Test", "geomM", dumpname, "UTF-8", "", 1, &row_count, err_msg);
149
fprintf (stderr, "dump_shapefile() error for POINT XYM: %s\n", err_msg);
150
sqlite3_close(handle);
153
cleanup_shapefile(dumpname);
155
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Point_Test', 'geomXY', 4326, 'POINT', 'XY', 0)", NULL, NULL, &err_msg);
156
if (ret != SQLITE_OK) {
157
fprintf (stderr, "AddGeometryColumn POINT XY error: %s\n", err_msg);
158
sqlite3_free(err_msg);
159
sqlite3_close(handle);
163
ret = sqlite3_exec (handle, "INSERT INTO Point_Test (Name, Description, geomXY) VALUES ('Point 3', 'Some point', GeomFromText('POINT(136 -33)', 4326))", NULL, NULL, &err_msg);
164
if (ret != SQLITE_OK) {
165
fprintf (stderr, "INSERT POINT XY error: %s\n", err_msg);
166
sqlite3_free(err_msg);
167
sqlite3_close(handle);
171
ret = dump_shapefile (handle, "Point_Test", "geomXY", dumpname, "UTF-8", "", 1, &row_count, err_msg);
173
fprintf (stderr, "dump_shapefile() error for POINT XY: %s\n", err_msg);
174
sqlite3_close(handle);
177
cleanup_shapefile(dumpname);
179
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Point_Test', 'geomXYZM', 4326, 'POINT', 'XYZM', 0)", NULL, NULL, &err_msg);
180
if (ret != SQLITE_OK) {
181
fprintf (stderr, "AddGeometryColumn POINT XYZM error: %s\n", err_msg);
182
sqlite3_free(err_msg);
183
sqlite3_close(handle);
187
ret = sqlite3_exec (handle, "INSERT INTO Point_Test (Name, Description, geomXYZM) VALUES ('Point 4', 'Some pointXYZM', GeomFromText('POINT(136 -33 424 233.2)', 4326))", NULL, NULL, &err_msg);
188
if (ret != SQLITE_OK) {
189
fprintf (stderr, "INSERT POINT XYZM error: %s\n", err_msg);
190
sqlite3_free(err_msg);
191
sqlite3_close(handle);
195
ret = dump_shapefile (handle, "Point_Test", "geomXYZM", dumpname, "UTF-8", "", 1, &row_count, err_msg);
197
fprintf (stderr, "dump_shapefile() error for POINT XYZM: %s\n", err_msg);
198
sqlite3_close(handle);
201
cleanup_shapefile(dumpname);
88
"CREATE TABLE Point_Test (Name TEXT, Description TEXT)",
89
NULL, NULL, &err_msg);
92
fprintf (stderr, "CREATE TABLE error: %s\n", err_msg);
93
sqlite3_free (err_msg);
94
sqlite3_close (handle);
100
"SELECT AddGeometryColumn('Point_Test', 'geomZ', 4326, 'POINT', 'XYZ', 0)",
101
NULL, NULL, &err_msg);
102
if (ret != SQLITE_OK)
104
fprintf (stderr, "AddGeometryColumn POINT XYZ error: %s\n", err_msg);
105
sqlite3_free (err_msg);
106
sqlite3_close (handle);
111
sqlite3_exec (handle,
112
"INSERT INTO Point_Test (Name, Description, geomZ) VALUES ('Point 1', 'Some point', GeomFromText('POINTZ(136 -33 365)', 4326))",
113
NULL, NULL, &err_msg);
114
if (ret != SQLITE_OK)
116
fprintf (stderr, "INSERT POINT XYZ error: %s\n", err_msg);
117
sqlite3_free (err_msg);
118
sqlite3_close (handle);
123
dump_shapefile (handle, "Point_Test", "geomZ", dumpname, "UTF-8",
124
"POINT", 1, &row_count, err_msg);
127
fprintf (stderr, "dump_shapefile() error for POINT XYZ: %s\n",
129
sqlite3_close (handle);
132
cleanup_shapefile (dumpname);
135
dump_shapefile (handle, "Point_Test", "geomZ", dumpname, "UTF-8",
136
"MULTIPOINT", 1, &row_count, err_msg);
139
fprintf (stderr, "dump_shapefile() error for POINT XYZ: %s\n",
141
sqlite3_close (handle);
144
cleanup_shapefile (dumpname);
147
dump_shapefile (handle, "Point_Test", "geomZ", dumpname, "UTF-8", "", 1,
148
&row_count, err_msg);
151
fprintf (stderr, "dump_shapefile() error for POINT XYZ: %s\n",
153
sqlite3_close (handle);
154
return -7; /* dupe */
156
cleanup_shapefile (dumpname);
159
sqlite3_exec (handle,
160
"SELECT AddGeometryColumn('Point_Test', 'geomM', 4326, 'POINT', 'XYM', 0)",
161
NULL, NULL, &err_msg);
162
if (ret != SQLITE_OK)
164
fprintf (stderr, "AddGeometryColumn POINT XYM error: %s\n", err_msg);
165
sqlite3_free (err_msg);
166
sqlite3_close (handle);
171
sqlite3_exec (handle,
172
"INSERT INTO Point_Test (Name, Description, geomM) VALUES ('Point 2', 'Some pointM', GeomFromText('POINTM(136 -33 26.7)', 4326))",
173
NULL, NULL, &err_msg);
174
if (ret != SQLITE_OK)
176
fprintf (stderr, "INSERT POINT XYM error: %s\n", err_msg);
177
sqlite3_free (err_msg);
178
sqlite3_close (handle);
183
dump_shapefile (handle, "Point_Test", "geomM", dumpname, "UTF-8", "", 1,
184
&row_count, err_msg);
187
fprintf (stderr, "dump_shapefile() error for POINT XYM: %s\n",
189
sqlite3_close (handle);
192
cleanup_shapefile (dumpname);
195
sqlite3_exec (handle,
196
"SELECT AddGeometryColumn('Point_Test', 'geomXY', 4326, 'POINT', 'XY', 0)",
197
NULL, NULL, &err_msg);
198
if (ret != SQLITE_OK)
200
fprintf (stderr, "AddGeometryColumn POINT XY error: %s\n", err_msg);
201
sqlite3_free (err_msg);
202
sqlite3_close (handle);
207
sqlite3_exec (handle,
208
"INSERT INTO Point_Test (Name, Description, geomXY) VALUES ('Point 3', 'Some point', GeomFromText('POINT(136 -33)', 4326))",
209
NULL, NULL, &err_msg);
210
if (ret != SQLITE_OK)
212
fprintf (stderr, "INSERT POINT XY error: %s\n", err_msg);
213
sqlite3_free (err_msg);
214
sqlite3_close (handle);
219
dump_shapefile (handle, "Point_Test", "geomXY", dumpname, "UTF-8", "",
220
1, &row_count, err_msg);
223
fprintf (stderr, "dump_shapefile() error for POINT XY: %s\n",
225
sqlite3_close (handle);
228
cleanup_shapefile (dumpname);
231
sqlite3_exec (handle,
232
"SELECT AddGeometryColumn('Point_Test', 'geomXYZM', 4326, 'POINT', 'XYZM', 0)",
233
NULL, NULL, &err_msg);
234
if (ret != SQLITE_OK)
236
fprintf (stderr, "AddGeometryColumn POINT XYZM error: %s\n", err_msg);
237
sqlite3_free (err_msg);
238
sqlite3_close (handle);
243
sqlite3_exec (handle,
244
"INSERT INTO Point_Test (Name, Description, geomXYZM) VALUES ('Point 4', 'Some pointXYZM', GeomFromText('POINT(136 -33 424 233.2)', 4326))",
245
NULL, NULL, &err_msg);
246
if (ret != SQLITE_OK)
248
fprintf (stderr, "INSERT POINT XYZM error: %s\n", err_msg);
249
sqlite3_free (err_msg);
250
sqlite3_close (handle);
255
dump_shapefile (handle, "Point_Test", "geomXYZM", dumpname, "UTF-8", "",
256
1, &row_count, err_msg);
259
fprintf (stderr, "dump_shapefile() error for POINT XYZM: %s\n",
261
sqlite3_close (handle);
264
cleanup_shapefile (dumpname);
203
266
ret = sqlite3_exec (handle, "DROP TABLE Point_Test", NULL, NULL, &err_msg);
204
if (ret != SQLITE_OK) {
205
fprintf (stderr, "DROP TABLE Point_Test error: %s\n", err_msg);
206
sqlite3_free(err_msg);
207
sqlite3_close(handle);
211
ret = sqlite3_exec (handle, "CREATE TABLE MPoint_Test (Name TEXT, Description TEXT)", NULL, NULL, &err_msg);
212
if (ret != SQLITE_OK) {
213
fprintf (stderr, "CREATE TABLE MPoint_Test error: %s\n", err_msg);
214
sqlite3_free(err_msg);
215
sqlite3_close(handle);
219
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('MPoint_Test', 'geom', 4326, 'MULTIPOINT', 'XY', 0)", NULL, NULL, &err_msg);
220
if (ret != SQLITE_OK) {
221
fprintf (stderr, "AddGeometryColumn MPOINT XY error: %s\n", err_msg);
222
sqlite3_free(err_msg);
223
sqlite3_close(handle);
227
ret = sqlite3_exec (handle, "INSERT INTO MPoint_Test (Name, Description, geom) VALUES ('Point 1', 'Some point', GeomFromText('MULTIPOINT(136 -33, 47 2, -20, 12)', 4326))", NULL, NULL, &err_msg);
228
if (ret != SQLITE_OK) {
229
fprintf (stderr, "INSERT MPOINT XY error: %s\n", err_msg);
230
sqlite3_free(err_msg);
231
sqlite3_close(handle);
235
ret = dump_shapefile (handle, "MPoint_Test", "geom", dumpname, "UTF-8", "MULTIPOINT", 1, &row_count, err_msg);
237
fprintf (stderr, "dump_shapefile() error for MPOINT XY: %s\n", err_msg);
238
sqlite3_close(handle);
241
cleanup_shapefile(dumpname);
243
ret = dump_shapefile (handle, "MPoint_Test", "geom", dumpname, "UTF-8", "", 1, &row_count, err_msg);
245
fprintf (stderr, "dump_shapefile() error for MPOINT XY: %s\n", err_msg);
246
sqlite3_close(handle);
249
cleanup_shapefile(dumpname);
251
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('MPoint_Test', 'geomZ', 4326, 'MULTIPOINT', 'XYZ', 0)", NULL, NULL, &err_msg);
252
if (ret != SQLITE_OK) {
253
fprintf (stderr, "AddGeometryColumn MPOINT XYZ error: %s\n", err_msg);
254
sqlite3_free(err_msg);
255
sqlite3_close(handle);
259
ret = sqlite3_exec (handle, "INSERT INTO MPoint_Test (Name, Description, geomZ) VALUES ('Point 2', 'Some pointZ', GeomFromText('MULTIPOINTZ(136 -33 1, 47 2 2, -20, 12 3)', 4326))", NULL, NULL, &err_msg);
260
if (ret != SQLITE_OK) {
261
fprintf (stderr, "INSERT MPOINT XYZ error: %s\n", err_msg);
262
sqlite3_free(err_msg);
263
sqlite3_close(handle);
267
ret = dump_shapefile (handle, "MPoint_Test", "geomZ", dumpname, "UTF-8", "", 1, &row_count, err_msg);
269
fprintf (stderr, "dump_shapefile() error for MPOINT XYZ: %s\n", err_msg);
270
sqlite3_close(handle);
273
cleanup_shapefile(dumpname);
275
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('MPoint_Test', 'geomM', 4326, 'MULTIPOINT', 'XYM', 0)", NULL, NULL, &err_msg);
276
if (ret != SQLITE_OK) {
277
fprintf (stderr, "AddGeometryColumn MPOINT XYM error: %s\n", err_msg);
278
sqlite3_free(err_msg);
279
sqlite3_close(handle);
283
ret = sqlite3_exec (handle, "INSERT INTO MPoint_Test (Name, Description, geomM) VALUES ('Point 3', 'Some pointM', GeomFromText('MULTIPOINTM(136 -33 1, 47 2 2, -20, 12 3)', 4326))", NULL, NULL, &err_msg);
284
if (ret != SQLITE_OK) {
285
fprintf (stderr, "INSERT MPOINT XYM error: %s\n", err_msg);
286
sqlite3_free(err_msg);
287
sqlite3_close(handle);
291
ret = dump_shapefile (handle, "MPoint_Test", "geomM", dumpname, "UTF-8", "", 1, &row_count, err_msg);
293
fprintf (stderr, "dump_shapefile() error for MPOINT XYM: %s\n", err_msg);
294
sqlite3_close(handle);
297
cleanup_shapefile(dumpname);
299
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('MPoint_Test', 'geomMZ', 4326, 'MULTIPOINT', 'XYZM', 0)", NULL, NULL, &err_msg);
300
if (ret != SQLITE_OK) {
301
fprintf (stderr, "AddGeometryColumn MPOINT XYZM error: %s\n", err_msg);
302
sqlite3_free(err_msg);
303
sqlite3_close(handle);
307
ret = sqlite3_exec (handle, "INSERT INTO MPoint_Test (Name, Description, geomMZ) VALUES ('Point 4', 'Some pointMZ', GeomFromText('MULTIPOINTMZ(136 -33 1 4.2, 47 2 2.3 1, -20, 12 3 -2)', 4326))", NULL, NULL, &err_msg);
308
if (ret != SQLITE_OK) {
309
fprintf (stderr, "INSERT MPOINT XYZM error: %s\n", err_msg);
310
sqlite3_free(err_msg);
311
sqlite3_close(handle);
315
ret = dump_shapefile (handle, "MPoint_Test", "geomMZ", dumpname, "UTF-8", "", 1, &row_count, err_msg);
317
fprintf (stderr, "dump_shapefile() error for MPOINT XYZM %s\n", err_msg);
318
sqlite3_close(handle);
321
cleanup_shapefile(dumpname);
267
if (ret != SQLITE_OK)
269
fprintf (stderr, "DROP TABLE Point_Test error: %s\n", err_msg);
270
sqlite3_free (err_msg);
271
sqlite3_close (handle);
276
sqlite3_exec (handle,
277
"CREATE TABLE MPoint_Test (Name TEXT, Description TEXT)",
278
NULL, NULL, &err_msg);
279
if (ret != SQLITE_OK)
281
fprintf (stderr, "CREATE TABLE MPoint_Test error: %s\n", err_msg);
282
sqlite3_free (err_msg);
283
sqlite3_close (handle);
288
sqlite3_exec (handle,
289
"SELECT AddGeometryColumn('MPoint_Test', 'geom', 4326, 'MULTIPOINT', 'XY', 0)",
290
NULL, NULL, &err_msg);
291
if (ret != SQLITE_OK)
293
fprintf (stderr, "AddGeometryColumn MPOINT XY error: %s\n", err_msg);
294
sqlite3_free (err_msg);
295
sqlite3_close (handle);
300
sqlite3_exec (handle,
301
"INSERT INTO MPoint_Test (Name, Description, geom) VALUES ('Point 1', 'Some point', GeomFromText('MULTIPOINT(136 -33, 47 2, -20, 12)', 4326))",
302
NULL, NULL, &err_msg);
303
if (ret != SQLITE_OK)
305
fprintf (stderr, "INSERT MPOINT XY error: %s\n", err_msg);
306
sqlite3_free (err_msg);
307
sqlite3_close (handle);
312
dump_shapefile (handle, "MPoint_Test", "geom", dumpname, "UTF-8",
313
"MULTIPOINT", 1, &row_count, err_msg);
316
fprintf (stderr, "dump_shapefile() error for MPOINT XY: %s\n",
318
sqlite3_close (handle);
321
cleanup_shapefile (dumpname);
324
dump_shapefile (handle, "MPoint_Test", "geom", dumpname, "UTF-8", "", 1,
325
&row_count, err_msg);
328
fprintf (stderr, "dump_shapefile() error for MPOINT XY: %s\n",
330
sqlite3_close (handle);
333
cleanup_shapefile (dumpname);
336
sqlite3_exec (handle,
337
"SELECT AddGeometryColumn('MPoint_Test', 'geomZ', 4326, 'MULTIPOINT', 'XYZ', 0)",
338
NULL, NULL, &err_msg);
339
if (ret != SQLITE_OK)
341
fprintf (stderr, "AddGeometryColumn MPOINT XYZ error: %s\n", err_msg);
342
sqlite3_free (err_msg);
343
sqlite3_close (handle);
348
sqlite3_exec (handle,
349
"INSERT INTO MPoint_Test (Name, Description, geomZ) VALUES ('Point 2', 'Some pointZ', GeomFromText('MULTIPOINTZ(136 -33 1, 47 2 2, -20, 12 3)', 4326))",
350
NULL, NULL, &err_msg);
351
if (ret != SQLITE_OK)
353
fprintf (stderr, "INSERT MPOINT XYZ error: %s\n", err_msg);
354
sqlite3_free (err_msg);
355
sqlite3_close (handle);
360
dump_shapefile (handle, "MPoint_Test", "geomZ", dumpname, "UTF-8", "",
361
1, &row_count, err_msg);
364
fprintf (stderr, "dump_shapefile() error for MPOINT XYZ: %s\n",
366
sqlite3_close (handle);
369
cleanup_shapefile (dumpname);
372
sqlite3_exec (handle,
373
"SELECT AddGeometryColumn('MPoint_Test', 'geomM', 4326, 'MULTIPOINT', 'XYM', 0)",
374
NULL, NULL, &err_msg);
375
if (ret != SQLITE_OK)
377
fprintf (stderr, "AddGeometryColumn MPOINT XYM error: %s\n", err_msg);
378
sqlite3_free (err_msg);
379
sqlite3_close (handle);
384
sqlite3_exec (handle,
385
"INSERT INTO MPoint_Test (Name, Description, geomM) VALUES ('Point 3', 'Some pointM', GeomFromText('MULTIPOINTM(136 -33 1, 47 2 2, -20, 12 3)', 4326))",
386
NULL, NULL, &err_msg);
387
if (ret != SQLITE_OK)
389
fprintf (stderr, "INSERT MPOINT XYM error: %s\n", err_msg);
390
sqlite3_free (err_msg);
391
sqlite3_close (handle);
396
dump_shapefile (handle, "MPoint_Test", "geomM", dumpname, "UTF-8", "",
397
1, &row_count, err_msg);
400
fprintf (stderr, "dump_shapefile() error for MPOINT XYM: %s\n",
402
sqlite3_close (handle);
405
cleanup_shapefile (dumpname);
408
sqlite3_exec (handle,
409
"SELECT AddGeometryColumn('MPoint_Test', 'geomMZ', 4326, 'MULTIPOINT', 'XYZM', 0)",
410
NULL, NULL, &err_msg);
411
if (ret != SQLITE_OK)
413
fprintf (stderr, "AddGeometryColumn MPOINT XYZM error: %s\n",
415
sqlite3_free (err_msg);
416
sqlite3_close (handle);
421
sqlite3_exec (handle,
422
"INSERT INTO MPoint_Test (Name, Description, geomMZ) VALUES ('Point 4', 'Some pointMZ', GeomFromText('MULTIPOINTMZ(136 -33 1 4.2, 47 2 2.3 1, -20, 12 3 -2)', 4326))",
423
NULL, NULL, &err_msg);
424
if (ret != SQLITE_OK)
426
fprintf (stderr, "INSERT MPOINT XYZM error: %s\n", err_msg);
427
sqlite3_free (err_msg);
428
sqlite3_close (handle);
433
dump_shapefile (handle, "MPoint_Test", "geomMZ", dumpname, "UTF-8", "",
434
1, &row_count, err_msg);
437
fprintf (stderr, "dump_shapefile() error for MPOINT XYZM %s\n",
439
sqlite3_close (handle);
442
cleanup_shapefile (dumpname);
323
444
ret = sqlite3_exec (handle, "DROP TABLE MPoint_Test", NULL, NULL, &err_msg);
324
if (ret != SQLITE_OK) {
325
fprintf (stderr, "DROP TABLE MPoint_Test error: %s\n", err_msg);
326
sqlite3_free(err_msg);
327
sqlite3_close(handle);
331
ret = sqlite3_exec (handle, "CREATE TABLE Linestring_Test (Name TEXT, Description TEXT)", NULL, NULL, &err_msg);
332
if (ret != SQLITE_OK) {
333
fprintf (stderr, "CREATE TABLE Linestring_Test error: %s\n", err_msg);
334
sqlite3_free(err_msg);
335
sqlite3_close(handle);
339
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Linestring_Test', 'geom', 4326, 'LINESTRING', 'XY', 0)", NULL, NULL, &err_msg);
340
if (ret != SQLITE_OK) {
341
fprintf (stderr, "AddGeometryColumn LINESTRING XY error: %s\n", err_msg);
342
sqlite3_free(err_msg);
343
sqlite3_close(handle);
347
ret = sqlite3_exec (handle, "INSERT INTO Linestring_Test (Name, Description, geom) VALUES ('Point 1', 'Some linestring', GeomFromText('LINESTRING(136 -33, 47 2, -20, 12)', 4326))", NULL, NULL, &err_msg);
348
if (ret != SQLITE_OK) {
349
fprintf (stderr, "INSERT LINESTRING XY error: %s\n", err_msg);
350
sqlite3_free(err_msg);
351
sqlite3_close(handle);
355
ret = dump_shapefile (handle, "Linestring_Test", "geom", dumpname, "UTF-8", "", 1, &row_count, err_msg);
357
fprintf (stderr, "dump_shapefile() error for LINESTRING XY: %s\n", err_msg);
358
sqlite3_close(handle);
361
cleanup_shapefile(dumpname);
363
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Linestring_Test', 'geomZ', 4326, 'LINESTRING', 'XYZ', 0)", NULL, NULL, &err_msg);
364
if (ret != SQLITE_OK) {
365
fprintf (stderr, "AddGeometryColumn LINESTRING XYZ error: %s\n", err_msg);
366
sqlite3_free(err_msg);
367
sqlite3_close(handle);
371
ret = sqlite3_exec (handle, "INSERT INTO Linestring_Test (Name, Description, geomZ) VALUES ('Point 2', 'Some linestringZ', GeomFromText('LINESTRINGZ(136 -33 3, 47 2 3.8, -20 12 10.1)', 4326))", NULL, NULL, &err_msg);
372
if (ret != SQLITE_OK) {
373
fprintf (stderr, "INSERT LINESTRING XYZ error: %s\n", err_msg);
374
sqlite3_free(err_msg);
375
sqlite3_close(handle);
379
ret = dump_shapefile (handle, "Linestring_Test", "geomZ", dumpname, "UTF-8", "", 1, &row_count, err_msg);
381
fprintf (stderr, "dump_shapefile() error for LINESTRING XYZ: %s\n", err_msg);
382
sqlite3_close(handle);
385
cleanup_shapefile(dumpname);
387
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Linestring_Test', 'geomM', 4326, 'LINESTRING', 'XYM', 0)", NULL, NULL, &err_msg);
388
if (ret != SQLITE_OK) {
389
fprintf (stderr, "AddGeometryColumn LINESTRING XYM error: %s\n", err_msg);
390
sqlite3_free(err_msg);
391
sqlite3_close(handle);
395
ret = sqlite3_exec (handle, "INSERT INTO Linestring_Test (Name, Description, geomM) VALUES ('Point 3', 'Some linestringM', GeomFromText('LINESTRINGM(136 -33 3, 47 2 3.8, -20 12 10.1)', 4326))", NULL, NULL, &err_msg);
396
if (ret != SQLITE_OK) {
397
fprintf (stderr, "INSERT LINESTRING XYM error: %s\n", err_msg);
398
sqlite3_free(err_msg);
399
sqlite3_close(handle);
403
ret = dump_shapefile (handle, "Linestring_Test", "geomM", dumpname, "UTF-8", "", 1, &row_count, err_msg);
405
fprintf (stderr, "dump_shapefile() error for LINESTRING XYM: %s\n", err_msg);
406
sqlite3_close(handle);
409
cleanup_shapefile(dumpname);
411
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Linestring_Test', 'geomMZ', 4326, 'LINESTRING', 'XYZM', 0)", NULL, NULL, &err_msg);
412
if (ret != SQLITE_OK) {
413
fprintf (stderr, "AddGeometryColumn LINESTRING XYZM error: %s\n", err_msg);
414
sqlite3_free(err_msg);
415
sqlite3_close(handle);
419
ret = sqlite3_exec (handle, "INSERT INTO Linestring_Test (Name, Description, geomMZ) VALUES ('Point 3', 'Some linestringZM', GeomFromText('LINESTRINGZM(136 -33 3 4.2, 47 2 3.8 1, -20 12 10.1 321)', 4326))", NULL, NULL, &err_msg);
420
if (ret != SQLITE_OK) {
421
fprintf (stderr, "INSERT LINESTRING XYZM error: %s\n", err_msg);
422
sqlite3_free(err_msg);
423
sqlite3_close(handle);
427
ret = dump_shapefile (handle, "Linestring_Test", "geomMZ", dumpname, "UTF-8", "", 1, &row_count, err_msg);
429
fprintf (stderr, "dump_shapefile() error for LINESTRING XYZM: %s\n", err_msg);
430
sqlite3_close(handle);
433
cleanup_shapefile(dumpname);
435
ret = sqlite3_exec (handle, "DROP TABLE Linestring_Test", NULL, NULL, &err_msg);
436
if (ret != SQLITE_OK) {
437
fprintf (stderr, "DROP TABLE Linestring_Test error: %s\n", err_msg);
438
sqlite3_free(err_msg);
439
sqlite3_close(handle);
443
ret = sqlite3_exec (handle, "CREATE TABLE Polygon_Test (Name TEXT, Description TEXT, thing1 INTEGER, thing2 REAL, thing3 DOUBLE, thing4 BLOB)", NULL, NULL, &err_msg);
444
if (ret != SQLITE_OK) {
445
fprintf (stderr, "CREATE TABLE Polygon_Test error: %s\n", err_msg);
446
sqlite3_free(err_msg);
447
sqlite3_close(handle);
451
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Polygon_Test', 'geom', 4326, 'POLYGON', 'XY', 0)", NULL, NULL, &err_msg);
452
if (ret != SQLITE_OK) {
453
fprintf (stderr, "AddGeometryColumn POLYGON XY error: %s\n", err_msg);
454
sqlite3_free(err_msg);
455
sqlite3_close(handle);
458
/* TODO: try dumping an empty table */
460
ret = sqlite3_exec (handle, "INSERT INTO Polygon_Test (Name, Description, thing1, thing2, thing3, thing4, geom) VALUES ('Polygon 1', 'Some polygon', 2, 4.25, 343.343, zeroblob(40), GeomFromText('POLYGON((136 -33, 47 2, -20 -1, 136 -33),(10 -2, -20 -0.4, 40 0.1, 10 -2))', 4326))", NULL, NULL, &err_msg);
461
if (ret != SQLITE_OK) {
462
fprintf (stderr, "INSERT POLYGON XY error: %s\n", err_msg);
463
sqlite3_free(err_msg);
464
sqlite3_close(handle);
468
ret = dump_shapefile (handle, "Polygon_Test", "geom", dumpname, "UTF-8", "", 1, &row_count, err_msg);
470
fprintf (stderr, "dump_shapefile() error for POLYGON XY: %s\n", err_msg);
471
sqlite3_close(handle);
474
cleanup_shapefile(dumpname);
476
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Polygon_Test', 'geomZ', 4326, 'POLYGON', 'XYZ', 0)", NULL, NULL, &err_msg);
477
if (ret != SQLITE_OK) {
478
fprintf (stderr, "AddGeometryColumn POLYGON XYZ error: %s\n", err_msg);
479
sqlite3_free(err_msg);
480
sqlite3_close(handle);
484
ret = sqlite3_exec (handle, "INSERT INTO Polygon_Test (Name, Description, thing1, thing2, thing3, thing4, geomZ) VALUES ('Polygon 2', 'Some polygonZ', 12, 14.25, 1343.343, zeroblob(140), GeomFromText('POLYGONZ((136 -33 4, 47 2 4.2, -20 -1 1, 136 -33 4),(10 -2 4, 40 0.1 1.6, -20 -0.4 1, 10 -2 4)', 4326))", NULL, NULL, &err_msg);
485
if (ret != SQLITE_OK) {
486
fprintf (stderr, "INSERT POLYGON XYZ error: %s\n", err_msg);
487
sqlite3_free(err_msg);
488
sqlite3_close(handle);
491
ret = sqlite3_exec (handle, "INSERT INTO Polygon_Test (Name, Description, geomZ) VALUES ('Polygon 2', 'wrong direction', GeomFromText('POLYGONZ((136 -33 4, 47 2 4.2, -20 -1 1, 136 -33 4),(10 -2 4, -20 -0.4 1, 40 0.1 1.6, 10 -2 4))', 4326))", NULL, NULL, &err_msg);
492
if (ret != SQLITE_OK) {
493
fprintf (stderr, "INSERT POLYGON XYZ 2 error: %s\n", err_msg);
494
sqlite3_free(err_msg);
495
sqlite3_close(handle);
496
return -57; /* dupe */
499
ret = dump_shapefile (handle, "Polygon_Test", "geomZ", dumpname, "UTF-8", "", 1, &row_count, err_msg);
501
fprintf (stderr, "dump_shapefile() error for POLYGON XYZ: %s\n", err_msg);
502
sqlite3_close(handle);
505
cleanup_shapefile(dumpname);
507
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Polygon_Test', 'geomM', 4326, 'POLYGON', 'XYM', 0)", NULL, NULL, &err_msg);
508
if (ret != SQLITE_OK) {
509
fprintf (stderr, "AddGeometryColumn POLYGON XYM error: %s\n", err_msg);
510
sqlite3_free(err_msg);
511
sqlite3_close(handle);
515
ret = sqlite3_exec (handle, "INSERT INTO Polygon_Test (Name, Description, geomM) VALUES ('Polygon 3', 'Some polygonM', GeomFromText('POLYGONM((136 -33 4, 47 2 4.2, -20 -1 1, 136 -33 4),(10 -2 4, -20 -0.4 1, 40 0.1 1.6, 10 -2 4))', 4326))", NULL, NULL, &err_msg);
516
if (ret != SQLITE_OK) {
517
fprintf (stderr, "INSERT POLYGON XYM error: %s\n", err_msg);
518
sqlite3_free(err_msg);
519
sqlite3_close(handle);
523
ret = dump_shapefile (handle, "Polygon_Test", "geomM", dumpname, "UTF-8", "", 1, &row_count, err_msg);
525
fprintf (stderr, "dump_shapefile() error for POLYGON XYM: %s\n", err_msg);
526
sqlite3_close(handle);
529
cleanup_shapefile(dumpname);
531
ret = sqlite3_exec (handle, "SELECT AddGeometryColumn('Polygon_Test', 'geomZM', 4326, 'POLYGON', 'XYZM', 0)", NULL, NULL, &err_msg);
532
if (ret != SQLITE_OK) {
533
fprintf (stderr, "AddGeometryColumn POLYGON XYZM error: %s\n", err_msg);
534
sqlite3_free(err_msg);
535
sqlite3_close(handle);
539
ret = sqlite3_exec (handle, "INSERT INTO Polygon_Test (Name, Description, geomZM) VALUES ('Polygon 4', 'Some polygonZM', GeomFromText('POLYGONZM((136 -33 4 4, 47 2 4.2 4.4, -20 -1 1 1, 136 -33 4 4),(10 -2 4 1, -20 -0.4 1 1, 40 0.1 1.6 1, 10 -2 4 1))', 4326))", NULL, NULL, &err_msg);
540
if (ret != SQLITE_OK) {
541
fprintf (stderr, "INSERT POLYGON XYZM error: %s\n", err_msg);
542
sqlite3_free(err_msg);
543
sqlite3_close(handle);
547
ret = dump_shapefile (handle, "Polygon_Test", "geomZM", dumpname, "UTF-8", "", 1, &row_count, err_msg);
549
fprintf (stderr, "dump_shapefile() error for POLYGON XYZM: %s\n", err_msg);
550
sqlite3_close(handle);
553
cleanup_shapefile(dumpname);
445
if (ret != SQLITE_OK)
447
fprintf (stderr, "DROP TABLE MPoint_Test error: %s\n", err_msg);
448
sqlite3_free (err_msg);
449
sqlite3_close (handle);
454
sqlite3_exec (handle,
455
"CREATE TABLE Linestring_Test (Name TEXT, Description TEXT)",
456
NULL, NULL, &err_msg);
457
if (ret != SQLITE_OK)
459
fprintf (stderr, "CREATE TABLE Linestring_Test error: %s\n", err_msg);
460
sqlite3_free (err_msg);
461
sqlite3_close (handle);
466
sqlite3_exec (handle,
467
"SELECT AddGeometryColumn('Linestring_Test', 'geom', 4326, 'LINESTRING', 'XY', 0)",
468
NULL, NULL, &err_msg);
469
if (ret != SQLITE_OK)
471
fprintf (stderr, "AddGeometryColumn LINESTRING XY error: %s\n",
473
sqlite3_free (err_msg);
474
sqlite3_close (handle);
479
sqlite3_exec (handle,
480
"INSERT INTO Linestring_Test (Name, Description, geom) VALUES ('Point 1', 'Some linestring', GeomFromText('LINESTRING(136 -33, 47 2, -20, 12)', 4326))",
481
NULL, NULL, &err_msg);
482
if (ret != SQLITE_OK)
484
fprintf (stderr, "INSERT LINESTRING XY error: %s\n", err_msg);
485
sqlite3_free (err_msg);
486
sqlite3_close (handle);
491
dump_shapefile (handle, "Linestring_Test", "geom", dumpname, "UTF-8",
492
"", 1, &row_count, err_msg);
495
fprintf (stderr, "dump_shapefile() error for LINESTRING XY: %s\n",
497
sqlite3_close (handle);
500
cleanup_shapefile (dumpname);
503
sqlite3_exec (handle,
504
"SELECT AddGeometryColumn('Linestring_Test', 'geomZ', 4326, 'LINESTRING', 'XYZ', 0)",
505
NULL, NULL, &err_msg);
506
if (ret != SQLITE_OK)
508
fprintf (stderr, "AddGeometryColumn LINESTRING XYZ error: %s\n",
510
sqlite3_free (err_msg);
511
sqlite3_close (handle);
516
sqlite3_exec (handle,
517
"INSERT INTO Linestring_Test (Name, Description, geomZ) VALUES ('Point 2', 'Some linestringZ', GeomFromText('LINESTRINGZ(136 -33 3, 47 2 3.8, -20 12 10.1)', 4326))",
518
NULL, NULL, &err_msg);
519
if (ret != SQLITE_OK)
521
fprintf (stderr, "INSERT LINESTRING XYZ error: %s\n", err_msg);
522
sqlite3_free (err_msg);
523
sqlite3_close (handle);
528
dump_shapefile (handle, "Linestring_Test", "geomZ", dumpname, "UTF-8",
529
"", 1, &row_count, err_msg);
532
fprintf (stderr, "dump_shapefile() error for LINESTRING XYZ: %s\n",
534
sqlite3_close (handle);
537
cleanup_shapefile (dumpname);
540
sqlite3_exec (handle,
541
"SELECT AddGeometryColumn('Linestring_Test', 'geomM', 4326, 'LINESTRING', 'XYM', 0)",
542
NULL, NULL, &err_msg);
543
if (ret != SQLITE_OK)
545
fprintf (stderr, "AddGeometryColumn LINESTRING XYM error: %s\n",
547
sqlite3_free (err_msg);
548
sqlite3_close (handle);
553
sqlite3_exec (handle,
554
"INSERT INTO Linestring_Test (Name, Description, geomM) VALUES ('Point 3', 'Some linestringM', GeomFromText('LINESTRINGM(136 -33 3, 47 2 3.8, -20 12 10.1)', 4326))",
555
NULL, NULL, &err_msg);
556
if (ret != SQLITE_OK)
558
fprintf (stderr, "INSERT LINESTRING XYM error: %s\n", err_msg);
559
sqlite3_free (err_msg);
560
sqlite3_close (handle);
565
dump_shapefile (handle, "Linestring_Test", "geomM", dumpname, "UTF-8",
566
"", 1, &row_count, err_msg);
569
fprintf (stderr, "dump_shapefile() error for LINESTRING XYM: %s\n",
571
sqlite3_close (handle);
574
cleanup_shapefile (dumpname);
577
sqlite3_exec (handle,
578
"SELECT AddGeometryColumn('Linestring_Test', 'geomMZ', 4326, 'LINESTRING', 'XYZM', 0)",
579
NULL, NULL, &err_msg);
580
if (ret != SQLITE_OK)
582
fprintf (stderr, "AddGeometryColumn LINESTRING XYZM error: %s\n",
584
sqlite3_free (err_msg);
585
sqlite3_close (handle);
590
sqlite3_exec (handle,
591
"INSERT INTO Linestring_Test (Name, Description, geomMZ) VALUES ('Point 3', 'Some linestringZM', GeomFromText('LINESTRINGZM(136 -33 3 4.2, 47 2 3.8 1, -20 12 10.1 321)', 4326))",
592
NULL, NULL, &err_msg);
593
if (ret != SQLITE_OK)
595
fprintf (stderr, "INSERT LINESTRING XYZM error: %s\n", err_msg);
596
sqlite3_free (err_msg);
597
sqlite3_close (handle);
602
dump_shapefile (handle, "Linestring_Test", "geomMZ", dumpname, "UTF-8",
603
"", 1, &row_count, err_msg);
606
fprintf (stderr, "dump_shapefile() error for LINESTRING XYZM: %s\n",
608
sqlite3_close (handle);
611
cleanup_shapefile (dumpname);
614
sqlite3_exec (handle, "DROP TABLE Linestring_Test", NULL, NULL,
616
if (ret != SQLITE_OK)
618
fprintf (stderr, "DROP TABLE Linestring_Test error: %s\n", err_msg);
619
sqlite3_free (err_msg);
620
sqlite3_close (handle);
625
sqlite3_exec (handle,
626
"CREATE TABLE Polygon_Test (Name TEXT, Description TEXT, thing1 INTEGER, thing2 REAL, thing3 DOUBLE, thing4 BLOB)",
627
NULL, NULL, &err_msg);
628
if (ret != SQLITE_OK)
630
fprintf (stderr, "CREATE TABLE Polygon_Test error: %s\n", err_msg);
631
sqlite3_free (err_msg);
632
sqlite3_close (handle);
637
sqlite3_exec (handle,
638
"SELECT AddGeometryColumn('Polygon_Test', 'geom', 4326, 'POLYGON', 'XY', 0)",
639
NULL, NULL, &err_msg);
640
if (ret != SQLITE_OK)
642
fprintf (stderr, "AddGeometryColumn POLYGON XY error: %s\n", err_msg);
643
sqlite3_free (err_msg);
644
sqlite3_close (handle);
647
/* TODO: try dumping an empty table */
650
sqlite3_exec (handle,
651
"INSERT INTO Polygon_Test (Name, Description, thing1, thing2, thing3, thing4, geom) VALUES ('Polygon 1', 'Some polygon', 2, 4.25, 343.343, zeroblob(40), GeomFromText('POLYGON((136 -33, 47 2, -20 -1, 136 -33),(10 -2, -20 -0.4, 40 0.1, 10 -2))', 4326))",
652
NULL, NULL, &err_msg);
653
if (ret != SQLITE_OK)
655
fprintf (stderr, "INSERT POLYGON XY error: %s\n", err_msg);
656
sqlite3_free (err_msg);
657
sqlite3_close (handle);
662
dump_shapefile (handle, "Polygon_Test", "geom", dumpname, "UTF-8", "",
663
1, &row_count, err_msg);
666
fprintf (stderr, "dump_shapefile() error for POLYGON XY: %s\n",
668
sqlite3_close (handle);
671
cleanup_shapefile (dumpname);
674
sqlite3_exec (handle,
675
"SELECT AddGeometryColumn('Polygon_Test', 'geomZ', 4326, 'POLYGON', 'XYZ', 0)",
676
NULL, NULL, &err_msg);
677
if (ret != SQLITE_OK)
679
fprintf (stderr, "AddGeometryColumn POLYGON XYZ error: %s\n",
681
sqlite3_free (err_msg);
682
sqlite3_close (handle);
687
sqlite3_exec (handle,
688
"INSERT INTO Polygon_Test (Name, Description, thing1, thing2, thing3, thing4, geomZ) VALUES ('Polygon 2', 'Some polygonZ', 12, 14.25, 1343.343, zeroblob(140), GeomFromText('POLYGONZ((136 -33 4, 47 2 4.2, -20 -1 1, 136 -33 4),(10 -2 4, 40 0.1 1.6, -20 -0.4 1, 10 -2 4)', 4326))",
689
NULL, NULL, &err_msg);
690
if (ret != SQLITE_OK)
692
fprintf (stderr, "INSERT POLYGON XYZ error: %s\n", err_msg);
693
sqlite3_free (err_msg);
694
sqlite3_close (handle);
698
sqlite3_exec (handle,
699
"INSERT INTO Polygon_Test (Name, Description, geomZ) VALUES ('Polygon 2', 'wrong direction', GeomFromText('POLYGONZ((136 -33 4, 47 2 4.2, -20 -1 1, 136 -33 4),(10 -2 4, -20 -0.4 1, 40 0.1 1.6, 10 -2 4))', 4326))",
700
NULL, NULL, &err_msg);
701
if (ret != SQLITE_OK)
703
fprintf (stderr, "INSERT POLYGON XYZ 2 error: %s\n", err_msg);
704
sqlite3_free (err_msg);
705
sqlite3_close (handle);
706
return -57; /* dupe */
710
dump_shapefile (handle, "Polygon_Test", "geomZ", dumpname, "UTF-8", "",
711
1, &row_count, err_msg);
714
fprintf (stderr, "dump_shapefile() error for POLYGON XYZ: %s\n",
716
sqlite3_close (handle);
719
cleanup_shapefile (dumpname);
722
sqlite3_exec (handle,
723
"SELECT AddGeometryColumn('Polygon_Test', 'geomM', 4326, 'POLYGON', 'XYM', 0)",
724
NULL, NULL, &err_msg);
725
if (ret != SQLITE_OK)
727
fprintf (stderr, "AddGeometryColumn POLYGON XYM error: %s\n",
729
sqlite3_free (err_msg);
730
sqlite3_close (handle);
735
sqlite3_exec (handle,
736
"INSERT INTO Polygon_Test (Name, Description, geomM) VALUES ('Polygon 3', 'Some polygonM', GeomFromText('POLYGONM((136 -33 4, 47 2 4.2, -20 -1 1, 136 -33 4),(10 -2 4, -20 -0.4 1, 40 0.1 1.6, 10 -2 4))', 4326))",
737
NULL, NULL, &err_msg);
738
if (ret != SQLITE_OK)
740
fprintf (stderr, "INSERT POLYGON XYM error: %s\n", err_msg);
741
sqlite3_free (err_msg);
742
sqlite3_close (handle);
747
dump_shapefile (handle, "Polygon_Test", "geomM", dumpname, "UTF-8", "",
748
1, &row_count, err_msg);
751
fprintf (stderr, "dump_shapefile() error for POLYGON XYM: %s\n",
753
sqlite3_close (handle);
756
cleanup_shapefile (dumpname);
759
sqlite3_exec (handle,
760
"SELECT AddGeometryColumn('Polygon_Test', 'geomZM', 4326, 'POLYGON', 'XYZM', 0)",
761
NULL, NULL, &err_msg);
762
if (ret != SQLITE_OK)
764
fprintf (stderr, "AddGeometryColumn POLYGON XYZM error: %s\n",
766
sqlite3_free (err_msg);
767
sqlite3_close (handle);
772
sqlite3_exec (handle,
773
"INSERT INTO Polygon_Test (Name, Description, geomZM) VALUES ('Polygon 4', 'Some polygonZM', GeomFromText('POLYGONZM((136 -33 4 4, 47 2 4.2 4.4, -20 -1 1 1, 136 -33 4 4),(10 -2 4 1, -20 -0.4 1 1, 40 0.1 1.6 1, 10 -2 4 1))', 4326))",
774
NULL, NULL, &err_msg);
775
if (ret != SQLITE_OK)
777
fprintf (stderr, "INSERT POLYGON XYZM error: %s\n", err_msg);
778
sqlite3_free (err_msg);
779
sqlite3_close (handle);
784
dump_shapefile (handle, "Polygon_Test", "geomZM", dumpname, "UTF-8", "",
785
1, &row_count, err_msg);
788
fprintf (stderr, "dump_shapefile() error for POLYGON XYZM: %s\n",
790
sqlite3_close (handle);
793
cleanup_shapefile (dumpname);
555
795
/* testing VectorLayersList (several flavors) */
556
list = gaiaGetVectorLayersList (handle, NULL, NULL, GAIA_VECTORS_LIST_FAST);
557
gaiaFreeVectorLayersList (list);
558
list = gaiaGetVectorLayersList (handle, NULL, NULL, GAIA_VECTORS_LIST_PESSIMISTIC);
559
gaiaFreeVectorLayersList (list);
560
list = gaiaGetVectorLayersList (handle, "Polygon_Test", "geomZM", GAIA_VECTORS_LIST_FAST);
561
gaiaFreeVectorLayersList (list);
562
list = gaiaGetVectorLayersList (handle, "Polygon_Test", "geomZM", GAIA_VECTORS_LIST_OPTIMISTIC);
563
gaiaFreeVectorLayersList (list);
565
ret = sqlite3_exec (handle, "DROP TABLE Polygon_Test", NULL, NULL, &err_msg);
566
if (ret != SQLITE_OK) {
567
fprintf (stderr, "DROP TABLE Polygon_Test error: %s\n", err_msg);
568
sqlite3_free(err_msg);
569
sqlite3_close(handle);
797
gaiaGetVectorLayersList (handle, NULL, NULL,
798
GAIA_VECTORS_LIST_OPTIMISTIC);
799
gaiaFreeVectorLayersList (list);
801
gaiaGetVectorLayersList (handle, NULL, NULL,
802
GAIA_VECTORS_LIST_PESSIMISTIC);
803
gaiaFreeVectorLayersList (list);
805
gaiaGetVectorLayersList (handle, "Polygon_Test", "geomZM",
806
GAIA_VECTORS_LIST_OPTIMISTIC);
807
gaiaFreeVectorLayersList (list);
808
gaiaStatisticsInvalidate (handle, NULL, NULL);
810
gaiaGetVectorLayersList (handle, NULL, NULL,
811
GAIA_VECTORS_LIST_PESSIMISTIC);
812
gaiaFreeVectorLayersList (list);
813
gaiaStatisticsInvalidate (handle, "Polygon_Test", NULL);
815
gaiaGetVectorLayersList (handle, NULL, NULL,
816
GAIA_VECTORS_LIST_PESSIMISTIC);
817
gaiaFreeVectorLayersList (list);
818
gaiaStatisticsInvalidate (handle, "Polygon_Test", "geomZM");
820
gaiaGetVectorLayersList (handle, NULL, NULL,
821
GAIA_VECTORS_LIST_PESSIMISTIC);
822
gaiaFreeVectorLayersList (list);
823
gaiaStatisticsInvalidate (handle, "Palygon_Tost", "ZMgeom");
826
sqlite3_exec (handle, "DROP TABLE Polygon_Test", NULL, NULL, &err_msg);
827
if (ret != SQLITE_OK)
829
fprintf (stderr, "DROP TABLE Polygon_Test error: %s\n", err_msg);
830
sqlite3_free (err_msg);
831
sqlite3_close (handle);
573
835
/* final DB cleanup */
574
ret = sqlite3_exec (handle, "DELETE FROM geometry_columns", NULL, NULL, &err_msg);
575
if (ret != SQLITE_OK) {
576
fprintf (stderr, "DELETE FROM geometry_columns error: %s\n", err_msg);
577
sqlite3_free(err_msg);
578
sqlite3_close(handle);
581
ret = sqlite3_exec (handle, "DELETE FROM spatialite_history WHERE geometry_column IS NOT NULL", NULL, NULL, &err_msg);
582
if (ret != SQLITE_OK) {
583
fprintf (stderr, "DELETE FROM spatialite_history error: %s\n", err_msg);
584
sqlite3_free(err_msg);
585
sqlite3_close(handle);
837
sqlite3_exec (handle, "DELETE FROM geometry_columns", NULL, NULL,
839
if (ret != SQLITE_OK)
841
fprintf (stderr, "DELETE FROM geometry_columns error: %s\n", err_msg);
842
sqlite3_free (err_msg);
843
sqlite3_close (handle);
847
sqlite3_exec (handle,
848
"DELETE FROM spatialite_history WHERE geometry_column IS NOT NULL",
849
NULL, NULL, &err_msg);
850
if (ret != SQLITE_OK)
852
fprintf (stderr, "DELETE FROM spatialite_history error: %s\n",
854
sqlite3_free (err_msg);
855
sqlite3_close (handle);
588
858
ret = sqlite3_exec (handle, "VACUUM", NULL, NULL, &err_msg);
589
if (ret != SQLITE_OK) {
590
fprintf (stderr, "VACUUM error: %s\n", err_msg);
591
sqlite3_free(err_msg);
592
sqlite3_close(handle);
595
#endif /* end ICONV conditional */
859
if (ret != SQLITE_OK)
861
fprintf (stderr, "VACUUM error: %s\n", err_msg);
862
sqlite3_free (err_msg);
863
sqlite3_close (handle);
866
#endif /* end ICONV conditional */
597
868
/* ok, succesfull termination */
601
int main (int argc, char *argv[])
873
main (int argc, char *argv[])
603
#ifndef OMIT_ICONV /* only if ICONV is supported */
875
#ifndef OMIT_ICONV /* only if ICONV is supported */
604
876
#ifdef ENABLE_LWGEOM /* only if LWGEOM is supported */
607
879
char *err_msg = NULL;
608
void *cache = spatialite_alloc_connection();
880
void *cache = spatialite_alloc_connection ();
610
882
if (argc > 1 || argv[0] == NULL)
611
883
argc = 1; /* silencing stupid compiler warnings */
613
885
/* testing current style metadata layout >= v.4.0.0 */
614
ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
615
if (ret != SQLITE_OK) {
616
fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
617
sqlite3_close(handle);
887
sqlite3_open_v2 (":memory:", &handle,
888
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
889
if (ret != SQLITE_OK)
891
fprintf (stderr, "cannot open in-memory database: %s\n",
892
sqlite3_errmsg (handle));
893
sqlite3_close (handle);
621
897
spatialite_init_ex (handle, cache, 0);
623
ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata(1)", NULL, NULL, &err_msg);
624
if (ret != SQLITE_OK) {
625
fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
626
sqlite3_free(err_msg);
627
sqlite3_close(handle);
631
ret = do_test(handle);
633
fprintf(stderr, "error while testing current style metadata layout\n");
900
sqlite3_exec (handle, "SELECT InitSpatialMetadata(1)", NULL, NULL,
902
if (ret != SQLITE_OK)
904
fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
905
sqlite3_free (err_msg);
906
sqlite3_close (handle);
910
ret = do_test (handle);
914
"error while testing current style metadata layout\n");
637
918
spatialite_cleanup_ex (cache);
638
sqlite3_close(handle);
919
sqlite3_close (handle);
640
921
/* testing legacy style metadata layout <= v.3.1.0 */
641
cache = spatialite_alloc_connection();
642
ret = system("cp test-legacy-3.0.1.sqlite copy-legacy-3.0.1.sqlite");
922
cache = spatialite_alloc_connection ();
925
("cp test-legacy-3.0.1.sqlite copy-primitives-legacy-3.0.1.sqlite");
645
fprintf(stderr, "cannot copy legacy v.3.0.1 database\n");
648
ret = sqlite3_open_v2 ("copy-legacy-3.0.1.sqlite", &handle, SQLITE_OPEN_READWRITE, NULL);
649
if (ret != SQLITE_OK) {
650
fprintf(stderr, "cannot open legacy v.3.0.1 database: %s\n", sqlite3_errmsg (handle));
651
sqlite3_close(handle);
928
fprintf (stderr, "cannot copy legacy v.3.0.1 database\n");
932
sqlite3_open_v2 ("copy-primitives-legacy-3.0.1.sqlite", &handle,
933
SQLITE_OPEN_READWRITE, NULL);
934
if (ret != SQLITE_OK)
936
fprintf (stderr, "cannot open legacy v.3.0.1 database: %s\n",
937
sqlite3_errmsg (handle));
938
sqlite3_close (handle);
655
942
spatialite_init_ex (handle, cache, 0);
657
ret = do_test(handle);
659
fprintf(stderr, "error while testing legacy style metadata layout\n");
944
ret = do_test (handle);
948
"error while testing legacy style metadata layout\n");
663
952
spatialite_cleanup_ex (cache);
664
sqlite3_close(handle);
665
ret = unlink("copy-legacy-3.0.1.sqlite");
953
sqlite3_close (handle);
954
ret = unlink ("copy-primitives-legacy-3.0.1.sqlite");
668
fprintf(stderr, "cannot remove legacy v.3.0.1 database\n");
957
fprintf (stderr, "cannot remove legacy v.3.0.1 database\n");
672
961
/* testing invalid geometries [check/repair] */
673
cache = spatialite_alloc_connection();
674
ret = system("cp test-invalid.sqlite copy-invalid.sqlite");
962
cache = spatialite_alloc_connection ();
963
ret = system ("cp test-invalid.sqlite copy-invalid.sqlite");
677
fprintf(stderr, "cannot copy invalid-geoms database\n");
680
ret = sqlite3_open_v2 ("copy-invalid.sqlite", &handle, SQLITE_OPEN_READWRITE, NULL);
681
if (ret != SQLITE_OK) {
682
fprintf(stderr, "cannot open invalid-geoms database: %s\n", sqlite3_errmsg (handle));
683
sqlite3_close(handle);
966
fprintf (stderr, "cannot copy invalid-geoms database\n");
970
sqlite3_open_v2 ("copy-invalid.sqlite", &handle, SQLITE_OPEN_READWRITE,
972
if (ret != SQLITE_OK)
974
fprintf (stderr, "cannot open invalid-geoms database: %s\n",
975
sqlite3_errmsg (handle));
976
sqlite3_close (handle);
687
980
spatialite_init_ex (handle, cache, 0);
982
ret = check_all_geometry_columns_r (cache, handle, "./report", NULL, NULL);
985
fprintf (stderr, "check_all_geometry_columns() error\n");
986
sqlite3_close (handle);
991
sanitize_all_geometry_columns_r (cache, handle, "tmp_", "./report",
995
fprintf (stderr, "sanitize_all_geometry_columns() error\n");
996
sqlite3_close (handle);
1000
spatialite_cleanup_ex (cache);
1001
sqlite3_close (handle);
1002
ret = unlink ("copy-invalid.sqlite");
1005
fprintf (stderr, "cannot remove invalid-geoms database\n");
1009
/* testing invalid geometries [check/repair] - legacy mode */
1010
spatialite_init (0);
1011
ret = system ("cp test-invalid.sqlite copy-invalid.sqlite");
1014
fprintf (stderr, "cannot copy invalid-geoms database\n");
1018
sqlite3_open_v2 ("copy-invalid.sqlite", &handle, SQLITE_OPEN_READWRITE,
1020
if (ret != SQLITE_OK)
1022
fprintf (stderr, "cannot open invalid-geoms database: %s\n",
1023
sqlite3_errmsg (handle));
1024
sqlite3_close (handle);
689
1028
ret = check_all_geometry_columns (handle, "./report", NULL, NULL);
691
fprintf (stderr, "check_all_geometry_columns() error\n");
692
sqlite3_close(handle);
696
ret = sanitize_all_geometry_columns (handle, "tmp_", "./report", NULL, NULL);
698
fprintf (stderr, "sanitize_all_geometry_columns() error\n");
699
sqlite3_close(handle);
703
spatialite_cleanup_ex (cache);
704
sqlite3_close(handle);
705
ret = unlink("copy-invalid.sqlite");
1031
fprintf (stderr, "check_all_geometry_columns() error\n");
1032
sqlite3_close (handle);
1037
sanitize_all_geometry_columns (handle, "tmp_", "./report", NULL, NULL);
1040
fprintf (stderr, "sanitize_all_geometry_columns() error\n");
1041
sqlite3_close (handle);
1045
spatialite_cleanup ();
1046
sqlite3_close (handle);
1047
ret = unlink ("copy-invalid.sqlite");
708
fprintf(stderr, "cannot remove invalid-geoms database\n");
1050
fprintf (stderr, "cannot remove invalid-geoms database\n");
712
1054
/* testing legacy style metadata layout (v.2.3.1) */
713
cache = spatialite_alloc_connection();
714
ret = system("cp test-legacy-2.3.1.sqlite copy-legacy-2.3.1.sqlite");
1055
cache = spatialite_alloc_connection ();
1056
ret = system ("cp test-legacy-2.3.1.sqlite copy-legacy-2.3.1.sqlite");
717
fprintf(stderr, "cannot copy legacy v.2.3.1 database\n");
720
ret = sqlite3_open_v2 ("copy-legacy-2.3.1.sqlite", &handle, SQLITE_OPEN_READWRITE, NULL);
721
if (ret != SQLITE_OK) {
722
fprintf(stderr, "cannot open legacy v.2.3.1 database: %s\n", sqlite3_errmsg (handle));
723
sqlite3_close(handle);
1059
fprintf (stderr, "cannot copy legacy v.2.3.1 database\n");
1063
sqlite3_open_v2 ("copy-legacy-2.3.1.sqlite", &handle,
1064
SQLITE_OPEN_READWRITE, NULL);
1065
if (ret != SQLITE_OK)
1067
fprintf (stderr, "cannot open legacy v.2.3.1 database: %s\n",
1068
sqlite3_errmsg (handle));
1069
sqlite3_close (handle);
727
1073
spatialite_init_ex (handle, cache, 0);
729
ret = do_test(handle);
731
fprintf(stderr, "error while testing legacy (2.3.1) style metadata layout\n");
1075
ret = do_test (handle);
1079
"error while testing legacy (2.3.1) style metadata layout\n");
735
1083
spatialite_cleanup_ex (cache);
736
sqlite3_close(handle);
737
ret = unlink("copy-legacy-2.3.1.sqlite");
1084
sqlite3_close (handle);
1085
ret = unlink ("copy-legacy-2.3.1.sqlite");
740
fprintf(stderr, "cannot remove legacy v.2.3.1 database\n");
1088
fprintf (stderr, "cannot remove legacy v.2.3.1 database\n");
744
1092
#endif /* end LWGEOM conditionals */
745
#endif /* end ICONV conditional */
1093
#endif /* end ICONV conditional */
1095
spatialite_shutdown ();