index.c 1.2 KB

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