index.c
Go to the documentation of this file.00001 #include <string.h>
00002 #include <stdlib.h>
00003 #include <grass/dbmi.h>
00004
00011 void db_init_index(dbIndex * index)
00012 {
00013 db_init_string(&index->indexName);
00014 db_init_string(&index->tableName);
00015 index->numColumns = 0;
00016 index->columnNames = NULL;
00017 index->unique = 0;
00018 }
00019
00026 void db_free_index(dbIndex * index)
00027 {
00028 db_free_string(&index->indexName);
00029 db_free_string(&index->tableName);
00030 if (index->numColumns > 0)
00031 db_free_string_array(index->columnNames, index->numColumns);
00032 db_init_index(index);
00033 }
00034
00041 int db_alloc_index_columns(dbIndex * index, int ncols)
00042 {
00043 index->columnNames = db_alloc_string_array(ncols);
00044 if (index->columnNames == NULL)
00045 return db_get_error_code();
00046 index->numColumns = ncols;
00047
00048 return DB_OK;
00049 }
00050
00057 dbIndex *db_alloc_index_array(int count)
00058 {
00059 dbIndex *list;
00060 int i;
00061
00062 list = (dbIndex *) db_calloc(count, sizeof(dbIndex));
00063 if (list) {
00064 for (i = 0; i < count; i++)
00065 db_init_index(&list[i]);
00066 }
00067 return list;
00068 }
00069
00076 void db_free_index_array(dbIndex * list, int count)
00077 {
00078 int i;
00079
00080 if (list) {
00081 for (i = 0; i < count; i++)
00082 db_free_index(&list[i]);
00083 free(list);
00084 }
00085 }
00086
00093 int db_set_index_name(dbIndex * index, const char *name)
00094 {
00095 return db_set_string(&index->indexName, name);
00096 }
00097
00104 const char *db_get_index_name(dbIndex * index)
00105 {
00106 return db_get_string(&index->indexName);
00107 }
00108
00115 int db_set_index_table_name(dbIndex * index, const char *name)
00116 {
00117 return db_set_string(&index->tableName, name);
00118 }
00119
00126 const char *db_get_index_table_name(dbIndex * index)
00127 {
00128 return db_get_string(&index->tableName);
00129 }
00130
00137 int db_get_index_number_of_columns(dbIndex * index)
00138 {
00139 return index->numColumns;
00140 }
00141
00148 int
00149 db_set_index_column_name(dbIndex * index, int column_num, const char *name)
00150 {
00151 if (column_num < 0 || column_num >= index->numColumns) {
00152 db_error("db_set_index_column_name(): invalid column number");
00153 return db_get_error_code();
00154 }
00155 return db_set_string(&index->columnNames[column_num], name);
00156 }
00157
00164 const char *db_get_index_column_name(dbIndex * index, int column_num)
00165 {
00166 if (column_num < 0 || column_num >= index->numColumns) {
00167 db_error("db_get_index_column_name(): invalid column number");
00168 return ((const char *)NULL);
00169 }
00170 return db_get_string(&index->columnNames[column_num]);
00171 }
00172
00179 int db_set_index_type_unique(dbIndex * index)
00180 {
00181 index->unique = 1;
00182
00183 return 0;
00184 }
00185
00192 int db_set_index_type_non_unique(dbIndex * index)
00193 {
00194 index->unique = 0;
00195
00196 return 0;
00197 }
00198
00205 int db_test_index_type_unique(dbIndex * index)
00206 {
00207 return index->unique != 0;
00208 }
00209
00216 void db_print_index(FILE * fd, dbIndex * index)
00217 {
00218 int i, nCols;
00219
00220 fprintf(fd, "Name: %s\n", db_get_index_name(index));
00221 if (db_test_index_type_unique(index))
00222 fprintf(fd, "Unique: true\n");
00223 else
00224 fprintf(fd, "Unique: false\n");
00225 fprintf(fd, "Table: %s\n", db_get_index_table_name(index));
00226 nCols = db_get_index_number_of_columns(index);
00227 fprintf(fd, "Number of columns: %d\nColumns:\n", nCols);
00228
00229 for (i = 0; i < nCols; i++) {
00230 fprintf(fd, " %s\n", db_get_index_column_name(index, i));
00231 }
00232 }