Show
Ignore:
Timestamp:
07/29/09 16:10:39 (15 years ago)
Author:
trnewman
Message:

Fleshed out DSA reference implementation

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vtcross/trunk/src/cognitive_engines/DSA_CE/cbr.c

    r390 r391  
    5757    char *zErrMsg = 0; 
    5858 
    59     printf("command: %s\n", _cbr->command); 
     59    //printf("command: %s\n", _cbr->command); 
    6060    rc = sqlite3_exec(_cbr->db, _cbr->command, callback, 0, &zErrMsg); 
    6161    if( rc!=SQLITE_OK){ 
     
    9393} 
    9494 
     95// create database 
     96cbr 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} 
    95144 
    96145// create database 
     
    181230const char * ops_str[] = { 
    182231    "==", "!=", ">", ">=", "<", "<="}; 
     232 
     233 
     234// cbr search for a sum 
     235int 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 
     263int 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} 
    183310 
    184311 
     
    220347    } 
    221348 
    222     printf("search command: %s\n", _cbr->command); 
     349    //printf("search command: %s\n", _cbr->command); 
    223350 
    224351    rc = ExecuteSearchCommand(_cbr, _retvals); 
     
    279406    // generate command 
    280407    //printf("%s\n", _cbr->command); 
    281     strcpy(_cbr->command, "insert into "); 
     408    strcpy(_cbr->command, "replace into "); 
    282409    strcat(_cbr->command, _cbr->tablename); 
    283410