index.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <grass/dbmi.h>
  2. #include "globals.h"
  3. #include "proto.h"
  4. int
  5. db__driver_create_index ( dbIndex *index )
  6. {
  7. int i, ncols;
  8. PGresult *res;
  9. dbString sql;
  10. G_debug (3, "db__create_index()");
  11. db_init_string (&sql);
  12. init_error();
  13. ncols = db_get_index_number_of_columns ( index );
  14. db_set_string ( &sql, "create" );
  15. if ( db_test_index_type_unique(index) )
  16. db_append_string ( &sql, " unique" );
  17. db_append_string ( &sql, " index " );
  18. db_append_string ( &sql, db_get_index_name(index) );
  19. db_append_string ( &sql, " on " );
  20. db_append_string ( &sql, db_get_index_table_name(index) );
  21. db_append_string ( &sql, " ( " );
  22. for ( i = 0; i < ncols; i++ ) {
  23. if ( i > 0 )
  24. db_append_string ( &sql, ", " );
  25. db_append_string ( &sql, db_get_index_column_name(index,i) );
  26. }
  27. db_append_string ( &sql, " )" );
  28. G_debug (3, " SQL: %s", db_get_string(&sql) );
  29. res = PQexec(pg_conn, db_get_string(&sql) );
  30. if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
  31. append_error( "Cannot create index:\n");
  32. append_error( db_get_string(&sql) );
  33. append_error( "\n" );
  34. append_error(PQerrorMessage(pg_conn));
  35. report_error();
  36. PQclear(res);
  37. db_free_string ( &sql);
  38. return DB_FAILED;
  39. }
  40. PQclear(res);
  41. db_free_string ( &sql);
  42. return DB_OK;
  43. }