QgsScopedSqlite::QgsScopedSqlite( const QString& path, bool withExtension )
{
  if ( withExtension )
  {
    // register a statically-linked function as extension
    // for all future database connection
    sqlite3_auto_extension( reinterpret_cast < void( * )() > ( qgsvlayerModuleInit ) );
  }
  int r;
  r = sqlite3_open( path.toLocal8Bit().constData(), &db_ );
  if ( withExtension )
  {
    // reset the automatic extensions
    sqlite3_reset_auto_extension();
  }

  if ( r )
  {
    QString err = QString( "%1 [%2]" ).arg( sqlite3_errmsg( db_ ), path );
    QgsDebugMsg( err );
    throw std::runtime_error( err.toLocal8Bit().constData() );
  }
  // enable extended result codes
  sqlite3_extended_result_codes( db_, 1 );
}
ikptr
ik_sqlite3_reset_auto_extension (ikpcb * pcb)
{
#ifdef HAVE_SQLITE3_RESET_AUTO_EXTENSION
  sqlite3_reset_auto_extension();
  return IK_VOID_OBJECT;
#else
  feature_failure(__func__);
#endif
}
Exemplo n.º 3
0
int main (int argc, char *argv[])
{
    spatialite_init(0);
    spatialite_cleanup();
    
    spatialite_init(1);
    spatialite_cleanup();
    
    sqlite3_reset_auto_extension();
    
    return 0;
}
Exemplo n.º 4
0
SPATIALITE_DECLARE void
spatialite_cleanup ()
{
/* OBSOLETE - strongly discouraged !!!!!
   always using spatialite_cleanup_ex() as a replacement
   is warmly reccomended
*/

#ifndef OMIT_GEOS
    finishGEOS ();
#endif

#ifdef ENABLE_LWGEOM
    gaiaResetLwGeomMsg ();
#endif

    sqlite3_reset_auto_extension ();
}
Exemplo n.º 5
0
int main (int argc, char *argv[])
{
    sqlite3 *db_handle = NULL;
    char *sql_statement;
    int ret;
    char *err_msg = NULL;
    int i;
    char **results;
    int rows;
    int columns;

    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
      sqlite3_close (db_handle);
      db_handle = NULL;
      return -1;
    }
    
    sqlite3_enable_load_extension (db_handle, 1);
    
    asprintf(&sql_statement, "SELECT load_extension('libspatialite.so')");
    ret = sqlite3_exec (db_handle, sql_statement, NULL, NULL, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "load_extension() error: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -2;
    }

    asprintf(&sql_statement, "SELECT spatialite_version()");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -10;
    }
    if ((rows != 1) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: spatialite_version() bad result: %i/%i.\n", rows, columns);
	return  -11;
    }
    if (strcmp(results[1], VERSION) != 0) {
	fprintf (stderr, "Unexpected error: spatialite_version() bad result: %s.\n", results[1]);
	return  -12;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "SELECT geos_version()");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error2: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -13;
    }
    if ((rows != 1) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: geos_version() bad result: %i/%i.\n", rows, columns);
	return  -14;
    }
    /* we tolerate any string here, because versions always change */
    if (strlen(results[1]) == 0) {
	fprintf (stderr, "Unexpected error: geos_version() bad result.\n");
	return  -15;
    }
    sqlite3_free_table (results);

    
    asprintf(&sql_statement, "SELECT proj4_version()");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error3: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -14;
    }
    if ((rows != 1) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: proj4_version() bad result: %i/%i.\n", rows, columns);
	return  -14;
    }
    /* we tolerate any string here, because versions always change */
    if (strlen(results[1]) == 0) {
	fprintf (stderr, "Unexpected error: proj4_version() bad result.\n");
	return  -15;
    }
    sqlite3_free_table (results);
 
    sqlite3_close (db_handle);
    
    sqlite3_reset_auto_extension();
    
    return 0;
}
Exemplo n.º 6
0
int main (int argc, char *argv[])
{
    int ret;
    sqlite3 *handle;
    char *err_msg = NULL;
    int row_count;
    char **results;
    int rows;
    int columns;

    spatialite_init (0);
    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
	sqlite3_close(handle);
	return -1;
    }
    
    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
	sqlite3_free(err_msg);
	sqlite3_close(handle);
	return -2;
    }

    ret = load_shapefile (handle, "shp/foggia/local_councils", "Councils",
			  "CP1252", 23032, "geom", 1, 0, 1, 0, &row_count,
			  err_msg);
    if (!ret) {
        fprintf (stderr, "load_shapefile() error: %s\n", err_msg);
	sqlite3_close(handle);
	return -3;
    }
    if (row_count != 61) {
	fprintf (stderr, "unexpected number of rows loaded: %i\n", row_count);
	sqlite3_close(handle);
	return -4;
    }
    
    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE MbrWithin(geom, BuildMbr(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -5;
    }
    if ((rows != 22) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: select lc_name bad result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return  -6;
    }
    if (strcmp(results[1], "Ascoli Satriano") != 0) {
	fprintf (stderr, "unexpected result at 1: %s\n", results[1]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -7;
    }
    if (strcmp(results[22], "Zapponeta") != 0) {
	fprintf (stderr, "unexpected result at 22: %s\n", results[22]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -8;
    }
    sqlite3_free_table (results);

    ret = sqlite3_exec (handle, "SELECT CreateMbrCache('Councils', 'geom');",
			NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "CreateMbrCache error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -9;
    }

    rows = 0;
    columns = 0;
    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -14;
    }
    if ((rows != 22) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return  -15;
    }
    if (strcmp(results[1], "Ascoli Satriano") != 0) {
	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -16;
    }
    if (strcmp(results[22], "Zapponeta") != 0) {
	fprintf (stderr, "unexpected mbr result at 22: %s\n", results[22]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -17;
    }
    sqlite3_free_table (results);

    rows = 0;
    columns = 0;
    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrContains(997226.750031, 4627372.000018, 997226.750031, 4627372.000018)) ORDER BY lc_name;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error in Mbr SELECT Contains: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -18;
    }
    if ((rows != 1) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return  -19;
    }
    if (strcmp(results[1], "Carlantino") != 0) {
	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -20;
    }
    sqlite3_free_table (results);

    rows = 0;
    columns = 0;
    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrIntersects(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -21;
    }
    if ((rows != 35) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return  -22;
    }
    if (strcmp(results[1], "Apricena") != 0) {
	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -23;
    }
    sqlite3_free_table (results);

    ret = sqlite3_exec (handle, "DELETE FROM Councils WHERE lc_name = 'Zapponeta';",
			NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DELETE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -24;
    }

    rows = 0;
    columns = 0;
    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -25;
    }
    if ((rows != 21) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return  -26;
    }
    if (strcmp(results[1], "Ascoli Satriano") != 0) {
	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -27;
    }
    if (strcmp(results[21], "Vieste") != 0) {
	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -28;
    }
    sqlite3_free_table (results);

    ret = sqlite3_exec (handle, "INSERT INTO Councils (lc_name, geom) VALUES ('Quairading', GeomFromText('MULTIPOLYGON(((997226.750031 4627372.000018, 997301.750031 4627332.000018, 997402.500031 4627344.000018, 997541.500031 4627326.500018,997226.750031 4627372.000018)))', 23032));",
			NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "INSERT error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -29;
    }

    rows = 0;
    columns = 0;
    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error in Mbr SELECT2: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -30;
    }
    if ((rows != 21) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -31;
    }
    if (strcmp(results[1], "Ascoli Satriano") != 0) {
	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -32;
    }
    if (strcmp(results[21], "Vieste") != 0) {
	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -33;
    }
    sqlite3_free_table (results);
    
    ret = sqlite3_exec (handle, "UPDATE Councils SET geom = GeomFromText('MULTIPOLYGON(((987226.750031 4627372.000018, 997301.750031 4627331.000018, 997402.500032 4627344.000018, 997541.500031 4627326.500018, 987226.750031 4627372.000018)))', 23032) WHERE lc_name = \"Quairading\";",
			NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "UPDATE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -34;
    }

    rows = 0;
    columns = 0;
    ret = sqlite3_get_table (handle, "SELECT lc_name FROM Councils WHERE ROWID IN (SELECT rowid FROM cache_Councils_geom WHERE mbr = FilterMbrWithin(1040523, 4010000, 1140523, 4850000)) ORDER BY lc_name;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error in Mbr SELECT3: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -35;
    }
    if ((rows != 21) || (columns != 1)) {
	fprintf (stderr, "Unexpected error: select lc_name bad cache result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -36;
    }
    if (strcmp(results[1], "Ascoli Satriano") != 0) {
	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[1]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -37;
    }
    if (strcmp(results[21], "Vieste") != 0) {
	fprintf (stderr, "unexpected mbr result at 21: %s\n", results[21]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -38;
    }
    sqlite3_free_table (results);

    rows = 0;
    columns = 0;
    ret = sqlite3_get_table (handle, "SELECT rowid, mbr FROM cache_Councils_geom;",
			     &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error in Mbr SELECT: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -39;
    }
    if ((rows != 61) || (columns != 2)) {
	fprintf (stderr, "Unexpected error: select lc_name bad cache2 result: %i/%i.\n", rows, columns);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return  -40;
    }
    if (strcmp(results[2], "1") != 0) {
	fprintf (stderr, "unexpected mbr result at 1: %s\n", results[2]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -41;
    }
    if (strcmp(results[12], "6") != 0) {
	fprintf (stderr, "unexpected mbr result at 6: %s\n", results[12]);
	sqlite3_free_table (results);
	sqlite3_close(handle);
	return -42;
    }
    sqlite3_free_table (results);

    ret = sqlite3_exec (handle, "DROP TABLE Councils;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE Councils error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -44;
    }

    ret = sqlite3_close (handle);
    if (ret != SQLITE_OK) {
        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
	return -45;
    }
    
    spatialite_cleanup();
    sqlite3_reset_auto_extension();
    return 0;
}
Exemplo n.º 7
0
int main (int argc, char *argv[])
{
    int ret;
    sqlite3 *handle;
    char *dumpname = __FILE__"dump";
    char *err_msg = NULL;
    int row_count;

    spatialite_init (0);
    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
	fprintf(stderr, "cannot open in-memory database: %s\n", sqlite3_errmsg (handle));
	sqlite3_close(handle);
	return -1;
    }
    
    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
	sqlite3_free(err_msg);
	sqlite3_close(handle);
	return -2;
    }
    
    ret = load_shapefile (handle, "./shp/merano-3d/points", "points", "CP1252", 25832, 
			  "col1", 0, 0, 1, 0, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "load_shapefile() error for shp/merano-3d/points: %s\n", err_msg);
	sqlite3_close(handle);
	return -3;
    }
    if (row_count != 20) {
	fprintf (stderr, "unexpected row count for shp/merano-3d/points: %i\n", row_count);
	sqlite3_close(handle);
	return -4;
    }

    ret = load_shapefile (handle, "./shp/merano-3d/polygons", "polygons", "CP1252", 25832, 
			  "col1", 0, 0, 1, 0, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "load_shapefile() error for shp/merano-3d/polygons: %s\n", err_msg);
	sqlite3_close(handle);
	return -5;
    }
    if (row_count != 10) {
	fprintf (stderr, "unexpected row count for shp/merano-3d/polygons: %i\n", row_count);
	sqlite3_close(handle);
	return -6;
    }

    ret = load_shapefile (handle, "./shp/merano-3d/roads", "roads", "CP1252", 25832, 
			  "col1", 0, 0, 1, 0, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "load_shapefile() error for shp/merano-3d/roads: %s\n", err_msg);
	sqlite3_close(handle);
	return -7;
    }
    if (row_count != 18) {
	fprintf (stderr, "unexpected row count for shp/merano-3d/roads: %i\n", row_count);
	sqlite3_close(handle);
	return -8;
    }

    ret = dump_shapefile (handle, "roads", "col1", dumpname, "CP1252", "LINESTRING", 1, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "dump_shapefile() error for 3d roads: %s\n", err_msg);
	sqlite3_close(handle);
	return -9;
    }
    cleanup_shapefile(dumpname);
    if (row_count != 18) {
	fprintf (stderr, "unexpected row count for 3d roads: %i\n", row_count);
	sqlite3_close(handle);
	return -10;
    }

    ret = dump_shapefile (handle, "polygons", "col1", dumpname, "CP1252", "POLYGON", 1, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "dump_shapefile() error for 3d polygons: %s\n", err_msg);
	sqlite3_close(handle);
	return -11;
    }
    cleanup_shapefile(dumpname);
    if (row_count != 10) {
	fprintf (stderr, "unexpected row count for 3d polygons: %i\n", row_count);
	sqlite3_close(handle);
	return -12;
    }

    ret = dump_shapefile (handle, "points", "col1", dumpname, "CP1252", "POINT", 1, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "dump_shapefile() error for 3d points: %s\n", err_msg);
	sqlite3_close(handle);
	return -13;
    }
    cleanup_shapefile(dumpname);
    if (row_count != 20) {
	fprintf (stderr, "unexpected row count for 3d points: %i\n", row_count);
	sqlite3_close(handle);
	return -14;
    }

    ret = sqlite3_close (handle);
    if (ret != SQLITE_OK) {
        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
	return -15;
    }
    
    spatialite_cleanup();
    sqlite3_reset_auto_extension();
    
    return 0;
}
int main (int argc, char *argv[])
{
    sqlite3 *db_handle = NULL;
    char *sql_statement;
    int ret;
    char *err_msg = NULL;
    int i;
    char **results;
    int rows;
    int columns;
    const char *sql;

    spatialite_init (0);

    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
	sqlite3_close (db_handle);
	db_handle = NULL;
	return -1;
    }
    
    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape('shp/merano-3d/roads', CP1252, 25832);", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -2;
    }

    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -3;
    }

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape(\"shp/merano-3d/roads\", 'CP1252', -1);", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -4;
    }
    
    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -5;
    }

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE unquoted USING VirtualShape(shapetest1, UTF8, -1);", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -6;
    }
    
    ret = sqlite3_exec (db_handle, "DROP TABLE unquoted;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -7;
    }

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape('shp/merano-3d/roads', \"CP1252\", 25832);", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -8;
    }

    for (i = 0; steps[i].sql; ++i) {
	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
	if (ret != SQLITE_OK) {
	    fprintf (stderr, "Error: %s\n", err_msg);
	    sqlite3_free (err_msg);
	    return -9;
	}
	if (rows != steps[i].num_rows) {
	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
	    return  -10;
	}
	sqlite3_free_table (results);
    }

    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -11;
    }

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE nosuchfile USING VirtualShape(nosuchfile, UTF8, -1);", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -12;
    }
    
    ret = sqlite3_exec (db_handle, "DROP TABLE nosuchfile;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -13;
    }

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toofewargs USING VirtualShape(\"shapetest1\", UTF8);", NULL, NULL, &err_msg);
    if (ret != SQLITE_ERROR) {
	fprintf (stderr, "VirtualShape unexpected result: %i\n", ret);
	return -14;
    }
    sqlite3_free (err_msg);

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE toomanyargs USING VirtualShape(\"shapetest1\", UTF8, 4386, 1);", NULL, NULL, &err_msg);
    if (ret != SQLITE_ERROR) {
	fprintf (stderr, "VirtualShape unexpected result: %i\n", ret);
	return -15;
    }
    sqlite3_free (err_msg);
    
    sqlite3_close (db_handle);
    spatialite_cleanup();
    sqlite3_reset_auto_extension();
    
    return 0;
}
int main (int argc, char *argv[])
{
    sqlite3 *db_handle = NULL;
    char *sql_statement;
    int ret;
    char *err_msg = NULL;
    int i;
    char **results;
    int rows;
    int columns;

    spatialite_init (0);

    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
	sqlite3_close (db_handle);
	db_handle = NULL;
	return -1;
    }
    
    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF(\"shp/merano-3d/roads.dbf\", 'CP1252');", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -2;
    }
    
    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -3;
    }

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF('shp/merano-3d/roads.dbf', \"CP1252\");", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -4;
    }
    
    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -5;
    }

    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE dbftest USING VirtualDBF('shp/merano-3d/roads.dbf', CP1252);", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualDBF error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -6;
    }
    
    for (i = 0; steps[i].sql; ++i) {
	ret = sqlite3_get_table (db_handle, steps[i].sql, &results, &rows, &columns, &err_msg);
	if (ret != SQLITE_OK) {
	    fprintf (stderr, "Error: %s\n", err_msg);
	    sqlite3_free (err_msg);
	    return -7;
	}
	if (rows != steps[i].num_rows) {
	    fprintf (stderr, "Unexpected num of rows for test %i: %i.\n", i, rows);
	    return  -8;
	}
	sqlite3_free_table (results);
    }

    ret = sqlite3_exec (db_handle, "DROP TABLE dbftest;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -9;
    }

    sqlite3_close (db_handle);
    spatialite_cleanup();
    sqlite3_reset_auto_extension();
    
    return 0;
}
Exemplo n.º 10
0
int main (int argc, char *argv[])
{
    int ret;
    sqlite3 *handle;
    char *err_msg = NULL;
    int row_count;

    spatialite_init (0);
    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
	fprintf(stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (handle));
	sqlite3_close(handle);
	return -1;
    }
    
    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata()", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "InitSpatialMetadata() error: %s\n", err_msg);
	sqlite3_free(err_msg);
	sqlite3_close(handle);
	return -2;
    }

    ret = load_XL (handle, "./testcase1.xls", "test1", 0, 0, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "load_XL() error: %s\n", err_msg);
	sqlite3_close(handle);
	return -3;
    }
    if (row_count != 17) {
	fprintf (stderr, "load_XL() unexpected row count: %u\n", row_count);
	sqlite3_close(handle);
	return -4;
    }

    ret = load_XL (handle, "./testcase1.xls", "test2", 1, 1, &row_count, err_msg);
    if (!ret) {
        fprintf (stderr, "load_XL() error sheet 2: %s\n", err_msg);
	sqlite3_close(handle);
	return -5;
    }
    if (row_count != 19) {
	fprintf (stderr, "load_XL() unexpected row count sheet 2: %u\n", row_count);
	sqlite3_close(handle);
	return -6;
    }

    check_duplicated_rows (handle, "test1", &row_count);
    if (row_count != 0) {
	fprintf (stderr, "check_duplicated_rows() unexpected duplicate count: %d\n", row_count);
	sqlite3_close(handle);
	return -8;
    }

    check_duplicated_rows (handle, "test2", &row_count);
    if (row_count != 2) {
	fprintf (stderr, "check_duplicated_rows() unexpected duplicate count sheet 2: %d\n", row_count);
	sqlite3_close(handle);
	return -10;
    }

    remove_duplicated_rows (handle, "test1");

    remove_duplicated_rows (handle, "test2");

    ret = sqlite3_close (handle);
    if (ret != SQLITE_OK) {
        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
	return -11;
    }
    
    spatialite_cleanup();
    sqlite3_reset_auto_extension();
    return 0;
}
Exemplo n.º 11
0
int main (int argc, char *argv[])
{
    sqlite3 *db_handle = NULL;
    char *sql_statement;
    int ret;
    char *err_msg = NULL;
    int i;
    char **results;
    int rows;
    int columns;

    spatialite_init (0);

    ret = sqlite3_open_v2 (":memory:", &db_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (db_handle));
	sqlite3_close (db_handle);
	db_handle = NULL;
	return -1;
    }
    
    ret = sqlite3_exec (db_handle, "create VIRTUAL TABLE shapetest USING VirtualShape(\"shapetest1\", UTF-8, 4326);", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "VirtualShape error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -2;
    }

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 < 20;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -3;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -4;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -5;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -6;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -7;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -8;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 <= 19;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -10;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -11;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -12;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -13;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -14;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -15;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 = 20;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -16;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -17;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -18;
    }
    if (strcmp(results[3], "orde lees") != 0) {
	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
	return  -19;
    }
    if (strcmp(results[4], "20") != 0) {
	fprintf (stderr, "Unexpected error: integer2() bad result: %s.\n", results[4]);
	return  -20;
    }
    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -21;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 > 2;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -22;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -23;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -24;
    }
    if (strcmp(results[3], "orde lees") != 0) {
	fprintf (stderr, "Unexpected error: orde lees2 bad result: %s.\n", results[3]);
	return  -25;
    }
    if (strcmp(results[4], "20") != 0) {
	fprintf (stderr, "Unexpected error: integer4() bad result: %s.\n", results[4]);
	return  -26;
    }
    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -27;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase2 >= 20;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -28;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -29;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -30;
    }
    if (strcmp(results[3], "orde lees") != 0) {
	fprintf (stderr, "Unexpected error: orde lees3 bad result: %s.\n", results[3]);
	return  -31;
    }
    if (strcmp(results[4], "20") != 0) {
	fprintf (stderr, "Unexpected error: integer5() bad result: %s.\n", results[4]);
	return  -32;
    }
    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -33;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 < \"p\";");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -34;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -35;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -36;
    }
    if (strcmp(results[3], "orde lees") != 0) {
	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
	return  -37;
    }
    if (strcmp(results[4], "20") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -38;
    }
    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -39;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 <= \"p\";");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -40;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -41;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -42;
    }
    if (strcmp(results[3], "orde lees") != 0) {
	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
	return  -43;
    }
    if (strcmp(results[4], "20") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -44;
    }
    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -45;
    }
    sqlite3_free_table (results);

    
    ret = sqlite3_exec (db_handle, "BEGIN;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "BEGIN error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -46;
    }

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 > \"p\";");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -48;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -49;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -50;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -51;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -52;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -53;
    }
    sqlite3_free_table (results);

    ret = sqlite3_exec (db_handle, "DELETE FROM shapetest WHERE testcase2 = 2;", NULL, NULL, &err_msg);
    if (ret != SQLITE_READONLY) {
	fprintf (stderr, "UPDATE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -46;
    }
    sqlite3_free (err_msg);
    
    ret = sqlite3_exec (db_handle, "ROLLBACK;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "ROLLBACK error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -47;
    }

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 >= \"p\";");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -54;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -55;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -56;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -57;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -58;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -59;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 = \"windward\";");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -54;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -55;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -56;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -57;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -58;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -59;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID = 1;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -60;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -61;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -62;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -63;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -64;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -65;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID < 2;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -66;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -67;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -68;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -69;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -70;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -71;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID <= 1;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -72;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -73;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -74;
    }
    if (strcmp(results[3], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[3]);
	return  -75;
    }
    if (strcmp(results[4], "2") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -76;
    }
    if (strcmp(results[5], "POINT(3480766.311245 4495355.740524)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -77;
    }
    sqlite3_free_table (results);
    
    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID > 1;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -78;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -79;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -80;
    }
    if (strcmp(results[3], "orde lees") != 0) {
	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
	return  -81;
    }
    if (strcmp(results[4], "20") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -82;
    }
    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -83;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select testcase1, testcase2, AsText(Geometry) from shapetest where PKUID >= 2;");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -84;
    }
    if ((rows != 1) || (columns != 3)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -85;
    }
    if (strcmp(results[0], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header() bad result: %s.\n", results[0]);
	return  -86;
    }
    if (strcmp(results[3], "orde lees") != 0) {
	fprintf (stderr, "Unexpected error: orde lees bad result: %s.\n", results[3]);
	return  -87;
    }
    if (strcmp(results[4], "20") != 0) {
	fprintf (stderr, "Unexpected error: integer() bad result: %s.\n", results[4]);
	return  -88;
    }
    if (strcmp(results[5], "POINT(3482470.825574 4495691.054818)") != 0) {
	fprintf (stderr, "Unexpected error: geometry() bad result: %s.\n", results[5]);
	return  -89;
    }
    sqlite3_free_table (results);

    asprintf(&sql_statement, "select PKUID, testcase1, testcase2, AsText(Geometry) from shapetest where testcase1 LIKE \"wind\%\";");
    ret = sqlite3_get_table (db_handle, sql_statement, &results, &rows, &columns, &err_msg);
    free(sql_statement);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "Error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -90;
    }
    if ((rows != 1) || (columns != 4)) {
	fprintf (stderr, "Unexpected error: select columns bad result: %i/%i.\n", rows, columns);
	return  -91;
    }
    if (strcmp(results[0], "PKUID") != 0) {
	fprintf (stderr, "Unexpected error: header uid bad result: %s.\n", results[0]);
	return  -92;
    }
    if (strcmp(results[1], "testcase1") != 0) {
	fprintf (stderr, "Unexpected error: header bad result: %s.\n", results[1]);
	return  -93;
    }
    if (strcmp(results[4], "1") != 0) {
	fprintf (stderr, "Unexpected error: windward PK bad result: %s.\n", results[4]);
	return  -93;
    }
    if (strcmp(results[5], "windward") != 0) {
	fprintf (stderr, "Unexpected error: windward bad result: %s.\n", results[5]);
	return  -94;
    }
    sqlite3_free_table (results);

    ret = sqlite3_exec (db_handle, "DROP TABLE shapetest;", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf (stderr, "DROP TABLE error: %s\n", err_msg);
	sqlite3_free (err_msg);
	return -49;
    }

    sqlite3_close (db_handle);
    spatialite_cleanup();
    sqlite3_reset_auto_extension();
    
    return 0;
}