Browse Source

Call db_set_value_string only once.

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@58023 15284696-431f-4ddb-bdfa-cd5b030d7da7
Huidae Cho 11 years ago
parent
commit
77e6c64af5
1 changed files with 13 additions and 4 deletions
  1. 13 4
      vector/v.reclass/main.c

+ 13 - 4
vector/v.reclass/main.c

@@ -157,6 +157,7 @@ int main(int argc, char *argv[])
 	    dbTable *table;
 	    dbTable *table;
 	    struct field_info *NewFi;
 	    struct field_info *NewFi;
 	    dbDriver *Driver2;
 	    dbDriver *Driver2;
+	    int foundnull;
 
 
 	    db_init_string(&stmt);
 	    db_init_string(&stmt);
 	    db_init_string(&stmt2);
 	    db_init_string(&stmt2);
@@ -243,9 +244,12 @@ int main(int argc, char *argv[])
 	    cvarr.ctype = DB_C_TYPE_INT;
 	    cvarr.ctype = DB_C_TYPE_INT;
 
 
 	    newval = 0;
 	    newval = 0;
+	    foundnull = 0;
 
 
 	    /* fetch the data */
 	    /* fetch the data */
 	    for (i = 0; i < nrows; i++) {
 	    for (i = 0; i < nrows; i++) {
+		int isnull;
+
 		if (db_fetch(&cursor, DB_NEXT, &more) != DB_OK) {
 		if (db_fetch(&cursor, DB_NEXT, &more) != DB_OK) {
 		    G_fatal_error(_("Unable to fetch data from table <%s>"),
 		    G_fatal_error(_("Unable to fetch data from table <%s>"),
 				  Fi->table);
 				  Fi->table);
@@ -253,12 +257,17 @@ int main(int argc, char *argv[])
 
 
 		column = db_get_table_column(table, 1);
 		column = db_get_table_column(table, 1);
 		value = db_get_column_value(column);
 		value = db_get_column_value(column);
+		isnull = db_test_value_isnull(value);
+
+		if (i == 0 || (!foundnull && isnull) ||
+		    (!isnull && strcmp(db_get_value_string(value),
+				       db_get_string(&lastval)) != 0)) {
 
 
-		if (db_test_value_isnull(value))
-		    db_set_value_string(value, "");
+		    if (!foundnull && isnull) {
+		        foundnull = 1;
+			db_set_value_string(value, "");
+		    }
 
 
-		if (i == 0 || strcmp(db_get_value_string(value),
-					db_get_string(&lastval)) != 0) {
 		    newval++;
 		    newval++;
 		    db_set_string(&lastval, db_get_value_string(value));
 		    db_set_string(&lastval, db_get_value_string(value));
 		    G_debug(3, "  newval = %d string = %s", newval,
 		    G_debug(3, "  newval = %d string = %s", newval,