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 }

Generated on Thu Jul 16 13:20:15 2009 for GRASS Programmer's Manual by  doxygen 1.5.6