Просмотр исходного кода

update modules: use db_set_error_handler_driver()

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@62200 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 10 лет назад
Родитель
Сommit
771f9b7155
52 измененных файлов с 93 добавлено и 100 удалено
  1. 5 3
      db/db.columns/main.c
  2. 3 2
      db/db.databases/main.c
  3. 2 1
      db/db.select/main.c
  4. 1 0
      display/d.thematic.area/plot1.c
  5. 1 0
      display/d.vect.chart/plot.c
  6. 1 13
      display/d.vect/shape.c
  7. 2 24
      misc/m.nviz.image/vector.c
  8. 1 0
      raster/r.stream.extract/close.c
  9. 3 8
      raster/r.stream.order/stream_vector.c
  10. 1 0
      raster/r.to.vect/main.c
  11. 2 0
      raster3d/r3.flow/main.c
  12. 1 0
      vector/v.buffer/main.c
  13. 2 1
      vector/v.colors.out/make_colors.c
  14. 2 1
      vector/v.colors/scan_attr.c
  15. 1 0
      vector/v.colors/write_rgb.c
  16. 1 4
      vector/v.convert/att.c
  17. 1 0
      vector/v.db.select/main.c
  18. 1 0
      vector/v.edit/select.c
  19. 1 0
      vector/v.in.db/main.c
  20. 2 0
      vector/v.in.dwg/main.c
  21. 1 0
      vector/v.in.dxf/write_vect.c
  22. 1 4
      vector/v.in.lidar/main.c
  23. 1 0
      vector/v.kcv/main.c
  24. 1 0
      vector/v.label.sa/labels.c
  25. 4 1
      vector/v.lidar.correction/main.c
  26. 2 1
      vector/v.lidar.edgedetection/main.c
  27. 3 0
      vector/v.lrs/v.lrs.create/main.c
  28. 1 0
      vector/v.lrs/v.lrs.segment/main.c
  29. 1 0
      vector/v.mkgrid/main.c
  30. 1 0
      vector/v.net.allpairs/main.c
  31. 1 1
      vector/v.net.centrality/main.c
  32. 1 2
      vector/v.net.distance/main.c
  33. 1 0
      vector/v.net.flow/main.c
  34. 1 2
      vector/v.net.path/path.c
  35. 2 9
      vector/v.net/turntable.c
  36. 2 2
      vector/v.out.postgis/table.c
  37. 1 8
      vector/v.out.vtk/writeVTK.c
  38. 4 1
      vector/v.outlier/main.c
  39. 2 0
      vector/v.overlay/main.c
  40. 6 1
      vector/v.patch/main.c
  41. 2 4
      vector/v.reclass/main.c
  42. 2 0
      vector/v.sample/main.c
  43. 5 1
      vector/v.surf.bspline/main.c
  44. 1 2
      vector/v.surf.rst/main.c
  45. 1 0
      vector/v.to.db/update.c
  46. 1 0
      vector/v.to.rast/vect2rast.c
  47. 2 1
      vector/v.to.rast3/main.c
  48. 3 0
      vector/v.univar/main.c
  49. 1 2
      vector/v.vol.rst/main.c
  50. 1 0
      vector/v.what.rast/main.c
  51. 2 1
      vector/v.what.rast3/main.c
  52. 1 0
      vector/v.what/what.c

+ 5 - 3
db/db.columns/main.c

@@ -13,9 +13,10 @@
  *
  *****************************************************************************/
 
+#include <stdlib.h>
+
 #include <grass/gis.h>
 #include <grass/dbmi.h>
-#include <stdlib.h>
 #include <grass/glocale.h>
 
 
@@ -52,12 +53,13 @@ int main(int argc, char **argv)
     db_init_handle(&handle);
     db_set_handle(&handle, parms.database, NULL);
     if (db_open_database(driver, &handle) != DB_OK)
-	exit(EXIT_FAILURE);
+        G_fatal_error(_("Unable to open database <%s>"), parms.database);
+    db_set_error_handler_driver(driver);
 
     db_init_string(&table_name);
     db_set_string(&table_name, parms.table);
     if (db_describe_table(driver, &table_name, &table) != DB_OK)
-	exit(EXIT_FAILURE);
+	G_fatal_error(_("Unable to describe table <%s>"), parms.table);
 
     db_close_database(driver);
     db_shutdown_driver(driver);

+ 3 - 2
db/db.databases/main.c

@@ -48,10 +48,11 @@ int main(int argc, char **argv)
 	G_fatal_error(_("Unable to start driver <%s>"), parms.driver);
 
     if (db_list_databases(driver, &locations,
-                          nlocs, &handles, &count) != DB_OK)
+                          nlocs, &handles, &count) != DB_OK) {
+        db_shutdown_driver(driver);
         G_fatal_error(_("Unable to list databases. "
                         "Try to define correct connection settings by db.login."));
-    
+    }
     db_shutdown_driver(driver);
 
     for (i = 0; i < count; i++) {

+ 2 - 1
db/db.select/main.c

@@ -79,7 +79,8 @@ int main(int argc, char **argv)
     db_set_handle(&handle, parms.database, NULL);
     if (db_open_database(driver, &handle) != DB_OK)
 	G_fatal_error(_("Unable to open database <%s>"), parms.database);
-
+    db_set_error_handler_driver(driver);
+ 
     /* check for sql, table, and input */
     if (parms.sql) {
         /* parms.sql */

+ 1 - 0
display/d.thematic.area/plot1.c

@@ -110,6 +110,7 @@ int plot1(struct Map_info *Map, int type, int area, struct cat_list *Clist,
 	if (driver == NULL)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  fi->database, fi->driver);
+         db_set_error_handler_driver(driver);
     }
 
     if (table_colors_flag) {

+ 1 - 0
display/d.vect.chart/plot.c

@@ -45,6 +45,7 @@ plot(int ctype, struct Map_info *Map, int type, int field,
 		  Fi->driver);
 	return 1;
     }
+    db_set_error_handler_driver(driver);
 
     val = (double *)G_malloc((ncols + 1) * sizeof(double));	/* + 1 for sizecol */
 

+ 1 - 13
display/d.vect/shape.c

@@ -7,13 +7,6 @@
 
 static int ncolor_rules_skipped = 0;
 
-static void error_handler(void *p)
-{
-    dbDriver *driver = (dbDriver *) p;
-    
-    db_close_database_shutdown_driver(driver);
-}
-
 int get_num_color_rules_skipped()
 {
     return ncolor_rules_skipped;
@@ -50,9 +43,7 @@ int display_shape(struct Map_info *Map, int type, struct cat_list *Clist, const
 	if (!driver)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  fi->database, fi->driver);
-
-	/* add error handler */
-	G_add_error_handler(error_handler, driver);
+        db_set_error_handler_driver(driver);
     }
     
     /* fisrt search for color table */
@@ -183,9 +174,6 @@ int display_shape(struct Map_info *Map, int type, struct cat_list *Clist, const
     }
 
     if (open_db) {
-	/* remove error handler */
-	G_remove_error_handler(error_handler, driver);
-	
 	db_close_database_shutdown_driver(driver);
     }
 

+ 2 - 24
misc/m.nviz.image/vector.c

@@ -24,8 +24,6 @@
 static int load_vectors(const struct Option *, const struct Option *,
 			const struct Option *, const struct Option *, int,
 			nv_data *);
-static void error_handler_vector(void *);
-static void error_handler_db(void *);
 
 /*!
    \brief Load vector maps (lines)
@@ -280,7 +278,7 @@ int check_map(const struct GParams *params, int index, int vlines,
 
     if (1 > Vect_open_old(&Map, map, ""))
 	G_fatal_error(_("Unable to open vector map <%s>"), map);
-    G_add_error_handler(error_handler_vector, &Map);
+    Vect_set_error_handler_io(&Map, NULL);
 
     if (with_z)
 	*with_z = Vect_is_3d(&Map);
@@ -294,7 +292,7 @@ int check_map(const struct GParams *params, int index, int vlines,
 	if (!driver)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Fi->database, Fi->driver);
-	G_add_error_handler(error_handler_db, driver);
+        db_set_error_handler_driver(driver);
 
 	if (color) {
 	    db_get_column(driver, Fi->table, color, &column);
@@ -337,30 +335,10 @@ int check_map(const struct GParams *params, int index, int vlines,
 		G_fatal_error(_("Data type of marker column must be character"));
 	}
 
-	G_remove_error_handler(error_handler_db, driver);
 	db_close_database_shutdown_driver(driver);
     }
 
-    G_remove_error_handler(error_handler_vector, &Map);
     Vect_close(&Map);
 
     return 0;
 }
-
-void error_handler_vector(void *p)
-{
-    struct Map_info *Map;
-
-    Map = (struct Map_info *)p;
-
-    Vect_close(Map);
-}
-
-void error_handler_db(void *p)
-{
-    dbDriver *driver;
-
-    driver = (dbDriver *) p;
-    if (driver)
-	db_close_database_shutdown_driver(driver);
-}

+ 1 - 0
raster/r.stream.extract/close.c

@@ -171,6 +171,7 @@ int close_streamvect(char *stream_vect)
     if (driver == NULL) {
 	G_fatal_error(_("Unable to start driver <%s>"), Fi->driver);
     }
+    db_set_error_handler_driver(driver);
 
     G_debug(1, "table: %s", Fi->table);
     G_debug(1, "driver: %s", Fi->driver);

+ 3 - 8
raster/r.stream.order/stream_vector.c

@@ -227,6 +227,7 @@ int stream_add_table(int number_of_streams)
     driver = db_start_driver_open_database(Fi->driver,
 					   Vect_subst_var(Fi->database,
 							         &Out));
+    db_set_error_handler_driver(driver);
 
     /* create table */
     for (i = 0; i < number_of_streams; ++i)
@@ -267,10 +268,7 @@ int stream_add_table(int number_of_streams)
     db_set_string(&db_sql, buf);
 
     if (db_execute_immediate(driver, &db_sql) != DB_OK) {
-	db_close_database(driver);
-	db_shutdown_driver(driver);
-	G_warning("Unable to create table: '%s'", db_get_string(&db_sql));
-	return -1;
+	G_fatal_error("Unable to create table: '%s'", db_get_string(&db_sql));
     }
 
     if (db_create_index2(driver, Fi->table, cat_col_name) != DB_OK)
@@ -351,10 +349,7 @@ int stream_add_table(int number_of_streams)
 	db_set_string(&db_sql, buf);
 
 	if (db_execute_immediate(driver, &db_sql) != DB_OK) {
-	    db_close_database(driver);
-	    db_shutdown_driver(driver);
-	    G_warning(_("Unable to inset new row: '%s'"), db_get_string(&db_sql));
-	    return -1;
+            G_fatal_error(_("Unable to inset new row: '%s'"), db_get_string(&db_sql));
 	}
     }				/* end for */
 

+ 1 - 0
raster/r.to.vect/main.c

@@ -178,6 +178,7 @@ int main(int argc, char *argv[])
 	if (driver == NULL)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Fi->database, Fi->driver);
+        db_set_error_handler_driver(driver);
 
 	/* Create new table */
 	db_zero_string(&sql);

+ 2 - 0
raster3d/r3.flow/main.c

@@ -46,6 +46,8 @@ static void create_table(struct Map_info *flowline_vec,
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Vect_subst_var(fi->database, flowline_vec), fi->driver);
     }
+    db_set_error_handler_driver(drvr);
+
     *driver = drvr;
     sprintf(buf, "create table %s (cat integer, velocity double precision",
 	    fi->table);

+ 1 - 0
vector/v.buffer/main.c

@@ -413,6 +413,7 @@ int main(int argc, char *argv[])
 	if (Driver == NULL)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Fi->database, Fi->driver);
+        db_set_error_handler_driver(Driver);
 
 	/* Note do not check if the column exists in the table because it may be expression */
 

+ 2 - 1
vector/v.colors.out/make_colors.c

@@ -35,7 +35,8 @@ struct Colors *make_colors(const char *name, const char *layer,
     if (!driver)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      fi->database, fi->driver);
-    
+    db_set_error_handler_driver(driver);
+
     ctype = db_column_Ctype(driver, fi->table, column);
     if (ctype == -1)
 	G_fatal_error(_("Column <%s> not found in table <%s>"),

+ 2 - 1
vector/v.colors/scan_attr.c

@@ -28,7 +28,8 @@ int scan_attr(const struct Map_info *Map, int layer, const char *column_name,
     if (!driver)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      fi->database, fi->driver);
-    
+    db_set_error_handler_driver(driver);
+
     ctype = db_column_Ctype(driver, fi->table, column_name);
     if (ctype == -1)
 	G_fatal_error(_("Column <%s> not found in table <%s>"),

+ 1 - 0
vector/v.colors/write_rgb.c

@@ -24,6 +24,7 @@ void write_rgb_values(const struct Map_info *Map, int layer, const char *column_
     if (!driver)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      fi->database, fi->driver);
+    db_set_error_handler_driver(driver);
 
     db_init_string(&stmt);
     

+ 1 - 4
vector/v.convert/att.c

@@ -74,10 +74,9 @@ int attributes(char *in, struct Map_info *Out)
 	G_fatal_error(_("Unable to open database <%s>"),
 		      fi->database);
     }
+    db_set_error_handler_driver(driver);
 
     if (db_execute_immediate(driver, &sql) != DB_OK) {
-	db_close_database(driver);
-	db_shutdown_driver(driver);
 	G_fatal_error(_("Unable to create table: '%s'"),
 		      db_get_string(&sql));
     }
@@ -106,8 +105,6 @@ int attributes(char *in, struct Map_info *Out)
 	G_debug(3, db_get_string(&sql));
 
 	if (db_execute_immediate(driver, &sql) != DB_OK) {
-	    db_close_database(driver);
-	    db_shutdown_driver(driver);
 	    G_fatal_error(_("Unable to insert new record: '%s'"),
 			  db_get_string(&sql));
 	}

+ 1 - 0
vector/v.db.select/main.c

@@ -170,6 +170,7 @@ int main(int argc, char **argv)
     if (!driver)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(driver);
 
     if (col_opt->answer)
 	sprintf(query, "SELECT %s FROM ", col_opt->answer);

+ 1 - 0
vector/v.edit/select.c

@@ -515,6 +515,7 @@ int sel_by_where(struct Map_info *Map,
     if (db_open_database(driver, &handle) != DB_OK)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(driver);
 
     ncats = db_select_int(driver, Fi->table, Fi->key, where, &cats);
 

+ 1 - 0
vector/v.in.db/main.c

@@ -302,6 +302,7 @@ int main(int argc, char *argv[])
                 G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
                               fi->database, fi->driver);
             }
+            db_set_error_handler_driver(driver);
 
             /* add key column */
             sprintf(buf, "ALTER TABLE %s ADD COLUMN %s INTEGER",

+ 2 - 0
vector/v.in.dwg/main.c

@@ -213,6 +213,8 @@ int main(int argc, char *argv[])
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Vect_subst_var(Fi->database, &Map), Fi->driver);
     }
+    db_set_error_handler_driver(driver);
+
     db_begin_transaction(driver);
 
     /* Create table */

+ 1 - 0
vector/v.in.dxf/write_vect.c

@@ -211,6 +211,7 @@ static int get_field_cat(struct Map_info *Map, char *layer, int *field,
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Vect_subst_var(Fi[i]->database, Map),
 			  Fi[i]->driver);
+        db_set_error_handler_driver(driver);
 
 	db_begin_transaction(driver);
 

+ 1 - 4
vector/v.in.lidar/main.c

@@ -604,10 +604,9 @@ int main(int argc, char *argv[])
 	    G_fatal_error(_("Unable open database <%s> by driver <%s>"),
 			  Vect_subst_var(Fi->database, &Map), Fi->driver);
 	}
+        db_set_error_handler_driver(driver);
 
 	if (db_execute_immediate(driver, &sql) != DB_OK) {
-	    db_close_database(driver);
-	    db_shutdown_driver(driver);
 	    G_fatal_error(_("Unable to create table: '%s'"),
 			  db_get_string(&sql));
 	}
@@ -780,8 +779,6 @@ int main(int argc, char *argv[])
 	    G_debug(3, db_get_string(&sql));
 
 	    if (db_execute_immediate(driver, &sql) != DB_OK) {
-		db_close_database(driver);
-		db_shutdown_driver(driver);
 		G_fatal_error(_("Cannot insert new row: %s"),
 			      db_get_string(&sql));
 	    }

+ 1 - 0
vector/v.kcv/main.c

@@ -125,6 +125,7 @@ int main(int argc, char *argv[])
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
     }
+    db_set_error_handler_driver(Driver);
 
     buf[0] = '\0';
     if (nlinks < 1)

+ 1 - 0
vector/v.label.sa/labels.c

@@ -77,6 +77,7 @@ label_t *labels_init(struct params *p, int *n_labels)
     if (driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      fi->database, fi->driver);
+    db_set_error_handler_driver(driver);
 
     sql_len = strlen(p->column->answer) + strlen(fi->table) +
 	strlen(fi->key) + 30;

+ 4 - 1
vector/v.lidar.correction/main.c

@@ -164,6 +164,8 @@ int main(int argc, char *argv[])
 	if (driver == NULL)
 	    G_fatal_error(_("No database connection for driver <%s> is defined. Run db.connect."),
 			  dvr);
+        db_set_error_handler_driver(driver);
+        
 	if (P_Drop_Aux_Table(driver, table_name) != DB_OK)
 	    G_fatal_error(_("Old auxiliar table could not be dropped"));
 	db_close_database_shutdown_driver(driver);
@@ -224,6 +226,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("No database connection for driver <%s> is defined. Run db.connect."),
 		      dvr);
+    db_set_error_handler_driver(driver);
 
     /* Create auxiliar table */
     if ((flag_auxiliar =
@@ -235,7 +238,7 @@ int main(int argc, char *argv[])
     }
 
     db_create_index2(driver, table_name, "ID");
-    /* sqlite likes that */
+    /* sqlite likes that ??? */
     db_close_database_shutdown_driver(driver);
     driver = db_start_driver_open_database(dvr, db);
 

+ 2 - 1
vector/v.lidar.edgedetection/main.c

@@ -250,6 +250,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("No database connection for driver <%s> is defined. Run db.connect."),
 		      dvr);
+    db_set_error_handler_driver(driver);
 
     /* Create auxiliar and interpolation table */
     if ((flag_auxiliar = P_Create_Aux4_Table(driver, table_name)) == FALSE)
@@ -261,7 +262,7 @@ int main(int argc, char *argv[])
 
     db_create_index2(driver, table_name, "ID");
     db_create_index2(driver, table_interpolation, "ID");
-    /* sqlite likes that */
+    /* sqlite likes that ??? */
     db_close_database_shutdown_driver(driver);
     driver = db_start_driver_open_database(dvr, db);
 

+ 3 - 0
vector/v.lrs/v.lrs.create/main.c

@@ -295,6 +295,7 @@ int main(int argc, char **argv)
     if (db_open_database(ldriver, &lhandle) != DB_OK)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Lfi->database, Lfi->driver);
+    db_set_error_handler_driver(ldriver);
 
     db_init_handle(&phandle);
     db_init_string(&pstmt);
@@ -303,6 +304,7 @@ int main(int argc, char **argv)
     if (db_open_database(pdriver, &phandle) != DB_OK)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Pfi->database, Pfi->driver);
+    db_set_error_handler_driver(pdriver);
 
     /* Open database for RS table */
     db_init_handle(&rshandle);
@@ -311,6 +313,7 @@ int main(int argc, char **argv)
     db_set_handle(&rshandle, database_opt->answer, NULL);
     if (db_open_database(rsdriver, &rshandle) != DB_OK)
 	G_fatal_error(_("Unable to open database for reference table"));
+    db_set_error_handler_driver(rsdriver);
 
     /* Create new reference table */
     /* perhaps drop table to be conditionalized upon --o ? */

+ 1 - 0
vector/v.lrs/v.lrs.segment/main.c

@@ -153,6 +153,7 @@ int main(int argc, char **argv)
     db_set_handle(&rshandle, database_opt->answer, NULL);
     if (db_open_database(rsdriver, &rshandle) != DB_OK)
 	G_fatal_error(_("Unable to open database for reference table"));
+    db_set_error_handler_driver(rsdriver);
 
     points_read = 0;
     lines_read = 0;

+ 1 - 0
vector/v.mkgrid/main.c

@@ -240,6 +240,7 @@ int main(int argc, char *argv[])
     if (Driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(Driver);
 
     if (grid_info.num_rows < 27 && grid_info.num_cols < 27) {
 	sprintf(buf,

+ 1 - 0
vector/v.net.allpairs/main.c

@@ -165,6 +165,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(driver);
 
     sprintf(buf,
 	    "create table %s ( cat integer, from_cat integer, to_cat integer, cost double precision)",

+ 1 - 1
vector/v.net.centrality/main.c

@@ -245,6 +245,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(driver);
 
     db_init_string(&tmp);
     if (deg_opt->answer)
@@ -262,7 +263,6 @@ int main(int argc, char *argv[])
     G_debug(2, db_get_string(&sql));
 
     if (db_execute_immediate(driver, &sql) != DB_OK) {
-	db_close_database_shutdown_driver(driver);
 	G_fatal_error(_("Unable to create table: '%s'"), db_get_string(&sql));
     }
 

+ 1 - 2
vector/v.net.distance/main.c

@@ -249,6 +249,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(driver);
 
     sprintf(buf,
 	    "create table %s ( cat integer, tcat integer, dist double precision)",
@@ -258,7 +259,6 @@ int main(int argc, char *argv[])
     G_debug(2, db_get_string(&sql));
 
     if (db_execute_immediate(driver, &sql) != DB_OK) {
-	db_close_database_shutdown_driver(driver);
 	G_fatal_error(_("Unable to create table: '%s'"), db_get_string(&sql));
     }
 
@@ -321,7 +321,6 @@ int main(int argc, char *argv[])
 	    db_set_string(&sql, buf);
 	    G_debug(3, db_get_string(&sql));
 	    if (db_execute_immediate(driver, &sql) != DB_OK) {
-		db_close_database_shutdown_driver(driver);
 		G_fatal_error(_("Cannot insert new record: %s"),
 			      db_get_string(&sql));
 	    };

+ 1 - 0
vector/v.net.flow/main.c

@@ -168,6 +168,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(driver);
 
     sprintf(buf, "create table %s (cat integer, flow double precision)",
 	    Fi->table);

+ 1 - 2
vector/v.net.path/path.c

@@ -95,6 +95,7 @@ int path(struct Map_info *In, struct Map_info *Out, char *filename,
     if (driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(driver);
 
     sprintf(buf,
 	    "create table %s ( cat integer, id integer, fcat integer, tcat integer, "
@@ -105,7 +106,6 @@ int path(struct Map_info *In, struct Map_info *Out, char *filename,
     G_debug(2, db_get_string(&sql));
 
     if (db_execute_immediate(driver, &sql) != DB_OK) {
-	db_close_database_shutdown_driver(driver);
 	G_fatal_error(_("Unable to create table: '%s'"), db_get_string(&sql));
     }
 
@@ -330,7 +330,6 @@ int path(struct Map_info *In, struct Map_info *Out, char *filename,
 	G_debug(3, db_get_string(&sql));
 
 	if (db_execute_immediate(driver, &sql) != DB_OK) {
-	    db_close_database_shutdown_driver(driver);
 	    G_fatal_error(_("Cannot insert new record: %s"),
 			  db_get_string(&sql));
 	}

+ 2 - 9
vector/v.net/turntable.c

@@ -7,13 +7,6 @@
 #include <grass/glocale.h>
 #include "proto.h"
 
-void close_db(void *p)
-{
-    dbDriver *driver = (dbDriver *) p;
-
-    db_close_database_shutdown_driver(driver);
-}
-
 static double compute_line_nodes_angle(struct line_pnts *points)
 {
     double x_start, y_start, z;
@@ -726,7 +719,7 @@ void turntable(struct opt *opt)
     if (driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> using driver <%s>"),
 		      database_name, driver_name);
-    G_add_error_handler(close_db, driver);
+    db_set_error_handler_driver(driver);
 
     key_col = "cat";
     sprintf(buf,
@@ -760,7 +753,7 @@ void turntable(struct opt *opt)
 		       tucfield, afield, type);
     Vect_close(&InMap);
 
-    close_db(driver);
+    db_close_database_shutdown_driver(driver);
 
     Vect_build_partial(&OutMap, GV_BUILD_NONE);	/*must be there in order to be topology build */
     Vect_build(&OutMap);

+ 2 - 2
vector/v.out.postgis/table.c

@@ -33,11 +33,11 @@ void check_columns(const struct Map_info *Map, const char *layer,
     if (!driver)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      fi->database, fi->driver);
-    
+    db_set_error_handler_driver(driver);
+     
     db_init_string(&stmt);
     db_set_string(&stmt, fi->table);
     if (db_describe_table(driver, &stmt, &table) != DB_OK) {
-	db_close_database_shutdown_driver(driver);
 	G_fatal_error(_("Unable to describe table <%s>"), fi->table);
     }
     

+ 1 - 8
vector/v.out.vtk/writeVTK.c

@@ -648,6 +648,7 @@ int write_vtk_db_data(FILE * ascii, struct Map_info *Map, VTKInfo * info,
     if (db_open_database(Driver, &handle) != DB_OK)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(Driver);
 
     db_set_string(&dbstring, Fi->table);
     if (db_describe_table(Driver, &dbstring, &Table) != DB_OK)
@@ -728,8 +729,6 @@ int write_vtk_db_data(FILE * ascii, struct Map_info *Map, VTKInfo * info,
 					    db_get_column_name(Column), cat,
 					    Fi, Driver, ncol);
 				if (valbuf == NULL) {
-				    db_close_database(Driver);
-				    db_shutdown_driver(Driver);
 				    G_fatal_error(_("Error reading value of attribute '%s'"),
 						  db_get_column_name(Column));
 				}
@@ -761,8 +760,6 @@ int write_vtk_db_data(FILE * ascii, struct Map_info *Map, VTKInfo * info,
 					    db_get_column_name(Column), cat,
 					    Fi, Driver, ncol);
 				if (valbuf == NULL) {
-				    db_close_database(Driver);
-				    db_shutdown_driver(Driver);
 				    G_fatal_error(_("Error reading value of attribute '%s'"),
 						  db_get_column_name(Column));
 				}
@@ -794,8 +791,6 @@ int write_vtk_db_data(FILE * ascii, struct Map_info *Map, VTKInfo * info,
 					    db_get_column_name(Column), cat,
 					    Fi, Driver, ncol);
 				if (valbuf == NULL) {
-				    db_close_database(Driver);
-				    db_shutdown_driver(Driver);
 				    G_fatal_error(_("Error reading value of attribute '%s'"),
 						  db_get_column_name(Column));
 				}
@@ -825,8 +820,6 @@ int write_vtk_db_data(FILE * ascii, struct Map_info *Map, VTKInfo * info,
 				get_att((char *)db_get_column_name(Column),
 					cat, Fi, Driver, ncol);
 			    if (valbuf == NULL) {
-				db_close_database(Driver);
-				db_shutdown_driver(Driver);
 				G_fatal_error(_("Error reading value of attribute '%s'"),
 					      db_get_column_name(Column));
 			    }

+ 4 - 1
vector/v.outlier/main.c

@@ -184,6 +184,8 @@ int main(int argc, char *argv[])
 	if (driver == NULL)
 	    G_fatal_error(_("No database connection for driver <%s> is defined. Run db.connect."),
 			  dvr);
+        db_set_error_handler_driver(driver);
+
 	if (P_Drop_Aux_Table(driver, table_name) != DB_OK)
 	    G_fatal_error(_("Old auxiliar table could not be dropped"));
 	db_close_database_shutdown_driver(driver);
@@ -250,6 +252,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("No database connection for driver <%s> is defined. Run db.connect."),
 		      dvr);
+    db_set_error_handler_driver(driver);
 
     /* Create auxiliar table */
     if ((flag_auxiliar =
@@ -257,7 +260,7 @@ int main(int argc, char *argv[])
 	G_fatal_error(_("It was impossible to create <%s> table."), table_name);
 
     db_create_index2(driver, table_name, "ID");
-    /* sqlite likes that */
+    /* sqlite likes that ??? */
     db_close_database_shutdown_driver(driver);
     driver = db_start_driver_open_database(dvr, db);
 

+ 2 - 0
vector/v.overlay/main.c

@@ -236,6 +236,8 @@ int main(int argc, char *argv[])
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Fi->database, Fi->driver);
 	}
+        db_set_error_handler_driver(driver);
+
 	db_begin_transaction(driver);
     }
     else {

+ 6 - 1
vector/v.patch/main.c

@@ -137,6 +137,7 @@ int main(int argc, char *argv[])
 		    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 				  fi_out->database, fi_out->driver);
 		}
+                db_set_error_handler_driver(driver_out);
 
 		db_set_string(&table_name_out, fi_out->table);
 		if (db_describe_table(driver_out, &table_name_out, &table_out)
@@ -168,6 +169,7 @@ int main(int argc, char *argv[])
 		    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 				  fi_in->database, fi_in->driver);
 		}
+                db_set_error_handler_driver(driver_in);
 
 		if (!append->answer && i == 0) {
 		    table = &table_out;
@@ -287,6 +289,8 @@ int main(int argc, char *argv[])
 		G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			      fi_out->database, fi_out->driver);
 	    }
+            db_set_error_handler_driver(driver_out);
+
 	    db_begin_transaction(driver_out);
 	}
 
@@ -356,6 +360,7 @@ int main(int argc, char *argv[])
 		    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 				  fi_in->database, fi_in->driver);
 		}
+                db_set_error_handler_driver(driver_in);
 
 		db_set_string(&table_name_in, fi_in->table);
 		copy_records(driver_in, &table_name_in,
@@ -430,8 +435,8 @@ int copy_records(dbDriver * driver_in, dbString * table_name_in,
 	char buf[2000];
 
 	if (db_fetch(&cursor, DB_NEXT, &more) != DB_OK) {
-	    G_fatal_error(_("Cannot fetch row"));
 	    db_close_cursor(&cursor);
+	    G_fatal_error(_("Cannot fetch row"));
 	}
 	if (!more)
 	    break;

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

@@ -132,6 +132,7 @@ int main(int argc, char *argv[])
     if (Driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(Driver);
 
     if (col_opt->answer) {
 	int ctype;
@@ -174,6 +175,7 @@ int main(int argc, char *argv[])
 						    Vect_subst_var(NewFi->
 								   database,
 								   &Out));
+            db_set_error_handler_driver(Driver2);
 
 	    /* get string column length */
 	    db_set_string(&stmt, Fi->table);
@@ -205,8 +207,6 @@ int main(int argc, char *argv[])
 
 	    if (db_execute_immediate(Driver2, &stmt2) != DB_OK) {
 		Vect_close(&Out);
-		db_close_database_shutdown_driver(Driver);
-		db_close_database_shutdown_driver(Driver2);
 		G_fatal_error("Unable to create table: '%s'",
 			      db_get_string(&stmt2));
 	    }
@@ -285,8 +285,6 @@ int main(int argc, char *argv[])
 
 		    if (db_execute_immediate(Driver2, &stmt2) != DB_OK) {
 			Vect_close(&Out);
-			db_close_database_shutdown_driver(Driver);
-			db_close_database_shutdown_driver(Driver2);
 			G_fatal_error(_("Cannot insert data: [%s]"),
 				      db_get_string(&stmt2));
 		    }

+ 2 - 0
vector/v.sample/main.c

@@ -137,6 +137,7 @@ int main(int argc, char **argv)
     if (Driver == NULL)
 	G_fatal_error("Unable to open database <%s> by driver <%s>",
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(Driver);
 
     nrecords = db_select_CatValArray(Driver, Fi->table, Fi->key,
 				     parm.column->answer, NULL, &cvarr);
@@ -177,6 +178,7 @@ int main(int argc, char **argv)
     if (Driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(Driver);
 
     db_begin_transaction(Driver);
     sprintf(buf,

+ 5 - 1
vector/v.surf.bspline/main.c

@@ -240,6 +240,8 @@ int main(int argc, char *argv[])
 	if (driver == NULL)
 	    G_fatal_error(_("No database connection for driver <%s> is defined. Run db.connect."),
 			  drv);
+        db_set_error_handler_driver(driver);
+
 	if (P_Drop_Aux_Table(driver, table_name) != DB_OK)
 	    G_fatal_error(_("Old auxiliary table could not be dropped"));
 	db_close_database_shutdown_driver(driver);
@@ -379,6 +381,7 @@ int main(int argc, char *argv[])
 	if (driver_cats == NULL)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Fi->database, Fi->driver);
+        db_set_error_handler_driver(driver_cats);
 
 	nrec =
 	    db_select_CatValArray(driver_cats, Fi->table, Fi->key,
@@ -406,6 +409,7 @@ int main(int argc, char *argv[])
     if (driver == NULL)
 	G_fatal_error(_("No database connection for driver <%s> is defined. "
 			"Run db.connect."), drv);
+    db_set_error_handler_driver(driver);
 
     /* Create auxiliary table */
     if (vector) {
@@ -416,7 +420,7 @@ int main(int argc, char *argv[])
 			  table_name);
 	}
 	/* db_create_index2(driver, table_name, "ID"); */
-	/* sqlite likes that */
+	/* sqlite likes that ??? */
 	db_close_database_shutdown_driver(driver);
 	driver = db_start_driver_open_database(drv, db);
     }

+ 1 - 2
vector/v.surf.rst/main.c

@@ -589,10 +589,9 @@ int main(int argc, char *argv[])
 	if (driver2 == NULL)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  ff->database, ff->driver);
+        db_set_error_handler_driver(driver2);
 
 	if (db_execute_immediate(driver2, &sql2) != DB_OK) {
-	    db_close_database(driver2);
-	    db_shutdown_driver(driver2);
 	    G_fatal_error(_("Unable to create table '%s'"),
 			  db_get_string(&sql2));
 	}

+ 1 - 0
vector/v.to.db/update.c

@@ -46,6 +46,7 @@ int update(struct Map_info *Map)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
     }
+    db_set_error_handler_driver(driver);
 
     db_begin_transaction(driver);
 

+ 1 - 0
vector/v.to.rast/vect2rast.c

@@ -59,6 +59,7 @@ int vect_to_rast(const char *vector_map, const char *raster_map, const char *fie
 	     db_start_driver_open_database(Fi->driver, Fi->database)) == NULL)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Fi->database, Fi->driver);
+        db_set_error_handler_driver(Driver);
 
 	/* Note do not check if the column exists in the table because it may be expression */
 

+ 2 - 1
vector/v.to.rast3/main.c

@@ -83,7 +83,8 @@ int main(int argc, char *argv[])
     if (Driver == NULL)
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
-
+    db_set_error_handler_driver(Driver);
+    
     /* Note: do not check if the column exists in the table because it may be expression */
 
     nrec = db_select_CatValArray(Driver, Fi->table, Fi->key,

+ 3 - 0
vector/v.univar/main.c

@@ -231,6 +231,8 @@ static void select_from_geometry(void)
 	if (Driver == NULL)
 	    G_fatal_error("Unable to open database <%s> by driver <%s>",
 			  Fi->database, Fi->driver);
+        db_set_error_handler_driver(Driver);
+
 	ncats = db_select_int(Driver, Fi->table, Fi->key, where_opt->answer,
 			      &cats);
 	if (ncats == -1)
@@ -340,6 +342,7 @@ static void select_from_database(void)
     if (Driver == NULL)
 	G_fatal_error("Unable to open database <%s> by driver <%s>",
 		      Fi->database, Fi->driver);
+    db_set_error_handler_driver(Driver);
 
     /* Note do not check if the column exists in the table because it may be an expression */
     db_CatValArray_init(&Cvarr);

+ 1 - 2
vector/v.vol.rst/main.c

@@ -600,10 +600,9 @@ int main(int argc, char *argv[])
 	if (driver == NULL)
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  f->database, f->driver);
+        db_set_error_handler_driver(driver);
 
 	if (db_execute_immediate(driver, &sql) != DB_OK) {
-	    db_close_database(driver);
-	    db_shutdown_driver(driver);
 	    G_fatal_error(_("Unable to create table '%s'"), db_get_string(&sql));
 	}
 	count = 1;

+ 1 - 0
vector/v.what.rast/main.c

@@ -143,6 +143,7 @@ int main(int argc, char *argv[])
 	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 			  Fi->database, Fi->driver);
 	}
+        db_set_error_handler_driver(driver);
     }
 
     /* Open raster */

+ 2 - 1
vector/v.what.rast3/main.c

@@ -125,7 +125,8 @@ int main(int argc, char *argv[])
 	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
 		      Fi->database, Fi->driver);
     }
-    
+    db_set_error_handler_driver(driver);
+
     map = Rast3d_open_cell_old(opt.rast3d->answer, G_find_raster3d(opt.rast3d->answer, ""), &region,
                           RASTER3D_TILE_SAME_AS_FILE, RASTER3D_USE_CACHE_DEFAULT);
 

+ 1 - 0
vector/v.what/what.c

@@ -50,6 +50,7 @@ static void F_generate(const char *drvname, const char *dbname,
     G_debug(2, "Open database");
     if (db_open_database(driver, &handle) != DB_OK)
 	G_fatal_error("Cannot open database");
+    db_set_error_handler_driver(driver);
 
     G_debug(2, "Database opened");