[GRASS-dev] Re: [GRASS-user] v.db.join script

Micha Silver micha at arava.co.il
Wed Oct 13 16:23:52 EDT 2010


On 10/12/2010 12:01 PM, Jon Eiriksson wrote:
>
> Hi,
>
> I have a truncation problem with v.db.join. This has been raised before -
>
>
> ([GRASS-user] Re: grass v.db.join
>
> Gary Nobles
> Fri, 12 Mar 2010 11:11:26 -0800)
>
> - but I have not seen a solution. I have tried my own data, the
> spearfish60 example data, and the example in Neteler and Mitasova's book.
> The new data columns are apparently defined as 1 character long, and the
> data become truncated accordingly, much against my intention. I use 
> mysql.
>

I can see why this is happening. But I'm not sure what the correct 
solution might be. v.db.join is a wrapper around db.describe and 
v.db.addcol. When I query an sqlite database connection here's what the 
output looks like:

db.describe -c bike_rides2
ncols: 8
nrows: 17
Column 1: cat:INTEGER:20
Column 2: name:CHARACTER:80
Column 3: number:INTEGER:20
Column 4: comment:CHARACTER:80
Column 5: descriptio:CHARACTER:80
Column 6: source:CHARACTER:80
Column 7: url:CHARACTER:80

The output format is obviously:
"Column num:column name:column type:column size".

One line from the v.db.join script uses grep and cut to get the column 
names and the next line gets the column types like so:

db.describe -c bike_rides2 | grep '^Column' | cut -d ':' -f 3
INTEGER
CHARACTER
INTEGER
CHARACTER
CHARACTER
CHARACTER
CHARACTER

So the column size is actually ignored.

Next, in the script the above output is used by v.db.addcol to create 
the new columns in the joined vector. So all new character columns are 
created as a single char and the actual length is never used.

Questions:
Is the db.describe output the same for all db drivers?
Any suggestions how to fix this as a script?
Or better, just convert to python?

Thanks,
Micha



-- 
Micha Silver
Arava Development Co. +972-52-3665918
http://www.surfaces.co.il




More information about the grass-dev mailing list