[GRASS-dev] [GRASS GIS] #2193: v.in.ogr does not handle columns named 2D_lenght and 3D_lenght

GRASS GIS trac at osgeo.org
Fri Feb 7 08:46:30 PST 2014


#2193: v.in.ogr does not handle columns named 2D_lenght and 3D_lenght
------------------------------------------------------------+---------------
 Reporter:  wenzeslaus                                      |       Owner:  grass-dev@…              
     Type:  defect                                          |      Status:  new                      
 Priority:  minor                                           |   Milestone:  7.0.0                    
Component:  Vector                                          |     Version:  svn-trunk                
 Keywords:  v.in.ogr, r.in.gdal, import, database, columns  |    Platform:  All                      
      Cpu:  All                                             |  
------------------------------------------------------------+---------------
 When the attribute table of the imported map contains numbers at the
 beginning of the map/layer name (e.g. `2D_lenght`), G7:v.in.ogr replaces
 the number with `x`.


 When there are two columns which differ only by this first character (e.g.
 `2D_lenght` and `3D_lenght`), both names will result in `xD_lenght`:

 {{{
 Column name <2D_lenght> renamed to <xD_lenght>
 Column name <3D_lenght> renamed to <xD_lenght>
 }}}

 This of course causes an error:

 {{{
 DBMI-SQLite driver error:
 Error in sqlite3_prepare():
 duplicate column name: xD_lenght
 DBMI-SQLite driver error:
 Error in sqlite3_prepare():
 duplicate column name: xD_lenght
 ERROR: Unable to create table: 'create table mytable (cat integer, ...,
 xD_lenght double precision, xD_lenght double precision, ...)'
 }}}

 (I don't know why the lines at the beginning are repeated.)

 This replacing can actually happen also for map/layer names itself,
 probably for both G7:v.in.ogr and G7:r.in.gdal, when filenames (or
 whatever) begging with the number.

 The workaround is to specify all column names manually using `cnames`
 parameter, or `output` parameter in case of layers. However, more
 comfortable (especially in case of columns) would be to have some more
 robust replacing method active by default, e.g. prefix for columns with
 invalid character at the beginning instead of replacing.

 The other part of the story is that in GUI, you cannot specify `cnames`,
 perhaps some table for column names can be done but automatic working
 (robust) way would be beneficial for both GUI and scripts.

 By the way, shouldn't be `cnames` renamed to `column_names` according to
 new GRASS reading friendly standards?

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2193>
GRASS GIS <http://grass.osgeo.org>



More information about the grass-dev mailing list