[gdal-dev] Change in parsing of OGR where clause
Even Rouault
even.rouault at spatialys.com
Wed Apr 6 13:39:48 PDT 2016
Andrew,
> In version 1.X of GDAL, the following was accepted and worked:
>
> std::string query = "LOCATION=\"some text\"";
> OGR_L_SetAttributeFilter(layer, query.c_str());
>
> In version 2.X, this is no longer accepted and the double quotes must be
> replaced by single quotes:
>
> std::string query = "LOCATION='some text'";
> OGR_L_SetAttributeFilter(layer, query.c_str());
>
> This wouldn't be awful, but the error that occurs tells you nothing about
> the actual problem. It yields:
>
> "some text" not recognised as an available field.
Well, I find the message quite clear : "some text" isn't an recognized field :-)
>
> Perhaps it should give a parsing error?
No, that's valid SQL. "some text" is a quoted identifier, that doesn't match
any field of your layer.
> In 1.11, parsing the query with
> double quotes would yield an SNT_OPERATION node with subnodes SNT_COLUMN
> and SNT_CONSTANT. In 2.0, the same query yields an SNT_OPERATION with two
> SNT_COLUMN subnodes, which seems to cause the confusing error.
>
> Should the parser accept column values with double quotes? If not, can it
> provide better feedback?
I will stop joking now :-) Here's what you want to read that should explain
the rationale for this change :
https://trac.osgeo.org/gdal/wiki/rfc52_strict_sql_quoting
Best regards,
Even
--
Spatialys - Geospatial professional services
http://www.spatialys.com
More information about the gdal-dev
mailing list