[gdal-dev] OGR SQL: Excecuting select where column name contains "."

Odd Ragnar Lydersen Odd-Ragnar.Lydersen at powel.no
Mon Oct 8 01:42:52 PDT 2012


I see you have been busy discussing how to handle column names which contain dot "."
My problem is that I can't get any reasonable values from the query I make, whether I use "str1.str2" or 'str1.str2' in my expression.

In my C++ code this is:
a) const char *sSqlQuery = "SELECT \"str1.str2\" FROM 'layers:layer1'\"
b) const char *sSqlQuery = "SELECT 'str1.str2' FROM 'layers:layer1'\"

The result is the same, and I get no errors, but the column name returned to me is FIELD_1, and all values are str1.str2
What am I missing here?

When I run an ordinary query like:
const char *sSqlQuery = "SELECT \"str\" FROM 'layers:layer1'\"
then I get the correct result.

I've debugged a bit and found that OGRGenSQLResultsLayer::OGRGenSQLResultsLayer(), in ogr_gensql.cpp, generates the FIELD_1 name:
if( strlen(psColDef->field_name) == 0 )
        {
            CPLFree( psColDef->field_name );
            psColDef->field_name = (char *) CPLMalloc(40);
            sprintf( psColDef->field_name, "FIELD_%d", iField+1 );
        }

Please help, or confirm if I'm trying to do something illegal

>Odd-Ragnar<

-----Original Message-----
From: Even Rouault [mailto:even.rouault at mines-paris.org] 
Sent: 5. oktober 2012 18:39
To: Rahkonen Jukka
Cc: gdal-dev at lists.osgeo.org
Subject: Re: [gdal-dev] OGR SQL: Excecuting select where column name contains "."

> To follow SQL, it is recommended to you double-quote characters,
> > which might require SHELL escaping since they are already in a
> double-quoted
> > string, like :
>

> Yes, that's a good theory but it is not easy to use it on Windows. 
> Does anybody in the world know how should this one be escaped? I have 
> already tried to use ^" as inner double quotes but without success, as 
> well as having two ^^ and three ^^^.

Doh! my webmail client has changed what I have typed ! To escape double-quote in Windows shell, you need to put a backslash character before them.



More information about the gdal-dev mailing list