[GRASS-dev] [GRASS GIS] #3164: v.in.ogr: "Column name <1_AVERAGE> renamed to <x_AVERAGE>" should be x1_AVERAGE or similar
GRASS GIS
trac at osgeo.org
Fri Sep 23 13:21:26 PDT 2016
#3164: v.in.ogr: "Column name <1_AVERAGE> renamed to <x_AVERAGE>" should be
x1_AVERAGE or similar
--------------------------+---------------------------------------
Reporter: mlennert | Owner: grass-dev@…
Type: enhancement | Status: new
Priority: normal | Milestone: 7.2.1
Component: Vector | Version: unspecified
Resolution: | Keywords: v.in.ogr column names SQL
CPU: Unspecified | Platform: Unspecified
--------------------------+---------------------------------------
Comment (by mmetz):
Replying to [comment:2 mlennert]:
> Replying to [comment:1 mmetz]:
> > Replying to [ticket:3164 mlennert]:
> > > Trying to import a vector file which has columns such as 1_AVERAGE,
2_AVERAGE, etc, I get the following error message:
> > >
> > >
> > > {{{
> > > Column name <1_AVERAGE> renamed to <x_AVERAGE>
> > > Column name <2_AVERAGE> renamed to <x_AVERAGE>
> > > Column name <3_AVERAGE> renamed to <x_AVERAGE>
> > > Column name <4_AVERAGE> renamed to <x_AVERAGE>
> > > Column name <5_AVERAGE> renamed to <x_AVERAGE>
> > > Column name <6_AVERAGE> renamed to <x_AVERAGE>
> > > Column name <1_STDDEV> renamed to <x_STDDEV>
> > > Column name <2_STDDEV> renamed to <x_STDDEV>
> > > Column name <3_STDDEV> renamed to <x_STDDEV>
> > > Column name <4_STDDEV> renamed to <x_STDDEV>
> > > Column name <5_STDDEV> renamed to <x_STDDEV>
> > > Column name <6_STDDEV> renamed to <x_STDDEV>
> > > DBMI-SQLite erreur de pilote :
> > > Error in sqlite3_prepare():
> > > duplicate column name: x_AVERAGE
> > > DBMI-SQLite erreur de pilote :
> > > Error in sqlite3_prepare():
> > > duplicate column name: x_AVERAGE
> > > }}}
> > >
> > > This comes from G_str_to_sql() in
[https://trac.osgeo.org/grass/browser/grass/trunk/lib/gis/strings.c#L356
lib/gis/strings.c] which just checks whether the first character is a
letter and, if not, replaces it with 'x':
> > >
> > >
> > > {{{
> > > c = str;
> > > if (!(*c >= 'A' && *c <= 'Z') && !(*c >= 'a' && *c <= 'z')) {
> > > *c = 'x';
> > > count++;
> > > }
> > > }}}
> > >
> > > I know the reasoning behind this procedure, and I know I can use the
'columns' parameter to provide my own names, but in a file like this one
where you have 12 such columns, this is work which I believe we shouldn't
oblige the user to go through.
> > >
> > > Why not just add x in front of the string (i.e. 1_AVERAGE becomes
x1_AVERAGE instead of x_AVERAGE) ?
> > >
> > > Any objections to that ? And as my pointer foo is a bit low, could
someone give me a hint on how to do that ? I guess it would entail
ensuring that c has enough memory space to add a character ?
> >
> > A different G_str_to_sql() function would be needed, currently it is
> > {{{
> > int G_str_to_sql(char *str)
> > }}}
> > but you would need
> > {{{
> > int G_str_to_sql2(char **str)
> > }}}
> > because the buffer needs to be enlarged by 1 (realloc'd) which means
the address pointed to by str will change. Then shift the characters by 1
towards the end and insert x at the beginning.
>
> Finally, coming back to this after foss4g.be.
>
> Just to prove my ignorance: wouldn't G_rasprintf be appropriate for this
?
Of course G_rasprintf would be appropriate, but you still need to pass
`char **` and not `char *` to a new version of G_str_to_sql.
--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3164#comment:3>
GRASS GIS <https://grass.osgeo.org>
More information about the grass-dev
mailing list