GRASS Programmer's Manual 6.4.1(2011)
|
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 db_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 }