浏览代码

vlib(pg): follow C indentation rules
no tabs (tabs -> spaces)


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@51378 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 13 年之前
父节点
当前提交
fb5b616a45
共有 6 个文件被更改,包括 1585 次插入1575 次删除
  1. 21 22
      lib/vector/Vlib/build_pg.c
  2. 41 41
      lib/vector/Vlib/close_pg.c
  3. 352 349
      lib/vector/Vlib/open_pg.c
  4. 732 723
      lib/vector/Vlib/read_pg.c
  5. 30 30
      lib/vector/Vlib/rewind_pg.c
  6. 409 410
      lib/vector/Vlib/write_pg.c

+ 21 - 22
lib/vector/Vlib/build_pg.c

@@ -6,18 +6,18 @@
    Higher level functions for reading/writing/manipulating vectors.
    Higher level functions for reading/writing/manipulating vectors.
 
 
    \todo Implement build_topo()
    \todo Implement build_topo()
-   
+
    Line offset is
    Line offset is
-    - centroids   : FID
-    - other types : index of the first record (which is FID) in offset array.
- 
+   - centroids   : FID
+   - other types : index of the first record (which is FID) in offset array.
+
    (C) 2012 by the GRASS Development Team
    (C) 2012 by the GRASS Development Team
 
 
    This program is free software under the GNU General Public License
    This program is free software under the GNU General Public License
    (>=v2). Read the file COPYING that comes with GRASS for details.
    (>=v2). Read the file COPYING that comes with GRASS for details.
 
 
    \author Martin Landa <landa.martin gmail.com>
    \author Martin Landa <landa.martin gmail.com>
-*/
+ */
 
 
 #include <grass/vector.h>
 #include <grass/vector.h>
 #include <grass/glocale.h>
 #include <grass/glocale.h>
@@ -32,12 +32,12 @@ static int build_topo(struct Map_info *, int);
    \brief Build topology for PostGIS layer
    \brief Build topology for PostGIS layer
 
 
    Build levels:
    Build levels:
-    - GV_BUILD_NONE
-    - GV_BUILD_BASE
-    - GV_BUILD_ATTACH_ISLES
-    - GV_BUILD_CENTROIDS
-    - GV_BUILD_ALL
-   
+   - GV_BUILD_NONE
+   - GV_BUILD_BASE
+   - GV_BUILD_ATTACH_ISLES
+   - GV_BUILD_CENTROIDS
+   - GV_BUILD_ALL
+
    \param Map pointer to Map_info structure
    \param Map pointer to Map_info structure
    \param build build level
    \param build build level
 
 
@@ -50,19 +50,19 @@ int Vect_build_pg(struct Map_info *Map, int build)
     struct Plus_head *plus;
     struct Plus_head *plus;
     struct Format_info_pg *pg_info;
     struct Format_info_pg *pg_info;
 
 
-    plus     = &(Map->plus);
-    pg_info  = &(Map->fInfo.pg);
-    
+    plus = &(Map->plus);
+    pg_info = &(Map->fInfo.pg);
+
     G_debug(1, "Vect_build_pg(): db='%s' table='%s', build=%d",
     G_debug(1, "Vect_build_pg(): db='%s' table='%s', build=%d",
 	    pg_info->db_name, pg_info->table_name, build);
 	    pg_info->db_name, pg_info->table_name, build);
-    
+
     if (build == plus->built)
     if (build == plus->built)
 	return 1;		/* do nothing */
 	return 1;		/* do nothing */
-    
+
     /* TODO move this init to better place (Vect_open_ ?), because in
     /* TODO move this init to better place (Vect_open_ ?), because in
        theory build may be reused on level2 */
        theory build may be reused on level2 */
     if (build >= plus->built && build > GV_BUILD_BASE) {
     if (build >= plus->built && build > GV_BUILD_BASE) {
-	G_free((void *) pg_info->offset.array);
+	G_free((void *)pg_info->offset.array);
 	G_zero(&(pg_info->offset), sizeof(struct Format_info_offset));
 	G_zero(&(pg_info->offset), sizeof(struct Format_info_offset));
     }
     }
 
 
@@ -80,17 +80,16 @@ int Vect_build_pg(struct Map_info *Map, int build)
     }
     }
 
 
     /* commit transaction block (update mode only) */
     /* commit transaction block (update mode only) */
-    if (pg_info->inTransaction &&
-	execute(pg_info->conn, "COMMIT") == -1)
+    if (pg_info->inTransaction && execute(pg_info->conn, "COMMIT") == -1)
 	return -1;
 	return -1;
-    
+
     pg_info->inTransaction = FALSE;
     pg_info->inTransaction = FALSE;
-    
+
     if (build > GV_BUILD_NONE)
     if (build > GV_BUILD_NONE)
 	G_message(_("Using external data format '%s' (feature type '%s')"),
 	G_message(_("Using external data format '%s' (feature type '%s')"),
 		  Vect_get_finfo_format_info(Map),
 		  Vect_get_finfo_format_info(Map),
 		  Vect_get_finfo_geometry_type(Map));
 		  Vect_get_finfo_geometry_type(Map));
-    
+
     return Vect__build_sfa(Map, build);
     return Vect__build_sfa(Map, build);
 #else
 #else
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));

+ 41 - 41
lib/vector/Vlib/close_pg.c

@@ -11,7 +11,7 @@
    (>=v2). Read the file COPYING that comes with GRASS for details.
    (>=v2). Read the file COPYING that comes with GRASS for details.
 
 
    \author Martin Landa <landa.martin gmail.com>
    \author Martin Landa <landa.martin gmail.com>
-*/
+ */
 
 
 #include <stdlib.h>
 #include <stdlib.h>
 #include <grass/vector.h>
 #include <grass/vector.h>
@@ -23,57 +23,57 @@
 #endif
 #endif
 
 
 /*!
 /*!
-  \brief Close vector map (PostGIS layer) on level 1
+   \brief Close vector map (PostGIS layer) on level 1
 
 
-  \param Map pointer to Map_info structure
+   \param Map pointer to Map_info structure
 
 
-  \return 0 on success
-  \return non-zero on error
-*/
+   \return 0 on success
+   \return non-zero on error
+ */
 int V1_close_pg(struct Map_info *Map)
 int V1_close_pg(struct Map_info *Map)
 {
 {
 #ifdef HAVE_POSTGRES
 #ifdef HAVE_POSTGRES
     int i;
     int i;
     struct Format_info_pg *pg_info;
     struct Format_info_pg *pg_info;
-    
+
     G_debug(3, "V2_close_pg() name = %s mapset = %s", Map->name, Map->mapset);
     G_debug(3, "V2_close_pg() name = %s mapset = %s", Map->name, Map->mapset);
-    
+
     if (!VECT_OPEN(Map))
     if (!VECT_OPEN(Map))
-	return -1;
-    
+        return -1;
+
     pg_info = &(Map->fInfo.pg);
     pg_info = &(Map->fInfo.pg);
     if (Map->mode == GV_MODE_WRITE || Map->mode == GV_MODE_RW)
     if (Map->mode == GV_MODE_WRITE || Map->mode == GV_MODE_RW)
-	Vect__write_head(Map);
-    
+        Vect__write_head(Map);
+
     /* close connection */
     /* close connection */
     if (pg_info->res) {
     if (pg_info->res) {
-	char stmt[DB_SQL_MAX];
-	
-	PQclear(pg_info->res);
-	pg_info->res = NULL;
-	
-	sprintf(stmt, "CLOSE %s_%s%p",
-		pg_info->schema_name, pg_info->table_name, pg_info->conn);
-	if (execute(pg_info->conn, stmt) == -1) {
-	    G_warning(_("Unable to close cursor"));
-	    return -1;
-	}
-	execute(pg_info->conn, "COMMIT");
+        char stmt[DB_SQL_MAX];
+
+        PQclear(pg_info->res);
+        pg_info->res = NULL;
+
+        sprintf(stmt, "CLOSE %s_%s%p",
+                pg_info->schema_name, pg_info->table_name, pg_info->conn);
+        if (execute(pg_info->conn, stmt) == -1) {
+            G_warning(_("Unable to close cursor"));
+            return -1;
+        }
+        execute(pg_info->conn, "COMMIT");
     }
     }
-    
+
     PQfinish(pg_info->conn);
     PQfinish(pg_info->conn);
-    
+
     /* close DB connection (for atgtributes) */
     /* close DB connection (for atgtributes) */
     if (pg_info->dbdriver) {
     if (pg_info->dbdriver) {
-	db_close_database_shutdown_driver(pg_info->dbdriver);
+        db_close_database_shutdown_driver(pg_info->dbdriver);
     }
     }
-    
+
     /* free allocated space */
     /* free allocated space */
     for (i = 0; i < pg_info->cache.lines_alloc; i++) {
     for (i = 0; i < pg_info->cache.lines_alloc; i++) {
-	Vect_destroy_line_struct(pg_info->cache.lines[i]);
+        Vect_destroy_line_struct(pg_info->cache.lines[i]);
     }
     }
     if (pg_info->cache.lines)
     if (pg_info->cache.lines)
-	G_free(pg_info->cache.lines);
+        G_free(pg_info->cache.lines);
 
 
     G_free(pg_info->db_name);
     G_free(pg_info->db_name);
     G_free(pg_info->schema_name);
     G_free(pg_info->schema_name);
@@ -88,28 +88,28 @@ int V1_close_pg(struct Map_info *Map)
 }
 }
 
 
 /*!
 /*!
-  \brief Close vector map (PostGIS layer) on topological level (write out fidx file)
+   \brief Close vector map (PostGIS layer) on topological level (write out fidx file)
+
+   \param Map pointer to Map_info structure
 
 
-  \param Map pointer to Map_info structure
-  
-  \return 0 on success
-  \return non-zero on error
-*/
+   \return 0 on success
+   \return non-zero on error
+ */
 int V2_close_pg(struct Map_info *Map)
 int V2_close_pg(struct Map_info *Map)
 {
 {
 #ifdef HAVE_POSTGRES
 #ifdef HAVE_POSTGRES
     G_debug(3, "V2_close_pg() name = %s mapset = %s", Map->name, Map->mapset);
     G_debug(3, "V2_close_pg() name = %s mapset = %s", Map->name, Map->mapset);
 
 
     if (!VECT_OPEN(Map))
     if (!VECT_OPEN(Map))
-	return -1;
+        return -1;
 
 
     /* write fidx for maps in the current mapset */
     /* write fidx for maps in the current mapset */
     if (Vect_save_fidx(Map, &(Map->fInfo.pg.offset)) != 1)
     if (Vect_save_fidx(Map, &(Map->fInfo.pg.offset)) != 1)
-	G_warning(_("Unable to save feature index file for vector map <%s>"),
-		  Map->name);
-    
+        G_warning(_("Unable to save feature index file for vector map <%s>"),
+                  Map->name);
+
     G_free(Map->fInfo.pg.offset.array);
     G_free(Map->fInfo.pg.offset.array);
-    
+
     return 0;
     return 0;
 #else
 #else
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));

+ 352 - 349
lib/vector/Vlib/open_pg.c

@@ -26,100 +26,100 @@
 static char *get_key_column(struct Format_info_pg *);
 static char *get_key_column(struct Format_info_pg *);
 static SF_FeatureType ftype_from_string(const char *);
 static SF_FeatureType ftype_from_string(const char *);
 static int drop_table(struct Format_info_pg *);
 static int drop_table(struct Format_info_pg *);
-static int check_schema(const struct Format_info_pg*);
+static int check_schema(const struct Format_info_pg *);
 static int create_table(struct Format_info_pg *, const struct field_info *);
 static int create_table(struct Format_info_pg *, const struct field_info *);
 #endif
 #endif
 
 
 /*!
 /*!
    \brief Open existing PostGIS feature table (level 1 - without topology)
    \brief Open existing PostGIS feature table (level 1 - without topology)
-   
+
    \todo Check database instead of geometry_columns
    \todo Check database instead of geometry_columns
-   
+
    \param[in,out] Map pointer to Map_info structure
    \param[in,out] Map pointer to Map_info structure
    \param update TRUE for write mode, otherwise read-only
    \param update TRUE for write mode, otherwise read-only
-   
+
    \return 0 success
    \return 0 success
    \return -1 error
    \return -1 error
-*/
+ */
 int V1_open_old_pg(struct Map_info *Map, int update)
 int V1_open_old_pg(struct Map_info *Map, int update)
 {
 {
 #ifdef HAVE_POSTGRES
 #ifdef HAVE_POSTGRES
     int found;
     int found;
-    
+
     char stmt[DB_SQL_MAX];
     char stmt[DB_SQL_MAX];
-    
+
     PGresult *res;
     PGresult *res;
-    
+
     struct Format_info_pg *pg_info;
     struct Format_info_pg *pg_info;
-    
+
     pg_info = &(Map->fInfo.pg);
     pg_info = &(Map->fInfo.pg);
     if (!pg_info->conninfo) {
     if (!pg_info->conninfo) {
-	G_warning(_("Connection string not defined"));
-	return -1;
+        G_warning(_("Connection string not defined"));
+        return -1;
     }
     }
-    
+
     if (!pg_info->table_name) {
     if (!pg_info->table_name) {
-	G_warning(_("PostGIS feature table not defined"));
-	return -1;
+        G_warning(_("PostGIS feature table not defined"));
+        return -1;
     }
     }
 
 
-    G_debug(1, "V1_open_old_pg(): conninfo='%s' table='%s'", pg_info->conninfo,
-	    pg_info->table_name);
+    G_debug(1, "V1_open_old_pg(): conninfo='%s' table='%s'",
+            pg_info->conninfo, pg_info->table_name);
 
 
     /* connect database */
     /* connect database */
     pg_info->conn = PQconnectdb(pg_info->conninfo);
     pg_info->conn = PQconnectdb(pg_info->conninfo);
     G_debug(2, "   PQconnectdb(): %s", pg_info->conninfo);
     G_debug(2, "   PQconnectdb(): %s", pg_info->conninfo);
     if (PQstatus(pg_info->conn) == CONNECTION_BAD)
     if (PQstatus(pg_info->conn) == CONNECTION_BAD)
-	G_fatal_error("%s\n%s", _("Connection ton PostgreSQL database failed."), 
-		      PQerrorMessage(pg_info->conn));
+        G_fatal_error("%s\n%s",
+                      _("Connection ton PostgreSQL database failed."),
+                      PQerrorMessage(pg_info->conn));
 
 
     /* get DB name */
     /* get DB name */
     pg_info->db_name = G_store(PQdb(pg_info->conn));
     pg_info->db_name = G_store(PQdb(pg_info->conn));
     if (!pg_info->db_name) {
     if (!pg_info->db_name) {
-	G_warning(_("Unable to get database name"));
-	return -1;
+        G_warning(_("Unable to get database name"));
+        return -1;
     }
     }
-    
+
     /* if schema not defined, use 'public' */
     /* if schema not defined, use 'public' */
     if (!pg_info->schema_name) {
     if (!pg_info->schema_name) {
-	pg_info->schema_name = G_store("public");
+        pg_info->schema_name = G_store("public");
     }
     }
-	
+
     /* get fid and geometry column */
     /* get fid and geometry column */
     sprintf(stmt, "SELECT f_geometry_column, coord_dimension, srid, type "
     sprintf(stmt, "SELECT f_geometry_column, coord_dimension, srid, type "
-	    "FROM geometry_columns WHERE f_table_schema = '%s' AND "
-	    "f_table_name = '%s'",
-	    pg_info->schema_name, pg_info->table_name);
+            "FROM geometry_columns WHERE f_table_schema = '%s' AND "
+            "f_table_name = '%s'", pg_info->schema_name, pg_info->table_name);
     G_debug(2, "SQL: %s", stmt);
     G_debug(2, "SQL: %s", stmt);
-    
+
     res = PQexec(pg_info->conn, stmt);
     res = PQexec(pg_info->conn, stmt);
     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
-	G_fatal_error("%s\n%s", _("No feature tables found in database."),
-		      PQresultErrorMessage(res));
-	
+        G_fatal_error("%s\n%s", _("No feature tables found in database."),
+                      PQresultErrorMessage(res));
+
     found = PQntuples(res) > 0 ? TRUE : FALSE;
     found = PQntuples(res) > 0 ? TRUE : FALSE;
     if (found) {
     if (found) {
-	/* geometry column */
-	pg_info->geom_column = G_store(PQgetvalue(res, 0, 0));
-	G_debug(3, "\t-> table = %s column = %s", pg_info->table_name,
-		pg_info->geom_column);
-	/* fid column */
-	pg_info->fid_column = get_key_column(pg_info);
-	/* coordinates dimension */
-	pg_info->coor_dim = atoi(PQgetvalue(res, 0, 1));
-	/* SRS ID */
-	pg_info->srid = atoi(PQgetvalue(res, 0, 2));
-	/* feature type */
-	pg_info->feature_type = ftype_from_string(PQgetvalue(res, 0, 3));
+        /* geometry column */
+        pg_info->geom_column = G_store(PQgetvalue(res, 0, 0));
+        G_debug(3, "\t-> table = %s column = %s", pg_info->table_name,
+                pg_info->geom_column);
+        /* fid column */
+        pg_info->fid_column = get_key_column(pg_info);
+        /* coordinates dimension */
+        pg_info->coor_dim = atoi(PQgetvalue(res, 0, 1));
+        /* SRS ID */
+        pg_info->srid = atoi(PQgetvalue(res, 0, 2));
+        /* feature type */
+        pg_info->feature_type = ftype_from_string(PQgetvalue(res, 0, 3));
     }
     }
     PQclear(res);
     PQclear(res);
-    
+
     /* no feature in cache */
     /* no feature in cache */
     pg_info->cache.fid = -1;
     pg_info->cache.fid = -1;
 
 
     if (!found) {
     if (!found) {
-	G_warning(_("Feature table <%s> not found in 'geometry_columns'"),
-		  pg_info->table_name);
+        G_warning(_("Feature table <%s> not found in 'geometry_columns'"),
+                  pg_info->table_name);
     }
     }
 
 
     return 0;
     return 0;
@@ -133,23 +133,23 @@ int V1_open_old_pg(struct Map_info *Map, int update)
    \brief Open existing PostGIS layer (level 2 - feature index)
    \brief Open existing PostGIS layer (level 2 - feature index)
 
 
    \param[in,out] Map pointer to Map_info structure
    \param[in,out] Map pointer to Map_info structure
-   
+
    \return 0 success
    \return 0 success
    \return -1 error
    \return -1 error
-*/
+ */
 int V2_open_old_pg(struct Map_info *Map)
 int V2_open_old_pg(struct Map_info *Map)
 {
 {
 #ifdef HAVE_POSTGRES
 #ifdef HAVE_POSTGRES
 
 
     G_debug(3, "V2_open_old_pg(): name = %s mapset = %s", Map->name,
     G_debug(3, "V2_open_old_pg(): name = %s mapset = %s", Map->name,
-	    Map->mapset);
+            Map->mapset);
 
 
     if (Vect_open_fidx(Map, &(Map->fInfo.pg.offset)) != 0) {
     if (Vect_open_fidx(Map, &(Map->fInfo.pg.offset)) != 0) {
-	G_warning(_("Unable to open feature index file for vector map <%s>"),
-		  Vect_get_full_name(Map));
-	G_zero(&(Map->fInfo.pg.offset), sizeof(struct Format_info_offset));
+        G_warning(_("Unable to open feature index file for vector map <%s>"),
+                  Vect_get_full_name(Map));
+        G_zero(&(Map->fInfo.pg.offset), sizeof(struct Format_info_offset));
     }
     }
-    
+
     return 0;
     return 0;
 #else
 #else
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
@@ -162,104 +162,105 @@ int V2_open_old_pg(struct Map_info *Map)
    (level 1)
    (level 1)
 
 
    \todo To implement
    \todo To implement
-   
+
    \param[out] Map pointer to Map_info structure
    \param[out] Map pointer to Map_info structure
    \param name name of PostGIS feature table to create
    \param name name of PostGIS feature table to create
    \param with_z WITH_Z for 3D vector data otherwise WITHOUT_Z
    \param with_z WITH_Z for 3D vector data otherwise WITHOUT_Z
 
 
    \return 0 success
    \return 0 success
    \return -1 error 
    \return -1 error 
-*/
+ */
 int V1_open_new_pg(struct Map_info *Map, const char *name, int with_z)
 int V1_open_new_pg(struct Map_info *Map, const char *name, int with_z)
 {
 {
 #ifdef HAVE_POSTGRES
 #ifdef HAVE_POSTGRES
     char stmt[DB_SQL_MAX];
     char stmt[DB_SQL_MAX];
-    
+
     struct Format_info_pg *pg_info;
     struct Format_info_pg *pg_info;
-    
+
     PGresult *res;
     PGresult *res;
-    
+
     pg_info = &(Map->fInfo.pg);
     pg_info = &(Map->fInfo.pg);
     if (!pg_info->conninfo) {
     if (!pg_info->conninfo) {
-	G_warning(_("Connection string not defined"));
-	return -1;
+        G_warning(_("Connection string not defined"));
+        return -1;
     }
     }
-    
+
     if (!pg_info->table_name) {
     if (!pg_info->table_name) {
-	G_warning(_("PostGIS feature table not defined"));
-	return -1;
+        G_warning(_("PostGIS feature table not defined"));
+        return -1;
     }
     }
 
 
-    G_debug(1, "V1_open_new_pg(): conninfo='%s' table='%s'", pg_info->conninfo,
-	    pg_info->table_name);
+    G_debug(1, "V1_open_new_pg(): conninfo='%s' table='%s'",
+            pg_info->conninfo, pg_info->table_name);
 
 
     /* connect database */
     /* connect database */
     pg_info->conn = PQconnectdb(pg_info->conninfo);
     pg_info->conn = PQconnectdb(pg_info->conninfo);
     G_debug(2, "   PQconnectdb(): %s", pg_info->conninfo);
     G_debug(2, "   PQconnectdb(): %s", pg_info->conninfo);
     if (PQstatus(pg_info->conn) == CONNECTION_BAD)
     if (PQstatus(pg_info->conn) == CONNECTION_BAD)
-	G_fatal_error("%s\n%s", _("Connection ton PostgreSQL database failed."), 
-		      PQerrorMessage(pg_info->conn));
+        G_fatal_error("%s\n%s",
+                      _("Connection ton PostgreSQL database failed."),
+                      PQerrorMessage(pg_info->conn));
 
 
     /* get DB name */
     /* get DB name */
     pg_info->db_name = G_store(PQdb(pg_info->conn));
     pg_info->db_name = G_store(PQdb(pg_info->conn));
     if (!pg_info->db_name) {
     if (!pg_info->db_name) {
-	G_warning(_("Unable to get database name"));
-	return -1;
+        G_warning(_("Unable to get database name"));
+        return -1;
     }
     }
-    
+
     /* if schema not defined, use 'public' */
     /* if schema not defined, use 'public' */
     if (!pg_info->schema_name) {
     if (!pg_info->schema_name) {
-	pg_info->schema_name = G_store("public");
+        pg_info->schema_name = G_store("public");
     }
     }
 
 
     /* if fid_column not defined, use 'ogc_fid' */
     /* if fid_column not defined, use 'ogc_fid' */
     if (!pg_info->fid_column) {
     if (!pg_info->fid_column) {
-	pg_info->fid_column = G_store("ogc_fid");
+        pg_info->fid_column = G_store("ogc_fid");
     }
     }
 
 
     /* if geom_column not defined, use 'wkb_geometry' */
     /* if geom_column not defined, use 'wkb_geometry' */
     if (!pg_info->geom_column) {
     if (!pg_info->geom_column) {
-	pg_info->geom_column = G_store("wkb_geometry");
+        pg_info->geom_column = G_store("wkb_geometry");
     }
     }
-    
+
     /* check if feature table already exists */
     /* check if feature table already exists */
     sprintf(stmt, "SELECT * FROM pg_tables "
     sprintf(stmt, "SELECT * FROM pg_tables "
-	    "WHERE schemaname = '%s' AND tablename = '%s'",
-	    pg_info->schema_name, pg_info->table_name);
+            "WHERE schemaname = '%s' AND tablename = '%s'",
+            pg_info->schema_name, pg_info->table_name);
     G_debug(2, "SQL: %s", stmt);
     G_debug(2, "SQL: %s", stmt);
-    
+
     res = PQexec(pg_info->conn, stmt);
     res = PQexec(pg_info->conn, stmt);
     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
-	G_fatal_error("%s\n%s", _("No feature tables found in database."),
-		      PQresultErrorMessage(res));
+        G_fatal_error("%s\n%s", _("No feature tables found in database."),
+                      PQresultErrorMessage(res));
 
 
     if (PQntuples(res) > 0) {
     if (PQntuples(res) > 0) {
-	/* table found */
-	if (G_get_overwrite()) {
-	    G_warning(_("PostGIS layer <%s.%s> already exists and will be overwritten"),
-		      pg_info->schema_name, pg_info->table_name);
-	    if (drop_table(pg_info) == -1) {
-		G_warning(_("Unable to delete PostGIS layer <%s>"),
-			  pg_info->table_name);
-		return -1;
-	    }
-	}
-	else {
-	    G_fatal_error(_("PostGIS layer <%s.%s> already exists in database '%s'"),
-			  pg_info->schema_name, pg_info->table_name,
-			  pg_info->db_name);
-	    return -1;
-	}
-    }
-    
+        /* table found */
+        if (G_get_overwrite()) {
+            G_warning(_("PostGIS layer <%s.%s> already exists and will be overwritten"),
+                      pg_info->schema_name, pg_info->table_name);
+            if (drop_table(pg_info) == -1) {
+                G_warning(_("Unable to delete PostGIS layer <%s>"),
+                          pg_info->table_name);
+                return -1;
+            }
+        }
+        else {
+            G_fatal_error(_("PostGIS layer <%s.%s> already exists in database '%s'"),
+                          pg_info->schema_name, pg_info->table_name,
+                          pg_info->db_name);
+            return -1;
+        }
+    }
+
     /* no feature in cache */
     /* no feature in cache */
     pg_info->cache.fid = -1;
     pg_info->cache.fid = -1;
 
 
     /* unknown feature type */
     /* unknown feature type */
     pg_info->feature_type = SF_UNKNOWN;
     pg_info->feature_type = SF_UNKNOWN;
-    
+
     PQclear(res);
     PQclear(res);
-    
+
     return 0;
     return 0;
 #else
 #else
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
@@ -273,90 +274,90 @@ int V1_open_new_pg(struct Map_info *Map, const char *name, int with_z)
    V1_open_new_pg() is required to be called before this function.
    V1_open_new_pg() is required to be called before this function.
 
 
    List of currently supported types:
    List of currently supported types:
-    - GV_POINT     (SF_POINT)
-    - GV_LINE      (SF_LINESTRING)
-    - GV_BOUNDARY  (SF_POLYGON)
+   - GV_POINT     (SF_POINT)
+   - GV_LINE      (SF_LINESTRING)
+   - GV_BOUNDARY  (SF_POLYGON)
    \param[in,out] Map pointer to Map_info structure
    \param[in,out] Map pointer to Map_info structure
    \param type feature type (GV_POINT, GV_LINE, ...)
    \param type feature type (GV_POINT, GV_LINE, ...)
 
 
    \return 0 success
    \return 0 success
    \return -1 error 
    \return -1 error 
-*/
+ */
 int V2_open_new_pg(struct Map_info *Map, int type)
 int V2_open_new_pg(struct Map_info *Map, int type)
 {
 {
 #ifdef HAVE_POSTGRES
 #ifdef HAVE_POSTGRES
     int ndblinks;
     int ndblinks;
-    
+
     struct Format_info_pg *pg_info;
     struct Format_info_pg *pg_info;
     struct field_info *Fi;
     struct field_info *Fi;
     struct Key_Value *projinfo, *projunits;
     struct Key_Value *projinfo, *projunits;
-    
+
     Fi = NULL;
     Fi = NULL;
-    
+
     pg_info = &(Map->fInfo.pg);
     pg_info = &(Map->fInfo.pg);
     if (!pg_info->conninfo) {
     if (!pg_info->conninfo) {
-	G_warning(_("Connection string not defined"));
-	return -1;
+        G_warning(_("Connection string not defined"));
+        return -1;
     }
     }
 
 
     if (!pg_info->table_name) {
     if (!pg_info->table_name) {
-	G_warning(_("PostGIS feature table not defined"));
-	return -1;
+        G_warning(_("PostGIS feature table not defined"));
+        return -1;
     }
     }
 
 
     G_debug(1, "V2_open_new_pg(): conninfo='%s' table='%s' -> type = %d",
     G_debug(1, "V2_open_new_pg(): conninfo='%s' table='%s' -> type = %d",
-	    pg_info->conninfo, pg_info->table_name, type);
-    
+            pg_info->conninfo, pg_info->table_name, type);
+
     /* get spatial reference */
     /* get spatial reference */
-    projinfo  = G_get_projinfo();
+    projinfo = G_get_projinfo();
     projunits = G_get_projunits();
     projunits = G_get_projunits();
-    pg_info->srid = 0; /* TODO */
+    pg_info->srid = 0;          /* TODO */
     // Ogr_spatial_ref = GPJ_grass_to_osr(projinfo, projunits);
     // Ogr_spatial_ref = GPJ_grass_to_osr(projinfo, projunits);
     G_free_key_value(projinfo);
     G_free_key_value(projinfo);
     G_free_key_value(projunits);
     G_free_key_value(projunits);
 
 
     /* determine geometry type */
     /* determine geometry type */
-    switch(type) {
+    switch (type) {
     case GV_POINT:
     case GV_POINT:
-	pg_info->feature_type = SF_POINT;
-	break;
+        pg_info->feature_type = SF_POINT;
+        break;
     case GV_LINE:
     case GV_LINE:
-	pg_info->feature_type = SF_LINESTRING;
-	break;
+        pg_info->feature_type = SF_LINESTRING;
+        break;
     case GV_BOUNDARY:
     case GV_BOUNDARY:
-	pg_info->feature_type = SF_POLYGON;
-	break;
+        pg_info->feature_type = SF_POLYGON;
+        break;
     default:
     default:
-	G_warning(_("Unsupported geometry type (%d)"), type);
-	return -1;
+        G_warning(_("Unsupported geometry type (%d)"), type);
+        return -1;
     }
     }
 
 
     /* coordinate dimension */
     /* coordinate dimension */
     pg_info->coor_dim = Vect_is_3d(Map) ? 3 : 2;
     pg_info->coor_dim = Vect_is_3d(Map) ? 3 : 2;
-    
+
     /* create new PostGIS table */
     /* create new PostGIS table */
     ndblinks = Vect_get_num_dblinks(Map);
     ndblinks = Vect_get_num_dblinks(Map);
     if (ndblinks > 0) {
     if (ndblinks > 0) {
-	Fi = Vect_get_dblink(Map, 0);
-	if (Fi) {
-	    if (ndblinks > 1)
-		G_warning(_("More layers defined, using driver <%s> and "
-			    "database <%s>"), Fi->driver, Fi->database);
-	}
-	else {
-	    G_warning(_("Database connection not defined. "
-			"Unable to write attributes."));
-	}
-    }
-    
+        Fi = Vect_get_dblink(Map, 0);
+        if (Fi) {
+            if (ndblinks > 1)
+                G_warning(_("More layers defined, using driver <%s> and "
+                            "database <%s>"), Fi->driver, Fi->database);
+        }
+        else {
+            G_warning(_("Database connection not defined. "
+                        "Unable to write attributes."));
+        }
+    }
+
     if (create_table(pg_info, Fi) == -1) {
     if (create_table(pg_info, Fi) == -1) {
-	G_warning(_("Unable to create new PostGIS table"));
-	return -1;
+        G_warning(_("Unable to create new PostGIS table"));
+        return -1;
     }
     }
 
 
-    if (Fi) 
-	G_free(Fi);
-    
+    if (Fi)
+        G_free(Fi);
+
     return 0;
     return 0;
 #else
 #else
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
@@ -369,36 +370,36 @@ char *get_key_column(struct Format_info_pg *pg_info)
 {
 {
     char *key_column;
     char *key_column;
     char stmt[DB_SQL_MAX];
     char stmt[DB_SQL_MAX];
-    
+
     PGresult *res;
     PGresult *res;
-    
+
     sprintf(stmt,
     sprintf(stmt,
-	    "SELECT kcu.column_name "
-	    "FROM INFORMATION_SCHEMA.TABLES t "
-	    "LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc "
-	    "ON tc.table_catalog = t.table_catalog "
-	    "AND tc.table_schema = t.table_schema "
-	    "AND tc.table_name = t.table_name "
-	    "AND tc.constraint_type = 'PRIMARY KEY' "
-	    "LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu "
-	    "ON kcu.table_catalog = tc.table_catalog "
-	    "AND kcu.table_schema = tc.table_schema "
-	    "AND kcu.table_name = tc.table_name "
-	    "AND kcu.constraint_name = tc.constraint_name "
-	    "WHERE t.table_schema = '%s' AND t.table_name = '%s'",
-	    pg_info->schema_name, pg_info->table_name);
+            "SELECT kcu.column_name "
+            "FROM INFORMATION_SCHEMA.TABLES t "
+            "LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc "
+            "ON tc.table_catalog = t.table_catalog "
+            "AND tc.table_schema = t.table_schema "
+            "AND tc.table_name = t.table_name "
+            "AND tc.constraint_type = 'PRIMARY KEY' "
+            "LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu "
+            "ON kcu.table_catalog = tc.table_catalog "
+            "AND kcu.table_schema = tc.table_schema "
+            "AND kcu.table_name = tc.table_name "
+            "AND kcu.constraint_name = tc.constraint_name "
+            "WHERE t.table_schema = '%s' AND t.table_name = '%s'",
+            pg_info->schema_name, pg_info->table_name);
     G_debug(2, "SQL: %s", stmt);
     G_debug(2, "SQL: %s", stmt);
-    
+
     res = PQexec(pg_info->conn, stmt);
     res = PQexec(pg_info->conn, stmt);
     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK ||
     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK ||
-	PQntuples(res) != 1 || strlen(PQgetvalue(res, 0, 0)) < 1) {
-	G_warning(_("No key column detected."));
-	if (res)
-	    PQclear(res);
-	return NULL;
+        PQntuples(res) != 1 || strlen(PQgetvalue(res, 0, 0)) < 1) {
+        G_warning(_("No key column detected."));
+        if (res)
+            PQclear(res);
+        return NULL;
     }
     }
     key_column = G_store(PQgetvalue(res, 0, 0));
     key_column = G_store(PQgetvalue(res, 0, 0));
-    
+
     PQclear(res);
     PQclear(res);
 
 
     return key_column;
     return key_column;
@@ -409,24 +410,24 @@ SF_FeatureType ftype_from_string(const char *type)
     SF_FeatureType sf_type;
     SF_FeatureType sf_type;
 
 
     if (G_strcasecmp(type, "POINT") == 0)
     if (G_strcasecmp(type, "POINT") == 0)
-	return SF_POINT;
+        return SF_POINT;
     else if (G_strcasecmp(type, "LINESTRING") == 0)
     else if (G_strcasecmp(type, "LINESTRING") == 0)
-	return SF_LINESTRING;
+        return SF_LINESTRING;
     else if (G_strcasecmp(type, "POLYGON") == 0)
     else if (G_strcasecmp(type, "POLYGON") == 0)
-	return SF_POLYGON;
+        return SF_POLYGON;
     else if (G_strcasecmp(type, "MULTIPOINT") == 0)
     else if (G_strcasecmp(type, "MULTIPOINT") == 0)
-	return SF_MULTIPOINT;
+        return SF_MULTIPOINT;
     else if (G_strcasecmp(type, "MULTILINESTRING") == 0)
     else if (G_strcasecmp(type, "MULTILINESTRING") == 0)
-	return SF_MULTILINESTRING;
+        return SF_MULTILINESTRING;
     else if (G_strcasecmp(type, "MULTIPOLYGON") == 0)
     else if (G_strcasecmp(type, "MULTIPOLYGON") == 0)
-	return SF_MULTIPOLYGON;
+        return SF_MULTIPOLYGON;
     else if (G_strcasecmp(type, "GEOMETRYCOLLECTION") == 0)
     else if (G_strcasecmp(type, "GEOMETRYCOLLECTION") == 0)
-	return SF_GEOMETRYCOLLECTION;
-    
+        return SF_GEOMETRYCOLLECTION;
+
     return SF_UNKNOWN;
     return SF_UNKNOWN;
-    
+
     G_debug(3, "ftype_from_string(): type='%s' -> %d", type, sf_type);
     G_debug(3, "ftype_from_string(): type='%s' -> %d", type, sf_type);
-    
+
     return sf_type;
     return sf_type;
 }
 }
 
 
@@ -435,12 +436,12 @@ int drop_table(struct Format_info_pg *pg_info)
     char stmt[DB_SQL_MAX];
     char stmt[DB_SQL_MAX];
 
 
     sprintf(stmt, "DROP TABLE \"%s\".\"%s\"",
     sprintf(stmt, "DROP TABLE \"%s\".\"%s\"",
-	    pg_info->schema_name, pg_info->table_name);
+            pg_info->schema_name, pg_info->table_name);
     G_debug(2, "SQL: %s", stmt);
     G_debug(2, "SQL: %s", stmt);
-    
+
     if (execute(pg_info->conn, stmt) == -1) {
     if (execute(pg_info->conn, stmt) == -1) {
-	return -1;
-    }    
+        return -1;
+    }
     return 0;
     return 0;
 }
 }
 
 
@@ -448,38 +449,39 @@ int check_schema(const struct Format_info_pg *pg_info)
 {
 {
     int i, found, nschema;
     int i, found, nschema;
     char stmt[DB_SQL_MAX];
     char stmt[DB_SQL_MAX];
-    
+
     PGresult *result;
     PGresult *result;
-    
+
     /* add geometry column */
     /* add geometry column */
     sprintf(stmt, "SELECT nspname FROM pg_namespace");
     sprintf(stmt, "SELECT nspname FROM pg_namespace");
     G_debug(2, "SQL: %s", stmt);
     G_debug(2, "SQL: %s", stmt);
     result = PQexec(pg_info->conn, stmt);
     result = PQexec(pg_info->conn, stmt);
-    
+
     if (!result || PQresultStatus(result) != PGRES_TUPLES_OK) {
     if (!result || PQresultStatus(result) != PGRES_TUPLES_OK) {
-	PQclear(result);
-	execute(pg_info->conn, "ROLLBACK");
-	return -1;
+        PQclear(result);
+        execute(pg_info->conn, "ROLLBACK");
+        return -1;
     }
     }
-    
+
     found = FALSE;
     found = FALSE;
     nschema = PQntuples(result);
     nschema = PQntuples(result);
     for (i = 0; i < nschema && !found; i++) {
     for (i = 0; i < nschema && !found; i++) {
-	if (strcmp(pg_info->schema_name, PQgetvalue(result, i, 0)) == 0)
-	    found = TRUE;
+        if (strcmp(pg_info->schema_name, PQgetvalue(result, i, 0)) == 0)
+            found = TRUE;
     }
     }
-    
+
     PQclear(result);
     PQclear(result);
-    
+
     if (!found) {
     if (!found) {
-	sprintf(stmt, "CREATE SCHEMA %s", pg_info->schema_name);
-	if (execute(pg_info->conn, stmt) == -1) {
-	    execute(pg_info->conn, "ROLLBACK");
-	    return -1;
-	}
-	G_warning(_("Schema <%s> doesn't exist, created"), pg_info->schema_name);
-    }
-    
+        sprintf(stmt, "CREATE SCHEMA %s", pg_info->schema_name);
+        if (execute(pg_info->conn, stmt) == -1) {
+            execute(pg_info->conn, "ROLLBACK");
+            return -1;
+        }
+        G_warning(_("Schema <%s> doesn't exist, created"),
+                  pg_info->schema_name);
+    }
+
     return 0;
     return 0;
 }
 }
 
 
@@ -493,194 +495,195 @@ int create_table(struct Format_info_pg *pg_info, const struct field_info *Fi)
     /* by default create spatial index & add primary key */
     /* by default create spatial index & add primary key */
     spatial_index = primary_key = TRUE;
     spatial_index = primary_key = TRUE;
     if (G_find_file2("", "PG", G_mapset())) {
     if (G_find_file2("", "PG", G_mapset())) {
-	FILE *fp;
-	const char *p;
-	
-	struct Key_Value *key_val;
-	
-	fp = G_fopen_old("", "PG", G_mapset());
-	if (!fp) {
-	    G_fatal_error(_("Unable to open PG file"));
-	}
-	key_val = G_fread_key_value(fp);
-	fclose(fp);
-	
-	/* disable spatial index ? */
-	p = G_find_key_value("spatial_index", key_val);
-	if (p && G_strcasecmp(p, "off") == 0)
-	    spatial_index = FALSE;
-	/* disable primary key ? */
-	p = G_find_key_value("primary_key", key_val);
-	if (p && G_strcasecmp(p, "off") == 0)
-	    primary_key = FALSE;
+        FILE *fp;
+        const char *p;
+
+        struct Key_Value *key_val;
+
+        fp = G_fopen_old("", "PG", G_mapset());
+        if (!fp) {
+            G_fatal_error(_("Unable to open PG file"));
+        }
+        key_val = G_fread_key_value(fp);
+        fclose(fp);
+
+        /* disable spatial index ? */
+        p = G_find_key_value("spatial_index", key_val);
+        if (p && G_strcasecmp(p, "off") == 0)
+            spatial_index = FALSE;
+        /* disable primary key ? */
+        p = G_find_key_value("primary_key", key_val);
+        if (p && G_strcasecmp(p, "off") == 0)
+            primary_key = FALSE;
     }
     }
 
 
     /* create schema if not exists */
     /* create schema if not exists */
     if (G_strcasecmp(pg_info->schema_name, "public") != 0) {
     if (G_strcasecmp(pg_info->schema_name, "public") != 0) {
-	if (check_schema(pg_info) != 0)
-	    return -1;
+        if (check_schema(pg_info) != 0)
+            return -1;
     }
     }
-    
+
     /* prepare CREATE TABLE statement */
     /* prepare CREATE TABLE statement */
     sprintf(stmt, "CREATE TABLE \"%s\".\"%s\" (%s SERIAL",
     sprintf(stmt, "CREATE TABLE \"%s\".\"%s\" (%s SERIAL",
-	    pg_info->schema_name, pg_info->table_name,
-	    pg_info->fid_column);
-    
+            pg_info->schema_name, pg_info->table_name, pg_info->fid_column);
+
     if (Fi) {
     if (Fi) {
-	/* append attributes */
-	int col, ncols, sqltype, length, ctype;
-	char stmt_col[DB_SQL_MAX];
-	const char *colname;
-	
-	dbString dbstmt;
-	dbHandle  handle;
-	dbDriver *driver;
-	dbCursor  cursor;
-	dbTable  *table;
-	dbColumn *column;
-	  
-	db_init_string(&dbstmt);
-	db_init_handle(&handle);
-	
-	pg_info->dbdriver = driver = db_start_driver(Fi->driver);
-	if (!driver) {
-	    G_warning(_("Unable to start driver <%s>"), Fi->driver);
-	    return -1;
-	}
-	db_set_handle(&handle, Fi->database, NULL);
-	if (db_open_database(driver, &handle) != DB_OK) {
-	    G_warning(_("Unable to open database <%s> by driver <%s>"),
-		      Fi->database, Fi->driver);
-	    db_close_database_shutdown_driver(driver);
-	    pg_info->dbdriver = NULL;
-	    return -1;
-	}
-
-	/* describe table */
-	db_set_string(&dbstmt, "select * from ");
-	db_append_string(&dbstmt, Fi->table);
-	db_append_string(&dbstmt, " where 0 = 1");	
-	
-	if (db_open_select_cursor(driver, &dbstmt,
-				  &cursor, DB_SEQUENTIAL) != DB_OK) {
-	    G_warning(_("Unable to open select cursor: '%s'"),
-		      db_get_string(&dbstmt));
-	    db_close_database_shutdown_driver(driver);
-	    pg_info->dbdriver = NULL;
-	    return -1;
-	}
-	
-	table = db_get_cursor_table(&cursor);
-	ncols = db_get_table_number_of_columns(table);
-	
-	G_debug(3, "copying attributes: driver = %s database = %s table = %s cols = %d",
-		Fi->driver, Fi->database, Fi->table, ncols);
-		
-	for (col = 0; col < ncols; col++) {
-	    column = db_get_table_column(table, col);
-	    colname = db_get_column_name(column);	
-	    sqltype = db_get_column_sqltype(column);
-	    ctype = db_sqltype_to_Ctype(sqltype);
-	    length = db_get_column_length(column);
-	    
-	    G_debug(3, "\tcolumn = %d name = %s type = %d length = %d",
-		    col, colname, sqltype, length);
-	    
-	    if (strcmp(pg_info->fid_column, colname) == 0) {
-		/* skip fid column if exists */
-		G_debug(3, "\t%s skipped", pg_info->fid_column);
-		continue;
-	    }
-	    
-	    /* append column */
-	    sprintf(stmt_col, ",%s %s", colname, db_sqltype_name(sqltype));
-	    strcat(stmt, stmt_col);
-	    if (ctype == DB_C_TYPE_STRING) {
-		/* length only for string columns */
-		sprintf(stmt_col, "(%d)", length);
-		strcat(stmt, stmt_col);
-	    }
-	}
-
-	db_free_string(&dbstmt);
-    }
-    strcat(stmt, ")"); /* close CREATE TABLE statement */
-    
+        /* append attributes */
+        int col, ncols, sqltype, length, ctype;
+        char stmt_col[DB_SQL_MAX];
+        const char *colname;
+
+        dbString dbstmt;
+        dbHandle handle;
+        dbDriver *driver;
+        dbCursor cursor;
+        dbTable *table;
+        dbColumn *column;
+
+        db_init_string(&dbstmt);
+        db_init_handle(&handle);
+
+        pg_info->dbdriver = driver = db_start_driver(Fi->driver);
+        if (!driver) {
+            G_warning(_("Unable to start driver <%s>"), Fi->driver);
+            return -1;
+        }
+        db_set_handle(&handle, Fi->database, NULL);
+        if (db_open_database(driver, &handle) != DB_OK) {
+            G_warning(_("Unable to open database <%s> by driver <%s>"),
+                      Fi->database, Fi->driver);
+            db_close_database_shutdown_driver(driver);
+            pg_info->dbdriver = NULL;
+            return -1;
+        }
+
+        /* describe table */
+        db_set_string(&dbstmt, "select * from ");
+        db_append_string(&dbstmt, Fi->table);
+        db_append_string(&dbstmt, " where 0 = 1");
+
+        if (db_open_select_cursor(driver, &dbstmt,
+                                  &cursor, DB_SEQUENTIAL) != DB_OK) {
+            G_warning(_("Unable to open select cursor: '%s'"),
+                      db_get_string(&dbstmt));
+            db_close_database_shutdown_driver(driver);
+            pg_info->dbdriver = NULL;
+            return -1;
+        }
+
+        table = db_get_cursor_table(&cursor);
+        ncols = db_get_table_number_of_columns(table);
+
+        G_debug(3,
+                "copying attributes: driver = %s database = %s table = %s cols = %d",
+                Fi->driver, Fi->database, Fi->table, ncols);
+
+        for (col = 0; col < ncols; col++) {
+            column = db_get_table_column(table, col);
+            colname = db_get_column_name(column);
+            sqltype = db_get_column_sqltype(column);
+            ctype = db_sqltype_to_Ctype(sqltype);
+            length = db_get_column_length(column);
+
+            G_debug(3, "\tcolumn = %d name = %s type = %d length = %d",
+                    col, colname, sqltype, length);
+
+            if (strcmp(pg_info->fid_column, colname) == 0) {
+                /* skip fid column if exists */
+                G_debug(3, "\t%s skipped", pg_info->fid_column);
+                continue;
+            }
+
+            /* append column */
+            sprintf(stmt_col, ",%s %s", colname, db_sqltype_name(sqltype));
+            strcat(stmt, stmt_col);
+            if (ctype == DB_C_TYPE_STRING) {
+                /* length only for string columns */
+                sprintf(stmt_col, "(%d)", length);
+                strcat(stmt, stmt_col);
+            }
+        }
+
+        db_free_string(&dbstmt);
+    }
+    strcat(stmt, ")");          /* close CREATE TABLE statement */
+
     /* begin transaction (create table) */
     /* begin transaction (create table) */
     if (execute(pg_info->conn, "BEGIN") == -1) {
     if (execute(pg_info->conn, "BEGIN") == -1) {
-	return -1;
+        return -1;
     }
     }
-    
+
     /* create table */
     /* create table */
     G_debug(2, "SQL: %s", stmt);
     G_debug(2, "SQL: %s", stmt);
     if (execute(pg_info->conn, stmt) == -1) {
     if (execute(pg_info->conn, stmt) == -1) {
-	execute(pg_info->conn, "ROLLBACK");
-	return -1;
+        execute(pg_info->conn, "ROLLBACK");
+        return -1;
     }
     }
-    
+
     /* add primary key ? */
     /* add primary key ? */
     if (primary_key) {
     if (primary_key) {
-	sprintf(stmt, "ALTER TABLE \"%s\".\"%s\" ADD PRIMARY KEY (%s)",
-		pg_info->schema_name, pg_info->table_name,
-		pg_info->fid_column);
-	G_debug(2, "SQL: %s", stmt);
-	if (execute(pg_info->conn, stmt) == -1) {
-	    execute(pg_info->conn, "ROLLBACK");
-	    return -1;
-	}
-    }
-    
+        sprintf(stmt, "ALTER TABLE \"%s\".\"%s\" ADD PRIMARY KEY (%s)",
+                pg_info->schema_name, pg_info->table_name,
+                pg_info->fid_column);
+        G_debug(2, "SQL: %s", stmt);
+        if (execute(pg_info->conn, stmt) == -1) {
+            execute(pg_info->conn, "ROLLBACK");
+            return -1;
+        }
+    }
+
     /* determine geometry type (string) */
     /* determine geometry type (string) */
-    switch(pg_info->feature_type) {
+    switch (pg_info->feature_type) {
     case (SF_POINT):
     case (SF_POINT):
-	geom_type = "POINT";
-	break;
+        geom_type = "POINT";
+        break;
     case (SF_LINESTRING):
     case (SF_LINESTRING):
-	geom_type = "LINESTRING";
-	break;
+        geom_type = "LINESTRING";
+        break;
     case (SF_POLYGON):
     case (SF_POLYGON):
-	geom_type = "POLYGON";
-	break;
+        geom_type = "POLYGON";
+        break;
     default:
     default:
-	G_warning(_("Unsupported feature type %d"), pg_info->feature_type);
-	execute(pg_info->conn, "ROLLBACK");
-	return -1;
+        G_warning(_("Unsupported feature type %d"), pg_info->feature_type);
+        execute(pg_info->conn, "ROLLBACK");
+        return -1;
     }
     }
 
 
     /* add geometry column */
     /* add geometry column */
     sprintf(stmt, "SELECT AddGeometryColumn('%s', '%s', "
     sprintf(stmt, "SELECT AddGeometryColumn('%s', '%s', "
-	    "'%s', %d, '%s', %d)",
-	    pg_info->schema_name, pg_info->table_name,
-	    pg_info->geom_column, pg_info->srid,
-	    geom_type, pg_info->coor_dim);
+            "'%s', %d, '%s', %d)",
+            pg_info->schema_name, pg_info->table_name,
+            pg_info->geom_column, pg_info->srid,
+            geom_type, pg_info->coor_dim);
     G_debug(2, "SQL: %s", stmt);
     G_debug(2, "SQL: %s", stmt);
     result = PQexec(pg_info->conn, stmt);
     result = PQexec(pg_info->conn, stmt);
-    
+
     if (!result || PQresultStatus(result) != PGRES_TUPLES_OK) {
     if (!result || PQresultStatus(result) != PGRES_TUPLES_OK) {
-	PQclear(result);
-	execute(pg_info->conn, "ROLLBACK");
-	return -1;
+        PQclear(result);
+        execute(pg_info->conn, "ROLLBACK");
+        return -1;
     }
     }
-    
+
     /* create index ? */
     /* create index ? */
     if (spatial_index) {
     if (spatial_index) {
-	sprintf(stmt, "CREATE INDEX %s_%s_idx ON \"%s\".\"%s\" USING GIST (%s)",
-		pg_info->table_name, pg_info->geom_column,
-		pg_info->schema_name, pg_info->table_name,
-		pg_info->geom_column);
-	G_debug(2, "SQL: %s", stmt);
-	
-	if (execute(pg_info->conn, stmt) == -1) {
-	    execute(pg_info->conn, "ROLLBACK");
-	    return -1;
-	}
-    }
-    
+        sprintf(stmt,
+                "CREATE INDEX %s_%s_idx ON \"%s\".\"%s\" USING GIST (%s)",
+                pg_info->table_name, pg_info->geom_column,
+                pg_info->schema_name, pg_info->table_name,
+                pg_info->geom_column);
+        G_debug(2, "SQL: %s", stmt);
+
+        if (execute(pg_info->conn, stmt) == -1) {
+            execute(pg_info->conn, "ROLLBACK");
+            return -1;
+        }
+    }
+
     /* close transaction (create table) */
     /* close transaction (create table) */
     if (execute(pg_info->conn, "COMMIT") == -1) {
     if (execute(pg_info->conn, "COMMIT") == -1) {
-	return -1;
+        return -1;
     }
     }
-    
+
     return 0;
     return 0;
 }
 }
 #endif
 #endif

文件差异内容过多而无法显示
+ 732 - 723
lib/vector/Vlib/read_pg.c


+ 30 - 30
lib/vector/Vlib/rewind_pg.c

@@ -11,7 +11,7 @@
    (>=v2). Read the file COPYING that comes with GRASS for details.
    (>=v2). Read the file COPYING that comes with GRASS for details.
 
 
    \author Martin Landa <landa.martin gmail.com>
    \author Martin Landa <landa.martin gmail.com>
-*/
+ */
 
 
 #include <grass/vector.h>
 #include <grass/vector.h>
 #include <grass/glocale.h>
 #include <grass/glocale.h>
@@ -21,46 +21,46 @@
 #endif
 #endif
 
 
 /*! 
 /*! 
-  \brief Rewind vector map (PostGIS layer) to cause reads to start
-  at beginning (level 1)
-  
-  \param Map pointer to Map_info structure
-  
-  \return 0 on success
-  \return -1 on error
+   \brief Rewind vector map (PostGIS layer) to cause reads to start
+   at beginning (level 1)
+
+   \param Map pointer to Map_info structure
+
+   \return 0 on success
+   \return -1 on error
  */
  */
 int V1_rewind_pg(struct Map_info *Map)
 int V1_rewind_pg(struct Map_info *Map)
 {
 {
     G_debug(2, "V1_rewind_pg(): name = %s", Map->name);
     G_debug(2, "V1_rewind_pg(): name = %s", Map->name);
-    
+
 #ifdef HAVE_POSTGRES
 #ifdef HAVE_POSTGRES
     struct Format_info_pg *pg_info;
     struct Format_info_pg *pg_info;
 
 
     pg_info = &(Map->fInfo.pg);
     pg_info = &(Map->fInfo.pg);
-    
+
     /* reset reading */
     /* reset reading */
     pg_info->next_line = 0;
     pg_info->next_line = 0;
 
 
     /* reset cache */
     /* reset cache */
     pg_info->cache.lines_num = pg_info->cache.lines_next = 0;
     pg_info->cache.lines_num = pg_info->cache.lines_next = 0;
     pg_info->cache.fid = -1;
     pg_info->cache.fid = -1;
-    
+
     /* close DB cursor if necessary */
     /* close DB cursor if necessary */
     if (pg_info->res) {
     if (pg_info->res) {
-	char stmt[DB_SQL_MAX];
-	
-	PQclear(pg_info->res);
-	pg_info->res = NULL;
-	
-	sprintf(stmt, "CLOSE %s_%s%p",
-		pg_info->schema_name, pg_info->table_name, pg_info->conn);
-	if (execute(pg_info->conn, stmt) == -1) {
-	    G_warning(_("Unable to close cursor"));
-	    return -1;
-	}
-	execute(pg_info->conn, "COMMIT");
+        char stmt[DB_SQL_MAX];
+
+        PQclear(pg_info->res);
+        pg_info->res = NULL;
+
+        sprintf(stmt, "CLOSE %s_%s%p",
+                pg_info->schema_name, pg_info->table_name, pg_info->conn);
+        if (execute(pg_info->conn, stmt) == -1) {
+            G_warning(_("Unable to close cursor"));
+            return -1;
+        }
+        execute(pg_info->conn, "COMMIT");
     }
     }
-    
+
     return 0;
     return 0;
 #else
 #else
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
     G_fatal_error(_("GRASS is not compiled with PostgreSQL support"));
@@ -69,13 +69,13 @@ int V1_rewind_pg(struct Map_info *Map)
 }
 }
 
 
 /*!
 /*!
-  \brief Rewind vector map (PostGIS layer) to cause reads to start
-  at beginning on topological level (level 2)
-  
-  \param Map pointer to Map_info structure
+   \brief Rewind vector map (PostGIS layer) to cause reads to start
+   at beginning on topological level (level 2)
+
+   \param Map pointer to Map_info structure
 
 
-  \return 0 on success
-  \return -1 on error
+   \return 0 on success
+   \return -1 on error
  */
  */
 int V2_rewind_pg(struct Map_info *Map)
 int V2_rewind_pg(struct Map_info *Map)
 {
 {

文件差异内容过多而无法显示
+ 409 - 410
lib/vector/Vlib/write_pg.c