669{
670 PGresult *result, *geocol_result;
671 GtkTreeIter iter, geocol_iter;
672 GtkListStore *dumper_geocol_combo_list;
673 char *connection_string, *sql_form, *query, *schema, *table, *geocol_query, *geocol_name=NULL;
674 int hasgeo, i, j;
675
676
679
680
681
682
683 query = "SELECT tableoids.oid, n.nspname, tableoids.relname, COALESCE((SELECT 1 from pg_attribute WHERE attrelid = tableoids.oid AND atttypid IN (SELECT oid FROM pg_type WHERE typname in ('geometry', 'geography')) LIMIT 1), 0) hasgeo FROM (SELECT c.oid, c.relname, c.relnamespace FROM pg_class c WHERE c.relkind IN ('r', 'v', 'm', 'f','p') AND c.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname NOT ILIKE 'pg_%' AND nspname <> 'information_schema')) tableoids, pg_namespace n WHERE tableoids.relnamespace = n.oid ORDER BY n.nspname, tableoids.relname";
684
686
687
689
690
691 for (i = 0; i < PQntuples(result); i++)
692 {
693 size_t sz;
695
696
697
698
699 schema = PQgetvalue(result, i, PQfnumber(result, "nspname"));
700 table = PQgetvalue(result, i, PQfnumber(result, "relname"));
701
702 sql_form = "SELECT n.nspname, c.relname, a.attname FROM pg_class c, pg_namespace n, pg_attribute a WHERE c.relnamespace = n.oid AND n.nspname = '%s' AND c.relname = '%s' AND a.attrelid = c.oid AND a.atttypid IN (SELECT oid FROM pg_type WHERE typname in ('geometry', 'geography'))";
703
704 sz = strlen(sql_form) + strlen(schema) + strlen(table) + 1;
705 geocol_query =
malloc(sz);
706 snprintf(geocol_query, sz, sql_form, schema, table);
707
709
710
711
712
713
715
716 if (PQntuples(geocol_result) > 0)
717 {
718
719 for (j = 0; j < PQntuples(geocol_result); j++)
720 {
721 geocol_name = PQgetvalue(geocol_result, j, PQfnumber(geocol_result, "attname"));
722
724 gtk_list_store_set(dumper_geocol_combo_list, &geocol_iter,
726 -1);
727 }
728 }
729 else
730 {
731
732 geocol_name = NULL;
733
735 gtk_list_store_set(dumper_geocol_combo_list, &geocol_iter,
737 -1);
738 }
739
740
741 PQclear(geocol_result);
742
743
745
746
747 hasgeo = atoi(PQgetvalue(result, i, PQfnumber(result, "hasgeo")));
754 -1);
755 }
756
757
758 PQclear(result);
759
760
763
764 return;
765}
char * ShpDumperGetConnectionStringFromConn(SHPCONNECTIONCONFIG *conn)
@ TABLECHOOSER_GEOCOL_COMBO_TEXT
@ TABLECHOOSER_GEOCOL_COMBO_COLUMNS
GtkListStore * chooser_table_list_store
static PGconn * pg_connection
@ TABLECHOOSER_HASGEO_COLUMN
@ TABLECHOOSER_TABLE_COLUMN
@ TABLECHOOSER_SCHEMA_COLUMN
@ TABLECHOOSER_GEO_LISTSTORE_COLUMN
@ TABLECHOOSER_GEO_COLUMN
static SHPCONNECTIONCONFIG * conn