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 }