| 95 | // create database |
| 96 | cbr cbr_create_with_primary(char * _filename, char * _tablename, |
| 97 | char * _cols[], char * _primcols[], unsigned int _len, |
| 98 | unsigned int _primlen) |
| 99 | { |
| 100 | // cbr is a pointer to struct cbr_s |
| 101 | cbr _cbr = (cbr) malloc(sizeof(struct cbr_s)); |
| 102 | |
| 103 | // create database |
| 104 | |
| 105 | // copy filename |
| 106 | unsigned int i=0; |
| 107 | strcpy(_cbr->filename, _filename); |
| 108 | |
| 109 | // execute create database command |
| 110 | // database handle |
| 111 | //_cbr->db = NULL; |
| 112 | OpenDatabase(_cbr); |
| 113 | |
| 114 | // create table |
| 115 | |
| 116 | // copy tablename |
| 117 | strcpy(_cbr->tablename, _tablename); |
| 118 | |
| 119 | // number of columns in the table |
| 120 | _cbr->num_columns = _len; |
| 121 | |
| 122 | // generate command |
| 123 | strcpy(_cbr->command, "CREATE TABLE "); |
| 124 | strcat(_cbr->command, _cbr->tablename); |
| 125 | strcat(_cbr->command, "("); |
| 126 | for (i=0; i<_cbr->num_columns; i++) { |
| 127 | strcat(_cbr->command, _cols[i]); |
| 128 | strcat(_cbr->command, " FLOAT"); |
| 129 | strcat(_cbr->command, ", "); |
| 130 | } |
| 131 | strcat(_cbr->command, "PRIMARY KEY ("); |
| 132 | for (i=0; i<_primlen; i++) { |
| 133 | strcat(_cbr->command, _primcols[i]); |
| 134 | if (i != _primlen-1) // not last entry |
| 135 | strcat(_cbr->command, ", "); |
| 136 | } |
| 137 | strcat(_cbr->command, "));"); |
| 138 | |
| 139 | // execute create table command |
| 140 | ExecuteCommand(_cbr); |
| 141 | |
| 142 | return _cbr; |
| 143 | } |
| 232 | |
| 233 | |
| 234 | // cbr search for a sum |
| 235 | int cbr_search_sum( |
| 236 | cbr _cbr, |
| 237 | char *_name, |
| 238 | float *_retvals) |
| 239 | { |
| 240 | int rc; |
| 241 | // generate command |
| 242 | strcpy(_cbr->command, "select SUM( "); |
| 243 | strcat(_cbr->command, _cbr->tablename); |
| 244 | strcat(_cbr->command, "."); |
| 245 | strcat(_cbr->command, _name); |
| 246 | strcat(_cbr->command, ") from "); |
| 247 | strcat(_cbr->command, _cbr->tablename); |
| 248 | strcat(_cbr->command, ";"); |
| 249 | |
| 250 | //printf("search command: %s\n", _cbr->command); |
| 251 | |
| 252 | rc = ExecuteSearchCommand(_cbr, _retvals); |
| 253 | /*printf("search result: "); |
| 254 | for (int i=0; i<_cbr->num_columns; i++) |
| 255 | printf("%f, ",_retvals[i]); |
| 256 | printf("\n"); |
| 257 | */ |
| 258 | return rc; |
| 259 | } |
| 260 | |
| 261 | |
| 262 | // cbr search |
| 263 | int cbr_search_rand( |
| 264 | cbr _cbr, |
| 265 | char *_names[], |
| 266 | int * _ops, |
| 267 | float *_vals, |
| 268 | unsigned int _n, |
| 269 | float *_retvals) |
| 270 | { |
| 271 | int rc; |
| 272 | // generate command |
| 273 | strcpy(_cbr->command, "select "); |
| 274 | strcat(_cbr->command, _cbr->tablename); |
| 275 | strcat(_cbr->command, ".* from "); |
| 276 | strcat(_cbr->command, _cbr->tablename); |
| 277 | strcat(_cbr->command, " where "); |
| 278 | |
| 279 | unsigned int i; |
| 280 | char str_buffer[64]; |
| 281 | for (i=0; i<_n; i++) { |
| 282 | // ensure valid ops value |
| 283 | if (_ops[i] < 0 || _ops[i] > 5) { |
| 284 | printf("error: cbr_search(), invalid ops id : %d\n", _ops[i]); |
| 285 | exit(1); |
| 286 | } |
| 287 | |
| 288 | strcat(_cbr->command, _names[i]); |
| 289 | strcat(_cbr->command, ops_str[_ops[i]]); |
| 290 | sprintf(str_buffer, "%E", _vals[i]); |
| 291 | strcat(_cbr->command, str_buffer); |
| 292 | |
| 293 | if (i<_n-1) |
| 294 | strcat(_cbr->command, " AND "); |
| 295 | else |
| 296 | strcat(_cbr->command, " order by RAND();"); |
| 297 | } |
| 298 | |
| 299 | //printf("search command: %s\n", _cbr->command); |
| 300 | |
| 301 | rc = ExecuteSearchCommand(_cbr, _retvals); |
| 302 | |
| 303 | /*printf("search result: "); |
| 304 | for (i=0; i<_cbr->num_columns; i++) |
| 305 | printf("%f, ",_retvals[i]); |
| 306 | printf("\n"); |
| 307 | */ |
| 308 | return rc; |
| 309 | } |