Hi Jukka,

you will need to escape anything that can be interpreted as a control character on the command line. But it really depends on the interpretation context (console), but backslashes often need escaping as well like \n for a newline. This may even happen if you write something like \newspaper ... but for sql strings on the command line there's usually just the double quotes where you have to pay attention. The problem you have here is that you are using sql keywords (desc and union) for your table aliases so you have to put double quotes around them. One way around this would be to not use sql keywords as table aliases at all. The next best solution would be to enclose your sql string into single quotes like Even already mentioned. Your double quotes don't "break" the sql string because they are different. But if you intend to use only double quotes for your sql string and your keywords you will need to escape the quotes around the keywords because otherwise they would break or signal an end to the sql string like it would on a normal sententence:
"I have " written "a sql string"
wouldn't be a correctly encapsulated sentence, would it? A backslash \" would remove the meaning of the " and not terminating the string.

HTH

Frank

Am 16.06.2016 um 19:59 schrieb Jukka Rahkonen:
Even Rouault <even.rouault <at> spatialys.com> writes:

On Windows shell I suppose ? Perhaps with \" (not tried)

ogrinfo -sql "select attr_2 as \"desc\" from test" test.shp
This really works for me on Windows.


On Linux bash the following - using single quote for the full SQL - also
works
(not sure on Windows)
For sure does not work on Windows.

ogrinfo -sql 'select attr_2 as "desc" from test' test.shp

ERROR 1: SQL Expression Parsing Error: syntax error, unexpected DESC,
expecting identifier. Occurred around :
select attr_2 as desc from test
                  ^
I managed to do the job with SQLite dialect but I wonder if I found a bug
with using "desc" as an identifier.
Probably SQLite is more tolerant about using reserved keywords in non-
ambiguous situations.
Ahh, I understand now. If I write just "desc" the double quotes are actually
removed but SQLite does not care in this case.  But I can't do select... as
"union" because now SQLite complains
ERROR 1: In ExecuteSQL(): sqlite3_prepare(select attr_2 as union from test):
   near "union": syntax error

I must write it escaped select... as \"union\" instead so that double quotes
are protected.

Are there other characters than " which may need escaping? I guess % and _
but probably there are more.

-Jukka Rahkonen-

_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

--
Waldhölzbacher Str. 51
66679 Losheim am See

(+49) 0177 30 21 791

_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to