index.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #include <string.h>
  2. #include <stdlib.h>
  3. #include <grass/dbmi.h>
  4. /*!
  5. \fn
  6. \brief
  7. \return
  8. \param
  9. */
  10. void db_init_index(dbIndex * index)
  11. {
  12. db_init_string(&index->indexName);
  13. db_init_string(&index->tableName);
  14. index->numColumns = 0;
  15. index->columnNames = NULL;
  16. index->unique = 0;
  17. }
  18. /*!
  19. \fn
  20. \brief
  21. \return
  22. \param
  23. */
  24. void db_free_index(dbIndex * index)
  25. {
  26. db_free_string(&index->indexName);
  27. db_free_string(&index->tableName);
  28. if (index->numColumns > 0)
  29. db_free_string_array(index->columnNames, index->numColumns);
  30. db_init_index(index);
  31. }
  32. /*!
  33. \fn
  34. \brief
  35. \return
  36. \param
  37. */
  38. int db_alloc_index_columns(dbIndex * index, int ncols)
  39. {
  40. index->columnNames = db_alloc_string_array(ncols);
  41. if (index->columnNames == NULL)
  42. return db_get_error_code();
  43. index->numColumns = ncols;
  44. return DB_OK;
  45. }
  46. /*!
  47. \fn
  48. \brief
  49. \return
  50. \param
  51. */
  52. dbIndex *db_alloc_index_array(int count)
  53. {
  54. dbIndex *list;
  55. int i;
  56. list = (dbIndex *) db_calloc(count, sizeof(dbIndex));
  57. if (list) {
  58. for (i = 0; i < count; i++)
  59. db_init_index(&list[i]);
  60. }
  61. return list;
  62. }
  63. /*!
  64. \fn
  65. \brief
  66. \return
  67. \param
  68. */
  69. void db_free_index_array(dbIndex * list, int count)
  70. {
  71. int i;
  72. if (list) {
  73. for (i = 0; i < count; i++)
  74. db_free_index(&list[i]);
  75. free(list);
  76. }
  77. }
  78. /*!
  79. \fn
  80. \brief
  81. \return
  82. \param
  83. */
  84. int db_set_index_name(dbIndex * index, const char *name)
  85. {
  86. return db_set_string(&index->indexName, name);
  87. }
  88. /*!
  89. \fn
  90. \brief
  91. \return
  92. \param
  93. */
  94. const char *db_get_index_name(dbIndex * index)
  95. {
  96. return db_get_string(&index->indexName);
  97. }
  98. /*!
  99. \fn
  100. \brief
  101. \return
  102. \param
  103. */
  104. int db_set_index_table_name(dbIndex * index, const char *name)
  105. {
  106. return db_set_string(&index->tableName, name);
  107. }
  108. /*!
  109. \fn
  110. \brief
  111. \return
  112. \param
  113. */
  114. const char *db_get_index_table_name(dbIndex * index)
  115. {
  116. return db_get_string(&index->tableName);
  117. }
  118. /*!
  119. \fn
  120. \brief
  121. \return
  122. \param
  123. */
  124. int db_get_index_number_of_columns(dbIndex * index)
  125. {
  126. return index->numColumns;
  127. }
  128. /*!
  129. \fn
  130. \brief
  131. \return
  132. \param
  133. */
  134. int
  135. db_set_index_column_name(dbIndex * index, int column_num, const char *name)
  136. {
  137. if (column_num < 0 || column_num >= index->numColumns) {
  138. db_error("db_set_index_column_name(): invalid column number");
  139. return db_get_error_code();
  140. }
  141. return db_set_string(&index->columnNames[column_num], name);
  142. }
  143. /*!
  144. \fn
  145. \brief
  146. \return
  147. \param
  148. */
  149. const char *db_get_index_column_name(dbIndex * index, int column_num)
  150. {
  151. if (column_num < 0 || column_num >= index->numColumns) {
  152. db_error("db_get_index_column_name(): invalid column number");
  153. return ((const char *)NULL);
  154. }
  155. return db_get_string(&index->columnNames[column_num]);
  156. }
  157. /*!
  158. \fn
  159. \brief
  160. \return
  161. \param
  162. */
  163. int db_set_index_type_unique(dbIndex * index)
  164. {
  165. index->unique = 1;
  166. return 0;
  167. }
  168. /*!
  169. \fn
  170. \brief
  171. \return
  172. \param
  173. */
  174. int db_set_index_type_non_unique(dbIndex * index)
  175. {
  176. index->unique = 0;
  177. return 0;
  178. }
  179. /*!
  180. \fn
  181. \brief
  182. \return
  183. \param
  184. */
  185. int db_test_index_type_unique(dbIndex * index)
  186. {
  187. return index->unique != 0;
  188. }
  189. /*!
  190. \fn
  191. \brief
  192. \return
  193. \param
  194. */
  195. void db_print_index(FILE * fd, dbIndex * index)
  196. {
  197. int i, nCols;
  198. fprintf(fd, "Name: %s\n", db_get_index_name(index));
  199. if (db_test_index_type_unique(index))
  200. fprintf(fd, "Unique: true\n");
  201. else
  202. fprintf(fd, "Unique: false\n");
  203. fprintf(fd, "Table: %s\n", db_get_index_table_name(index));
  204. nCols = db_get_index_number_of_columns(index);
  205. fprintf(fd, "Number of columns: %d\nColumns:\n", nCols);
  206. for (i = 0; i < nCols; i++) {
  207. fprintf(fd, " %s\n", db_get_index_column_name(index, i));
  208. }
  209. }