浏览代码

v.db.connect

use Vect_subst_var() where needed (fix for default connection containing "$MAP")
Markus Metz 6 年之前
父节点
当前提交
17f0969ee6
共有 1 个文件被更改,包括 13 次插入11 次删除
  1. 13 11
      vector/v.db.connect/main.c

+ 13 - 11
vector/v.db.connect/main.c

@@ -208,6 +208,7 @@ int main(int argc, char **argv)
 		}
 		}
 	    }			/* end print */
 	    }			/* end print */
 	    else {		/* columns */
 	    else {		/* columns */
+		char *database_novar;
 
 
 		if ((fi = Vect_get_field2(&Map, field_opt->answer)) == NULL)
 		if ((fi = Vect_get_field2(&Map, field_opt->answer)) == NULL)
 		    G_fatal_error(_("Database connection not defined for layer <%s>"),
 		    G_fatal_error(_("Database connection not defined for layer <%s>"),
@@ -217,8 +218,10 @@ int main(int argc, char **argv)
 		    G_fatal_error(_("Unable to start driver <%s>"),
 		    G_fatal_error(_("Unable to start driver <%s>"),
 				  fi->driver);
 				  fi->driver);
 
 
+		database_novar = Vect_subst_var(fi->database, &Map);
+
 		db_init_handle(&handle);
 		db_init_handle(&handle);
-		db_set_handle(&handle, fi->database, NULL);
+		db_set_handle(&handle, database_novar, NULL);
 		if (db_open_database(driver, &handle) != DB_OK)
 		if (db_open_database(driver, &handle) != DB_OK)
 		    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 				  fi->database, fi->driver);
 				  fi->database, fi->driver);
@@ -251,6 +254,8 @@ int main(int argc, char **argv)
 	else {
 	else {
 	    if (field_opt->answer && dbtable->answer && dbkey->answer
 	    if (field_opt->answer && dbtable->answer && dbkey->answer
 		&& dbdatabase->answer && dbdriver->answer) {
 		&& dbdatabase->answer && dbdriver->answer) {
+		char *database_novar;
+
 		fi = (struct field_info *)G_malloc(sizeof(struct field_info));
 		fi = (struct field_info *)G_malloc(sizeof(struct field_info));
 		fi->name = fieldname;
 		fi->name = fieldname;
 		fi->table = dbtable->answer;
 		fi->table = dbtable->answer;
@@ -258,6 +263,8 @@ int main(int argc, char **argv)
 		fi->database = dbdatabase->answer;
 		fi->database = dbdatabase->answer;
 		fi->driver = dbdriver->answer;
 		fi->driver = dbdriver->answer;
 
 
+		database_novar = Vect_subst_var(fi->database, &Map);
+
 		ret = Vect_map_check_dblink(&Map, field, fieldname);
 		ret = Vect_map_check_dblink(&Map, field, fieldname);
 		G_debug(3, "Vect_map_check_dblink = %d", ret);
 		G_debug(3, "Vect_map_check_dblink = %d", ret);
 		if (ret == 1) {
 		if (ret == 1) {
@@ -269,16 +276,13 @@ int main(int argc, char **argv)
 			dbColumn *column;
 			dbColumn *column;
 
 
 			if (db_table_exists
 			if (db_table_exists
-			    (dbdriver->answer, dbdatabase->answer,
+			    (dbdriver->answer, database_novar,
 			     dbtable->answer) < 1)
 			     dbtable->answer) < 1)
 			    G_fatal_error(_("Table <%s> does not exist in database <%s>"),
 			    G_fatal_error(_("Table <%s> does not exist in database <%s>"),
-					  dbtable->answer,
-					  dbdatabase->answer);
+					  dbtable->answer, database_novar);
 
 
 			driver = db_start_driver_open_database(fi->driver,
 			driver = db_start_driver_open_database(fi->driver,
-							       Vect_subst_var
-							       (fi->database,
-								&Map));
+							       database_novar);
 			if (!driver)
 			if (!driver)
 			    G_fatal_error(_("Unable to start driver <%s>"),
 			    G_fatal_error(_("Unable to start driver <%s>"),
 					  dbdriver->answer);
 					  dbdriver->answer);
@@ -309,7 +313,7 @@ int main(int argc, char **argv)
 		}
 		}
 		else {		/* field not yet defined, add new field */
 		else {		/* field not yet defined, add new field */
 		    if (db_table_exists
 		    if (db_table_exists
-			(dbdriver->answer, dbdatabase->answer,
+			(dbdriver->answer, database_novar,
 			 dbtable->answer) < 1)
 			 dbtable->answer) < 1)
 			G_warning(_("Table <%s> does not exist in database <%s>"),
 			G_warning(_("Table <%s> does not exist in database <%s>"),
 				  dbtable->answer, dbdatabase->answer);
 				  dbtable->answer, dbdatabase->answer);
@@ -323,9 +327,7 @@ int main(int argc, char **argv)
 					    dbtable->answer, input);
 					    dbtable->answer, input);
 
 
 			driver = db_start_driver_open_database(fi->driver,
 			driver = db_start_driver_open_database(fi->driver,
-							       Vect_subst_var
-							       (fi->database,
-								&Map));
+							       database_novar);
 
 
 			if (!driver)
 			if (!driver)
 			    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),