[gdal-dev] SQLite dialect in OGRDataSource::ExecuteSQL

Even Rouault even.rouault at spatialys.com
Tue Feb 10 04:42:12 PST 2015


Le mardi 10 février 2015 12:47:46, Pierluigi Guasqui a écrit :
> Hi All!
> 
> I am using the GDAL/OGR functions to query a shapefile. This is a sample
> code I have been successfully running so far:
> 
>     OGRDataSource *poDS = OGRSFDriverRegistrar::Open(
>     "some/path/to/myshapefile.shp" );
>     OGRLayer *poLayer = poDS->ExecuteSQL( "select * from myshapefile",
>     NULL, NULL );
>     // ...
>     // fetching result features from "poLayer"
>     // ...
>     poDS->ReleaseResultSet( poLayer );
>     OGRDataSource::DestroyDataSource(poDS);
> 
> 
> As you can see, I am currently using the OGR SQL dialect, as I am
> passing NULL as the third parameter of the OGRDataSource::ExecuteSQL
> function.
> 
> Now I am trying to extend the SQL syntax to be able to use the OGR
> SQLite dialect. I have successfully recompiled GDAL 1.11.1 with SQLite
> support (version 3.8.5) but when I try to execute the same sample code
> (passing "SQLITE" as the 3rd argument of the OGRDataSource::ExecuteSQL
> function) I am getting the following error:
> 
>     In ExecuteSQL(): sqlite3_prepare(select * from myshapefile): no such
>     table: myshapefile
> 
> 
> What is the table name that contains the shapefile features that I can
> use in my SQL queries?

Pierluigi,

That should work... If you tried to configure GDAL several times, perhaps you 
should do a make clean.

Could you try defining CPL_DEBUG=ON as environment variable and rerun your 
code. You should normally see a statement like the following one to create the 
SQLite virtual table that matches the shapefile layer :

OGR2SQLITE: sqlite3_declare_vtab(CREATE TABLE "poly"("AREA" FLOAT,"EAS_ID" 
FLOAT,"PRFEDEA" VARCHAR(16),OGR_STYLE VARCHAR HIDDEN,"GEOMETRY" 
BLOB_POLYGON_2D_50000))

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list