[GRASS-dev] trying to update column with another text column

I want to update a column with the value of another column. I am using v.db.update.

The docs say that I can update a column with the value of another column by specifying that column in the value field. In fact, if I put the names of numeric columns, this works fine (e.g., v.db.update map=myvector layer=1 column=summary value=col3 + col4).

But if I do something like this for a string column, I simply get the string of the name of the column (e.g., v.db.update map=myvector layer=1 column=summary value=col5 put “col5” into the summary column, NOT the strings that are STORED in col5).

Are the docs wrong or is this a bug?

I’m working with GRASS 7

Michael


C. Michael Barton
Visiting Scientist, Integrated Science Program
National Center for Atmospheric Research &
University Consortium for Atmospheric Research
303-497-2889 (voice)

Director, Center for Social Dynamics & Complexity
Professor of Anthropology, School of Human Evolution & Social Change
Arizona State University
www: http://www.public.asu.edu/~cmbarton, http://csdc.asu.edu

On 04/04/12 08:02, Michael Barton wrote:

I want to update a column with the value of another column. I am using
v.db.update.

The docs say that I can update a column with the value of another column
by specifying that column in the value field. In fact, if I put the
names of numeric columns, this works fine (e.g., v.db.update
map=myvector layer=1 column=summary value=col3 + col4).

But if I do something like this for a string column, I simply get the
string of the name of the column (e.g., v.db.update map=myvector layer=1
column=summary value=col5 put "col5" into the summary column, NOT the
strings that are STORED in col5).

Are the docs wrong or is this a bug?

When the column to update is a string column, the script surrounds the value given with the value= parameter with quotes. It could check whether the given value is a column name and then not quote it but then again, how can we know that the person does not what to just fill a column with a string that corresponds to the name of another column ?

Try using the qcolumn parameter.

So docs should be updated to reflect that.

Moritz

On 04/04/12 08:33, Moritz Lennert wrote:

On 04/04/12 08:02, Michael Barton wrote:

I want to update a column with the value of another column. I am using
v.db.update.

The docs say that I can update a column with the value of another column
by specifying that column in the value field. In fact, if I put the
names of numeric columns, this works fine (e.g., v.db.update
map=myvector layer=1 column=summary value=col3 + col4).

But if I do something like this for a string column, I simply get the
string of the name of the column (e.g., v.db.update map=myvector layer=1
column=summary value=col5 put "col5" into the summary column, NOT the
strings that are STORED in col5).

Are the docs wrong or is this a bug?

When the column to update is a string column, the script surrounds the
value given with the value= parameter with quotes. It could check
whether the given value is a column name and then not quote it but then
again, how can we know that the person does not what to just fill a
column with a string that corresponds to the name of another column ?

Try using the qcolumn parameter.

So docs should be updated to reflect that.

How about:

Index: v.db.update.py

--- v.db.update.py (révision 51255)
+++ v.db.update.py (copie de travail)
@@ -33,12 +33,12 @@
  #%option
  #% key: value
  #% type: string
-#% description: Value to update the column with, can be (combination of) other column(s)
+#% description: Value to update the column with
  #% required: no
  #%end
  #%option G_OPT_DB_COLUMN
  #% key: qcolumn
-#% description: Name of attribute column to query
+#% description: Name of other attribute column to query, can be combination of columns (e.g. co1+col2)
  #%end
  #%option G_OPT_DB_WHERE
  #%end
Index: v.db.update.html

--- v.db.update.html (révision 51255)
+++ v.db.update.html (copie de travail)
@@ -1,8 +1,8 @@
  <h2>DESCRIPTION</h2>

  <em>v.db.update</em> allows to assign a new value to a column in the
-attribute table connected to a given map. Alternatively, values can be
-copied from another column in the table.
+attribute table connected to a given map. The <em>value</em> parameter allows updating with a literal value. Alternatively, with the <em>qcol</em> parameter values can be
+copied from another column in the table or be the result of a combination or transformation of other columns.

  <h2>NOTES</h2>

?

Moritz