Prechádzať zdrojové kódy

v.external: fix dsn handling (full / db-login-based connection strings)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@70342 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 8 rokov pred
rodič
commit
be03a575ab
2 zmenil súbory, kde vykonal 20 pridanie a 6 odobranie
  1. 9 5
      vector/v.external/dsn.c
  2. 11 1
      vector/v.external/main.c

+ 9 - 5
vector/v.external/dsn.c

@@ -27,7 +27,7 @@ char *get_datasource_name(const char *opt_dsn, int use_ogr)
         database[i] = '\0';
         
         /* build connection string */
-        sprintf(connect_str, "dbname=%s", database);
+        sprintf(connect_str, "%s", opt_dsn);
         
         /* add db.login settings (user, password, host, port) */
         if (DB_OK == db_get_login2("pg", database, &user, &passwd, &host, &port)) {
@@ -61,11 +61,15 @@ char *get_datasource_name(const char *opt_dsn, int use_ogr)
             }
         }
         
-        if (!use_ogr)
-            /* be friendly, ignored 'PG:' prefix for PostGIS links */
+        if (use_ogr) {
             dsn = G_store(connect_str);
-        else
-            G_asprintf(&dsn, "PG:%s", connect_str);
+        }
+        else {
+            /* strip PG: prefix */
+            p = (char *)connect_str;
+            p += strlen("PG:");
+            dsn = G_store(p);
+        }
     }
     else {
         /* other datasources */

+ 11 - 1
vector/v.external/main.c

@@ -138,7 +138,17 @@ int main(int argc, char *argv[])
     if (!flags.override->answer) {
         /* here must be used original dsn since check_projection() is
          * using GDAL library */
-        check_projection(options.dsn->answer, ilayer);
+        char dsn_ogr[DB_SQL_MAX];
+
+        if (!use_ogr && G_strncasecmp(options.dsn->answer, "PG:", 3) == 0) {
+            /* make dsn OGR-compatible */
+            strcpy(dsn_ogr, "PG:");
+            strcat(dsn_ogr, dsn);
+        }
+        else {
+            sprintf(dsn_ogr, "%s", dsn);
+        }
+        check_projection(dsn_ogr, ilayer);
     }
     
     /* create new vector map */