71
void *cache = spatialite_alloc_connection();
73
if (argc > 1 || argv[0] == NULL)
74
argc = 1; /* silencing stupid compiler warnings */
76
ret = system("cp sql_stmt_tests/testFDO.sqlite testFDO.sqlite");
74
cache = spatialite_alloc_connection ();
78
ret = system ("cp sql_stmt_tests/testFDO.sqlite testFDO.sqlite");
79
fprintf(stderr, "cannot copy testFDO.sqlite database\n");
83
ret = sqlite3_open_v2 ("testFDO.sqlite", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
84
if (ret != SQLITE_OK) {
85
fprintf(stderr, "cannot open testFDO.sqlite db: %s\n", sqlite3_errmsg (handle));
86
sqlite3_close(handle);
90
spatialite_init_ex (handle, cache, 0);
81
fprintf (stderr, "cannot copy testFDO.sqlite database\n");
86
sqlite3_open_v2 ("testFDO.sqlite", &handle,
87
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
90
fprintf (stderr, "cannot open testFDO.sqlite db: %s\n",
91
sqlite3_errmsg (handle));
92
sqlite3_close (handle);
97
spatialite_init_ex (handle, cache, 0);
93
100
sql = "SELECT AutoFDOStart()";
94
101
ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
95
if (ret != SQLITE_OK) {
96
fprintf (stderr, "Error: %s\n", err_msg);
97
sqlite3_free (err_msg);
102
if (ret != SQLITE_OK)
104
fprintf (stderr, "Error: %s\n", err_msg);
105
sqlite3_free (err_msg);
101
109
/* testing aggregate Union() PointZ WKT "p02" */
102
110
sql = "SELECT AsText(ST_Union(WKT_GEOMETRY)) FROM fdo_p02";
103
111
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
104
if (ret != SQLITE_OK) {
105
fprintf (stderr, "Error: %s\n", err_msg);
106
sqlite3_free (err_msg);
109
if ((rows != 1) || (columns != 1)) {
110
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
113
if (results[1] == NULL) {
114
fprintf (stderr, "Unexpected error: NULL result\n");
117
if (strcmp(results[1], "MULTIPOINT Z(664350.17954 5171957.915655 314.52, 664642.363686 5169415.339218 294.37, 664964.447225 5170571.245732 318.25)") != 0) {
118
fprintf (stderr, "Unexpected error: invalid result |%s|\n", results[1]);
112
if (ret != SQLITE_OK)
114
fprintf (stderr, "Error: %s\n", err_msg);
115
sqlite3_free (err_msg);
118
if ((rows != 1) || (columns != 1))
120
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
124
if (results[1] == NULL)
126
fprintf (stderr, "Unexpected error: NULL result\n");
131
"MULTIPOINT Z(664350.17954 5171957.915655 314.52, 664642.363686 5169415.339218 294.37, 664964.447225 5170571.245732 318.25)")
134
fprintf (stderr, "Unexpected error: invalid result %s\n", results[1]);
121
137
sqlite3_free_table (results);
123
139
/* testing aggregate Union() PointZ WKB "p03" */
124
sql = "SELECT AsText(ST_Union(GEOMETRY)) FROM fdo_p03 WHERE text_dil IS NULL AND OGC_FID < 3";
141
"SELECT AsText(ST_Union(GEOMETRY)) FROM fdo_p03 WHERE text_dil IS NULL AND OGC_FID < 3";
125
142
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
126
if (ret != SQLITE_OK) {
127
fprintf (stderr, "Error: %s\n", err_msg);
128
sqlite3_free (err_msg);
131
if ((rows != 1) || (columns != 1)) {
132
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
135
if (results[1] == NULL) {
136
fprintf (stderr, "Unexpected error: NULL result\n");
139
if (strcmp(results[1], "MULTIPOINT Z(665216.306643 5169825.707161 296.06, 665224.506512 5169827.907054 296.16)") != 0) {
140
fprintf (stderr, "Unexpected error: invalid result |%s|\n", results[1]);
143
if (ret != SQLITE_OK)
145
fprintf (stderr, "Error: %s\n", err_msg);
146
sqlite3_free (err_msg);
149
if ((rows != 1) || (columns != 1))
151
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
155
if (results[1] == NULL)
157
fprintf (stderr, "Unexpected error: NULL result\n");
162
"MULTIPOINT Z(665216.306643 5169825.707161 296.06, 665224.506512 5169827.907054 296.16)")
165
fprintf (stderr, "Unexpected error: invalid result |%s|\n",
143
169
sqlite3_free_table (results);
145
171
/* testing aggregate Union() PointZ SpatiaLite "p05" */
146
sql = "SELECT AsText(ST_Union(GEOMETRY)) FROM fdo_p05 WHERE text_dil IS NULL AND OGC_FID < 3";
173
"SELECT AsText(ST_Union(GEOMETRY)) FROM fdo_p05 WHERE text_dil IS NULL AND OGC_FID < 3";
147
174
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
148
if (ret != SQLITE_OK) {
149
fprintf (stderr, "Error: %s\n", err_msg);
150
sqlite3_free (err_msg);
153
if ((rows != 1) || (columns != 1)) {
154
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
157
if (results[1] == NULL) {
158
fprintf (stderr, "Unexpected error: NULL result |%s|\n", results[1]);
161
if (strcmp(results[1], "MULTIPOINT Z(667687.978175 5169352.045712 583.140015, 667710.008189 5169402.894615 589.849976)") != 0) {
162
fprintf (stderr, "Unexpected error: invalid result b|%s|\n", results[1]);
175
if (ret != SQLITE_OK)
177
fprintf (stderr, "Error: %s\n", err_msg);
178
sqlite3_free (err_msg);
181
if ((rows != 1) || (columns != 1))
183
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
187
if (results[1] == NULL)
189
fprintf (stderr, "Unexpected error: NULL result %s\n", results[1]);
194
"MULTIPOINT Z(667687.978175 5169352.045712 583.140015, 667710.008189 5169402.894615 589.849976)")
197
fprintf (stderr, "Unexpected error: invalid result b|%s|\n",
165
201
sqlite3_free_table (results);
167
203
/* testing Sum(GLength()) LinestringZ WKT "l05" */
168
204
sql = "SELECT Sum(GLength(WKT_GEOMETRY)) FROM fdo_l05";
169
205
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
170
if (ret != SQLITE_OK) {
171
fprintf (stderr, "Error: %s\n", err_msg);
172
sqlite3_free (err_msg);
175
if ((rows != 1) || (columns != 1)) {
176
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
179
if (results[1] == NULL) {
180
fprintf (stderr, "Unexpected error: NULL result\n");
183
if (strncmp(results[1], "59.417763", 9) != 0) {
184
fprintf (stderr, "Unexpected error: invalid result\n");
206
if (ret != SQLITE_OK)
208
fprintf (stderr, "Error: %s\n", err_msg);
209
sqlite3_free (err_msg);
212
if ((rows != 1) || (columns != 1))
214
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
218
if (results[1] == NULL)
220
fprintf (stderr, "Unexpected error: NULL result\n");
223
if (strncmp (results[1], "59.417763", 9) != 0)
225
fprintf (stderr, "Unexpected error: invalid result\n");
187
228
sqlite3_free_table (results);
189
230
/* testing Sum(GLength()) LinestringZ WKB "l06" */
190
231
sql = "SELECT Sum(GLength(GEOMETRY)) FROM fdo_l06";
191
232
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
192
if (ret != SQLITE_OK) {
193
fprintf (stderr, "Error: %s\n", err_msg);
194
sqlite3_free (err_msg);
197
if ((rows != 1) || (columns != 1)) {
198
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
201
if (results[1] == NULL) {
202
fprintf (stderr, "Unexpected error: NULL result\n");
205
if (strncmp(results[1], "273.076064", 10) != 0) {
206
fprintf (stderr, "Unexpected error: invalid result\n");
233
if (ret != SQLITE_OK)
235
fprintf (stderr, "Error: %s\n", err_msg);
236
sqlite3_free (err_msg);
239
if ((rows != 1) || (columns != 1))
241
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
245
if (results[1] == NULL)
247
fprintf (stderr, "Unexpected error: NULL result\n");
250
if (strncmp (results[1], "273.076064", 10) != 0)
252
fprintf (stderr, "Unexpected error: invalid result\n");
209
255
sqlite3_free_table (results);
211
257
/* testing Sum(GLength()) LinestringZ SpatiaLite "l07" */
212
258
sql = "SELECT Sum(GLength(GEOMETRY)) FROM fdo_l07";
213
259
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
214
if (ret != SQLITE_OK) {
215
fprintf (stderr, "Error: %s\n", err_msg);
216
sqlite3_free (err_msg);
219
if ((rows != 1) || (columns != 1)) {
220
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
223
if (results[1] == NULL) {
224
fprintf (stderr, "Unexpected error: NULL result\n");
227
if (strncmp(results[1], "219.459808", 10) != 0) {
228
fprintf (stderr, "Unexpected error: invalid result\n");
260
if (ret != SQLITE_OK)
262
fprintf (stderr, "Error: %s\n", err_msg);
263
sqlite3_free (err_msg);
266
if ((rows != 1) || (columns != 1))
268
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
272
if (results[1] == NULL)
274
fprintf (stderr, "Unexpected error: NULL result\n");
277
if (strncmp (results[1], "219.459808", 10) != 0)
279
fprintf (stderr, "Unexpected error: invalid result\n");
231
282
sqlite3_free_table (results);
233
284
/* testing Sum(Area()) PolygonZ WKT "f04" */
234
285
sql = "SELECT Sum(Area(WKT_GEOMETRY)) FROM fdo_f04";
235
286
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
236
if (ret != SQLITE_OK) {
237
fprintf (stderr, "Error: %s\n", err_msg);
238
sqlite3_free (err_msg);
241
if ((rows != 1) || (columns != 1)) {
242
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
245
if (results[1] == NULL) {
246
fprintf (stderr, "Unexpected error: NULL result\n");
249
if (strncmp(results[1], "9960.931239", 11) != 0) {
250
fprintf (stderr, "Unexpected error: invalid result\n");
287
if (ret != SQLITE_OK)
289
fprintf (stderr, "Error: %s\n", err_msg);
290
sqlite3_free (err_msg);
293
if ((rows != 1) || (columns != 1))
295
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
299
if (results[1] == NULL)
301
fprintf (stderr, "Unexpected error: NULL result\n");
304
if (strncmp (results[1], "9960.931239", 11) != 0)
306
fprintf (stderr, "Unexpected error: invalid result\n");
253
309
sqlite3_free_table (results);
255
311
/* testing Sum(Area()) PolygonZ WKB "f05" */
256
312
sql = "SELECT Sum(Area(GEOMETRY)) FROM fdo_f05";
257
313
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
258
if (ret != SQLITE_OK) {
259
fprintf (stderr, "Error: %s\n", err_msg);
260
sqlite3_free (err_msg);
263
if ((rows != 1) || (columns != 1)) {
264
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
267
if (results[1] == NULL) {
268
fprintf (stderr, "Unexpected error: NULL result\n");
271
if (strncmp(results[1], "69972.113393", 12) != 0) {
272
fprintf (stderr, "Unexpected error: invalid result\n");
314
if (ret != SQLITE_OK)
316
fprintf (stderr, "Error: %s\n", err_msg);
317
sqlite3_free (err_msg);
320
if ((rows != 1) || (columns != 1))
322
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
326
if (results[1] == NULL)
328
fprintf (stderr, "Unexpected error: NULL result\n");
331
if (strncmp (results[1], "69972.113393", 12) != 0)
333
fprintf (stderr, "Unexpected error: invalid result\n");
275
336
sqlite3_free_table (results);
277
338
/* testing Sum(Area()) PolygonZ SpatiaLite "f06" */
278
339
sql = "SELECT Sum(Area(GEOMETRY)) FROM fdo_f06";
279
340
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
280
if (ret != SQLITE_OK) {
281
fprintf (stderr, "Error: %s\n", err_msg);
282
sqlite3_free (err_msg);
285
if ((rows != 1) || (columns != 1)) {
286
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
289
if (results[1] == NULL) {
290
fprintf (stderr, "Unexpected error: NULL result\n");
293
if (strncmp(results[1], "1125.064396", 11) != 0) {
294
fprintf (stderr, "Unexpected error: invalid result\n");
341
if (ret != SQLITE_OK)
343
fprintf (stderr, "Error: %s\n", err_msg);
344
sqlite3_free (err_msg);
347
if ((rows != 1) || (columns != 1))
349
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
353
if (results[1] == NULL)
355
fprintf (stderr, "Unexpected error: NULL result\n");
358
if (strncmp (results[1], "1125.064396", 11) != 0)
360
fprintf (stderr, "Unexpected error: invalid result\n");
297
363
sqlite3_free_table (results);
299
365
/* testing IsValid() LinestringZ WKB "l06" */
300
366
sql = "SELECT IsValid(GEOMETRY) FROM fdo_l06";
301
367
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
302
if (ret != SQLITE_OK) {
303
fprintf (stderr, "Error: %s\n", err_msg);
304
sqlite3_free (err_msg);
307
if ((rows != 12) || (columns != 1)) {
308
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
368
if (ret != SQLITE_OK)
370
fprintf (stderr, "Error: %s\n", err_msg);
371
sqlite3_free (err_msg);
374
if ((rows != 12) || (columns != 1))
376
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
311
380
for (i = 1; i <= rows; i++)
313
if (results[i] == NULL) {
314
fprintf (stderr, "Unexpected error: NULL result\n");
317
if (strcmp(results[i], "0") == 0) {
318
const char *geos_msg = gaiaGetGeosErrorMsg();
319
if (geos_msg == NULL)
320
geos_msg = gaiaGetGeosWarningMsg();
321
if (geos_msg == NULL) {
322
fprintf (stderr, "Unexpected error: invalid result\n");
382
if (results[i] == NULL)
384
fprintf (stderr, "Unexpected error: NULL result\n");
387
if (strcmp (results[i], "0") == 0)
389
const char *geos_msg;
391
geos_msg = gaiaGetGeosErrorMsg ();
393
geos_msg = gaiaGetGeosErrorMsg_r (cache);
394
if (geos_msg == NULL)
397
geos_msg = gaiaGetGeosWarningMsg ();
399
geos_msg = gaiaGetGeosWarningMsg_r (cache);
401
if (geos_msg == NULL)
403
fprintf (stderr, "Unexpected error: invalid result\n");
327
408
sqlite3_free_table (results);
329
410
/* testing IsValid() PolygonZ WKT "f04" */
330
411
sql = "SELECT IsValid(WKT_GEOMETRY) FROM fdo_f04";
331
412
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
332
if (ret != SQLITE_OK) {
333
fprintf (stderr, "Error: %s\n", err_msg);
334
sqlite3_free (err_msg);
337
if ((rows != 16) || (columns != 1)) {
338
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
413
if (ret != SQLITE_OK)
415
fprintf (stderr, "Error: %s\n", err_msg);
416
sqlite3_free (err_msg);
419
if ((rows != 16) || (columns != 1))
421
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
341
425
for (i = 1; i <= rows; i++)
343
if (results[i] == NULL) {
344
fprintf (stderr, "Unexpected error: NULL result\n");
347
if (strcmp(results[i], "0") == 0) {
348
const char *geos_msg = gaiaGetGeosErrorMsg();
349
if (geos_msg == NULL)
350
geos_msg = gaiaGetGeosWarningMsg();
351
if (geos_msg == NULL) {
352
fprintf (stderr, "Unexpected error: invalid result\n");
427
if (results[i] == NULL)
429
fprintf (stderr, "Unexpected error: NULL result\n");
432
if (strcmp (results[i], "0") == 0)
434
const char *geos_msg;
436
geos_msg = gaiaGetGeosErrorMsg ();
438
geos_msg = gaiaGetGeosErrorMsg_r (cache);
439
if (geos_msg == NULL)
442
geos_msg = gaiaGetGeosWarningMsg ();
444
geos_msg = gaiaGetGeosWarningMsg_r (cache);
446
if (geos_msg == NULL)
448
fprintf (stderr, "Unexpected error: invalid result\n");
357
453
sqlite3_free_table (results);
359
455
/* testing IsValid() PolygonZ WKB "f05" */
360
456
sql = "SELECT IsValid(GEOMETRY) FROM fdo_f05";
361
457
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
362
if (ret != SQLITE_OK) {
363
fprintf (stderr, "Error: %s\n", err_msg);
364
sqlite3_free (err_msg);
367
if ((rows != 13) || (columns != 1)) {
368
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
458
if (ret != SQLITE_OK)
460
fprintf (stderr, "Error: %s\n", err_msg);
461
sqlite3_free (err_msg);
464
if ((rows != 13) || (columns != 1))
466
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
371
470
for (i = 1; i <= rows; i++)
373
if (results[i] == NULL) {
374
fprintf (stderr, "Unexpected error: NULL result\n");
377
if (strcmp(results[i], "0") == 0) {
378
const char *geos_msg = gaiaGetGeosErrorMsg();
379
if (geos_msg == NULL)
380
geos_msg = gaiaGetGeosWarningMsg();
381
if (geos_msg == NULL) {
382
fprintf (stderr, "Unexpected error: invalid result\n");
472
if (results[i] == NULL)
474
fprintf (stderr, "Unexpected error: NULL result\n");
477
if (strcmp (results[i], "0") == 0)
479
const char *geos_msg;
481
geos_msg = gaiaGetGeosErrorMsg ();
483
geos_msg = gaiaGetGeosErrorMsg_r (cache);
484
if (geos_msg == NULL)
487
geos_msg = gaiaGetGeosWarningMsg ();
489
geos_msg = gaiaGetGeosWarningMsg_r (cache);
491
if (geos_msg == NULL)
493
fprintf (stderr, "Unexpected error: invalid result\n");
387
498
sqlite3_free_table (results);
389
500
/* testing DOUBLE and TEXT columns */
390
501
sql = "SELECT datum, hoehe FROM fdo_p05 WHERE OGC_FID = 5";
391
502
ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
392
if (ret != SQLITE_OK) {
393
fprintf (stderr, "Error: %s\n", err_msg);
394
sqlite3_free (err_msg);
397
if ((rows != 1) || (columns != 2)) {
398
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows, columns);
401
if (results[2] == NULL) {
402
fprintf (stderr, "Unexpected error: NULL result\n");
405
if (strcmp(results[2], "1997/03/07") != 0) {
406
fprintf (stderr, "Unexpected error: invalid result\n");
409
if (results[3] == NULL) {
410
fprintf (stderr, "Unexpected error: NULL result\n");
413
if (strcmp(results[3], "277.55") != 0) {
414
fprintf (stderr, "Unexpected error: invalid result\n");
503
if (ret != SQLITE_OK)
505
fprintf (stderr, "Error: %s\n", err_msg);
506
sqlite3_free (err_msg);
509
if ((rows != 1) || (columns != 2))
511
fprintf (stderr, "Unexpected error: bad result: %i/%i.\n", rows,
515
if (results[2] == NULL)
517
fprintf (stderr, "Unexpected error: NULL result\n");
520
if (strcmp (results[2], "1997/03/07") != 0)
522
fprintf (stderr, "Unexpected error: invalid result\n");
525
if (results[3] == NULL)
527
fprintf (stderr, "Unexpected error: NULL result\n");
530
if (strcmp (results[3], "277.55") != 0)
532
fprintf (stderr, "Unexpected error: invalid result\n");
417
535
sqlite3_free_table (results);
419
537
/* FDO shut-down */
420
538
sql = "SELECT AutoFDOStop()";
421
539
ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
422
if (ret != SQLITE_OK) {
423
fprintf (stderr, "Error: %s\n", err_msg);
424
sqlite3_free (err_msg);
540
if (ret != SQLITE_OK)
542
fprintf (stderr, "Error: %s\n", err_msg);
543
sqlite3_free (err_msg);
428
547
ret = sqlite3_close (handle);
429
if (ret != SQLITE_OK) {
430
fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
548
if (ret != SQLITE_OK)
550
fprintf (stderr, "sqlite3_close() error: %s\n",
551
sqlite3_errmsg (handle));
434
555
spatialite_cleanup_ex (cache);
435
ret = unlink("testFDO.sqlite");
438
fprintf(stderr, "cannot remove testFDO database\n");
441
#endif /* end GEOS conditional */
556
ret = unlink ("testFDO.sqlite");
559
fprintf (stderr, "cannot remove testFDO database\n");
562
#endif /* end GEOS conditional */
568
main (int argc, char *argv[])
572
if (argc > 1 || argv[0] == NULL)
573
argc = 1; /* silencing stupid compiler warnings */
575
fprintf (stderr, "********* testing in current mode\n");
580
fprintf (stderr, "********* testing in legacy mode\n");
585
spatialite_shutdown ();