00001 #include <string.h>
00002 #include <stdlib.h>
00003 #include <grass/dbmi.h>
00004
00011 void
00012 db_init_index (dbIndex *index)
00013
00014 {
00015 db_init_string (&index->indexName);
00016 db_init_string (&index->tableName);
00017 index->numColumns = 0;
00018 index->columnNames = NULL;
00019 index->unique = 0;
00020 }
00021
00028 void
00029 db_free_index (dbIndex *index)
00030
00031 {
00032 db_free_string (&index->indexName);
00033 db_free_string (&index->tableName);
00034 if (index->numColumns > 0)
00035 db_free_string_array (index->columnNames, index->numColumns);
00036 db_init_index(index);
00037 }
00038
00045 int
00046 db_alloc_index_columns (dbIndex *index, int ncols)
00047
00048 {
00049 index->columnNames = db_alloc_string_array (ncols);
00050 if (index->columnNames == NULL)
00051 return db_get_error_code();
00052 index->numColumns = ncols;
00053
00054 return DB_OK;
00055 }
00056
00063 dbIndex *
00064 db_alloc_index_array (int count)
00065
00066 {
00067 dbIndex *list;
00068 int i;
00069
00070 list = (dbIndex *) db_calloc (count, sizeof(dbIndex));
00071 if (list)
00072 {
00073 for (i = 0; i < count; i++)
00074 db_init_index (&list[i]);
00075 }
00076 return list;
00077 }
00078
00085 void
00086 db_free_index_array (dbIndex *list, int count)
00087
00088 {
00089 int i;
00090
00091 if (list)
00092 {
00093 for (i = 0; i < count; i++)
00094 db_free_index (&list[i]);
00095 free (list);
00096 }
00097 }
00098
00105 int
00106 db_set_index_name (dbIndex *index, char *name)
00107
00108 {
00109 return db_set_string (&index->indexName, name);
00110 }
00111
00118 char *
00119 db_get_index_name (dbIndex *index)
00120
00121 {
00122 return db_get_string (&index->indexName);
00123 }
00124
00131 int
00132 db_set_index_table_name (dbIndex *index, char *name)
00133
00134 {
00135 return db_set_string (&index->tableName, name);
00136 }
00137
00144 char *
00145 db_get_index_table_name (dbIndex *index)
00146
00147 {
00148 return db_get_string (&index->tableName);
00149 }
00150
00157 int
00158 db_get_index_number_of_columns (dbIndex *index)
00159
00160 {
00161 return index->numColumns;
00162 }
00163
00170 int
00171 db_set_index_column_name (dbIndex *index, int column_num, char *name)
00172
00173 {
00174 if (column_num < 0 || column_num >= index->numColumns)
00175 {
00176 db_error ("db_set_index_column_name(): invalid column number");
00177 return db_get_error_code();
00178 }
00179 return db_set_string (&index->columnNames[column_num], name);
00180 }
00181
00188 char *
00189 db_get_index_column_name (dbIndex *index, int column_num)
00190
00191 {
00192 if (column_num < 0 || column_num >= index->numColumns)
00193 {
00194 db_error ("db_get_index_column_name(): invalid column number");
00195 return ( (char *) NULL);
00196 }
00197 return db_get_string (&index->columnNames[column_num]);
00198 }
00199
00206 db_set_index_type_unique (dbIndex *index)
00207
00208 {
00209 index->unique = 1;
00210 }
00211
00218 db_set_index_type_non_unique (dbIndex *index)
00219
00220 {
00221 index->unique = 0;
00222 }
00223
00230 db_test_index_type_unique (dbIndex *index)
00231
00232 {
00233 return index->unique != 0;
00234 }
00235
00242 db_print_index (FILE *fd, dbIndex *index)
00243
00244 {
00245 int i, nCols;
00246
00247 fprintf(fd, "Name: %s\n", db_get_index_name(index));
00248 if( db_test_index_type_unique(index))
00249 fprintf(fd, "Unique: true\n");
00250 else
00251 fprintf(fd, "Unique: false\n");
00252 fprintf(fd, "Table: %s\n", db_get_index_table_name(index));
00253 nCols = db_get_index_number_of_columns(index);
00254 fprintf(fd, "Number of columns: %d\nColumns:\n", nCols);
00255 for (i = 0; i < nCols; i++) {
00256 fprintf(fd, " %s\n", db_get_index_column_name(index, i));
00257 }
00258 }