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 }