00001 #include <string.h> 00002 #include <stdlib.h> 00003 #include "dbmi.h" 00004 00011 void 00012 db_init_index (index) 00013 dbIndex *index; 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 (index) 00030 dbIndex *index; 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 (index, ncols) 00047 dbIndex *index; 00048 int ncols; 00049 { 00050 index->columnNames = db_alloc_string_array (ncols); 00051 if (index->columnNames == NULL) 00052 return db_get_error_code(); 00053 index->numColumns = ncols; 00054 00055 return DB_OK; 00056 } 00057 00064 dbIndex * 00065 db_alloc_index_array (count) 00066 int count; 00067 { 00068 dbIndex *list; 00069 int i; 00070 00071 list = (dbIndex *) db_calloc (count, sizeof(dbIndex)); 00072 if (list) 00073 { 00074 for (i = 0; i < count; i++) 00075 db_init_index (&list[i]); 00076 } 00077 return list; 00078 } 00079 00086 void 00087 db_free_index_array (list, count) 00088 dbIndex *list; 00089 int count; 00090 { 00091 int i; 00092 00093 if (list) 00094 { 00095 for (i = 0; i < count; i++) 00096 db_free_index (&list[i]); 00097 free (list); 00098 } 00099 } 00100 00107 int 00108 db_set_index_name (index, name) 00109 dbIndex *index; 00110 char *name; 00111 { 00112 return db_set_string (&index->indexName, name); 00113 } 00114 00121 char * 00122 db_get_index_name (index) 00123 dbIndex *index; 00124 { 00125 return db_get_string (&index->indexName); 00126 } 00127 00134 int 00135 db_set_index_table_name (index, name) 00136 dbIndex *index; 00137 char *name; 00138 { 00139 return db_set_string (&index->tableName, name); 00140 } 00141 00148 char * 00149 db_get_index_table_name (index) 00150 dbIndex *index; 00151 { 00152 return db_get_string (&index->tableName); 00153 } 00154 00161 int 00162 db_get_index_number_of_columns (index) 00163 dbIndex *index; 00164 { 00165 return index->numColumns; 00166 } 00167 00174 int 00175 db_set_index_column_name (index, column_num, name) 00176 dbIndex *index; 00177 int column_num; 00178 char *name; 00179 { 00180 if (column_num < 0 || column_num >= index->numColumns) 00181 { 00182 db_error ("db_set_index_column_name(): invalid column number"); 00183 return db_get_error_code(); 00184 } 00185 return db_set_string (&index->columnNames[column_num], name); 00186 } 00187 00194 char * 00195 db_get_index_column_name (index, column_num) 00196 dbIndex *index; 00197 int column_num; 00198 { 00199 if (column_num < 0 || column_num >= index->numColumns) 00200 { 00201 db_error ("db_get_index_column_name(): invalid column number"); 00202 return ( (char *) NULL); 00203 } 00204 return db_get_string (&index->columnNames[column_num]); 00205 } 00206 00213 db_set_index_type_unique (index) 00214 dbIndex *index; 00215 { 00216 index->unique = 1; 00217 } 00218 00225 db_set_index_type_non_unique (index) 00226 dbIndex *index; 00227 { 00228 index->unique = 0; 00229 } 00230 00237 db_test_index_type_unique (index) 00238 dbIndex *index; 00239 { 00240 return index->unique != 0; 00241 } 00242 00249 db_print_index(fd, index) 00250 FILE *fd; 00251 dbIndex *index; 00252 { 00253 int i, nCols; 00254 00255 fprintf(fd, "Name: %s\n", db_get_index_name(index)); 00256 if( db_test_index_type_unique(index)) 00257 fprintf(fd, "Unique: true\n"); 00258 else 00259 fprintf(fd, "Unique: false\n"); 00260 fprintf(fd, "Table: %s\n", db_get_index_table_name(index)); 00261 nCols = db_get_index_number_of_columns(index); 00262 fprintf(fd, "Number of columns: %d\nColumns:\n", nCols); 00263 for (i = 0; i < nCols; i++) { 00264 fprintf(fd, " %s\n", db_get_index_column_name(index, i)); 00265 } 00266 }