Changeset 52

Show
Ignore:
Timestamp:
11/11/07 15:45:26 (1 year ago)
Author:
nlawren2
Message:

Condensing the code
making all the code pretty
the files will now work

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • vowfsc/db-util.h

    r51 r52  
    77#endif 
    88 
     9// Interesting and complicated helper functions 
    910char *db_normalize_dir_name( char *dir_name ); 
    1011 
    1112int db_split_file_name( char *file_path, char **dir_name, char **file_name ); 
    1213 
    13 int db_get_max_file_revision( int file_id ); 
     14int db_parse_file_res( PGresult *res, file_t *file ); 
    1415 
    15 int db_get_max_file_id(); 
    16  
    17 int db_get_max_file_uid(); 
     16int db_parse_dir_res( PGresult *res, dir_t *dir ); 
    1817 
    1918 
    20 int db_get_max_stream_id(); 
     19// Dull and drab SQL query wrappers 
     20int db_get_file_max_revision( int file_id ); 
     21 
     22int db_get_file_max_id(); 
     23 
     24int db_get_file_max_uid(); 
     25 
     26int db_get_file_uid(int file_id, int revision_id ); 
     27 
     28int db_get_stream_max_id(); 
     29 
    2130 
    2231// For get_file and get_dir functions 
  • vowfsc/db.c

    r51 r52  
    121121} 
    122122 
    123 int db_get_max_file_revision( int file_id ){ 
     123int db_parse_file_res( PGresult *res, file_t *file ){ 
     124        // Initialize format 
     125        if( !NUM_FILE_FIELDS ){ 
     126                NUM_FILE_FIELDS = sizeof(file_format)/4+1; 
     127 
     128                if( PQnfields(res) != NUM_FILE_FIELDS ){ 
     129                        NUM_FILE_FIELDS = 0; 
     130                        return NULL; 
     131                } 
     132 
     133        // Fill file_format with column numbers 
     134#define db_int(name)    file_format.name = PQfnumber(res, #name ); 
     135#define db_long(name)   file_format.name = PQfnumber(res, #name ); 
     136#define db_string(name) file_format.name = PQfnumber(res, #name ); 
     137#include "file.db" 
     138        } 
     139 
     140        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     141         
     142        if( PQnfields(res) != NUM_FILE_FIELDS ) return NULL; 
     143 
     144        // Fill stat 
     145#define db_int(name)    file->name = atoi(PQgetvalue(res, 0, file_format.name )); 
     146#define db_long(name)   file->name = atol(PQgetvalue(res, 0, file_format.name )); 
     147#define db_string(name) file->name = strdup(PQgetvalue(res, 0, file_format.name )); 
     148#include "file.db" 
     149         
     150        return 0; 
     151
     152 
     153int db_parse_dir_res( PGresult *res, dir_t *dir ){ 
     154        // Initialize format 
     155        if( !NUM_FILE_FIELDS ){ 
     156                NUM_FILE_FIELDS = sizeof(dir_format)/4+1; 
     157 
     158                if( PQnfields(res) != NUM_FILE_FIELDS ){ 
     159                        NUM_FILE_FIELDS = 0; 
     160                        return NULL; 
     161                } 
     162 
     163        // Fill dir_format with column numbers 
     164#define db_int(name)    dir_format.name = PQfnumber(res, #name ); 
     165#define db_long(name)   dir_format.name = PQfnumber(res, #name ); 
     166#define db_string(name) dir_format.name = PQfnumber(res, #name ); 
     167#include "dir.db" 
     168        } 
     169 
     170        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
     171         
     172        if( PQnfields(res) != NUM_FILE_FIELDS ) return NULL; 
     173 
     174        // Fill stat 
     175#define db_int(name)    dir->name = atoi(PQgetvalue(res, 0, dir_format.name )); 
     176#define db_long(name)   dir->name = atol(PQgetvalue(res, 0, dir_format.name )); 
     177#define db_string(name) dir->name = strdup(PQgetvalue(res, 0, dir_format.name )); 
     178#include "dir.db" 
     179         
     180        return 0; 
     181
     182 
     183int db_get_file_max_revision( int file_id ){ 
    124184        // Make the request 
    125185        char pq_request[BUFFER_SIZE]; 
     
    128188                           "WHERE file_id = \'%i\'", 
    129189                           file_id); 
    130         db_debug_rq(db_get_max_file_revision); 
    131         PGresult *res=PQexec(pq_conn,pq_request); 
    132  
     190        db_debug_rq(db_get_file_max_revision); 
     191        PGresult *res=PQexec(pq_conn,pq_request); 
     192 
     193        // Check to see that the something was returned 
    133194        if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    134195         
     
    179240        // Make PQ request 
    180241        char pq_request[BUFFER_SIZE]; 
    181         sprintf(pq_request,"SELECT * " 
     242        sprintf(pq_request,"SELECT " 
     243#define db_int(name)    #name ", " 
     244#define db_long(name)   #name ", " 
     245#define db_string(name) #name ", " 
     246#include "file.db" 
     247                           "file_uid " 
    182248                           "FROM file " 
    183                            "WHERE file_id = \'%i\'", 
    184                            file_id); 
    185         PGresult *res=PQexec(pq_conn,pq_request); 
    186  
    187         // Initialize format 
    188         if( !NUM_FILE_FIELDS ){ 
    189                 NUM_FILE_FIELDS = sizeof(file_format)/4; 
    190  
    191                 if( PQnfields(res) != NUM_FILE_FIELDS ){ 
    192                         NUM_FILE_FIELDS = 0; 
    193                         return NULL; 
    194                 } 
    195  
    196         // Fill file_format with column numbers 
    197 #define db_int(name)    file_format.name = PQfnumber(res, #name ); 
    198 #define db_long(name)   file_format.name = PQfnumber(res, #name ); 
    199 #define db_string(name) file_format.name = PQfnumber(res, #name ); 
    200 #include "file.db" 
    201         } 
    202  
    203         if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    204          
    205         if( PQnfields(res) != NUM_FILE_FIELDS ) return NULL; 
    206  
    207         // Fill stat 
    208 #define db_int(name)    stat->name = atoi(PQgetvalue(res, 0, file_format.name )); 
    209 #define db_long(name)   stat->name = atol(PQgetvalue(res, 0, file_format.name )); 
    210 #define db_string(name) stat->name = strdup(PQgetvalue(res, 0, file_format.name )); 
    211 #include "file.db" 
    212          
     249                           "WHERE file_id = \'%i\' " 
     250                           "AND revision_id = (SELECT MAX(revision_id) FROM file WHERE file_Id = \'%i\')", 
     251                           file_id, file_id); 
     252        db_debug_rq(db_get_file); 
     253        PGresult *res=PQexec(pq_conn,pq_request); 
     254 
     255        db_parse_file_res(res, stat); 
     256 
    213257        PQfreemem(res); 
    214258 
     
    222266        // Make PQ request 
    223267        char pq_request[BUFFER_SIZE]; 
    224         sprintf(pq_request,"SELECT * " 
     268        sprintf(pq_request,"SELECT " 
     269#define db_int(name)    #name ", " 
     270#define db_long(name)   #name ", " 
     271#define db_string(name) #name ", " 
     272#include "file.db" 
     273                           "file_uid " 
    225274                           "FROM file " 
    226                            "WHERE file_id = \'%i\'
     275                           "WHERE file_id = \'%i\'
    227276                           "AND revision_id = \'%i\'", 
    228277                           file_id, revision_id); 
    229278        PGresult *res=PQexec(pq_conn,pq_request); 
    230279 
    231         // Initialize format 
    232         if( !NUM_FILE_FIELDS ){ 
    233                 NUM_FILE_FIELDS = sizeof(file_format)/4; 
    234  
    235                 if( PQnfields(res) != NUM_FILE_FIELDS ){ 
    236                         NUM_FILE_FIELDS = 0; 
    237                         return NULL; 
    238                 } 
    239  
    240         // Fill file_format with column numbers 
    241 #define db_int(name)    file_format.name = PQfnumber(res, #name ); 
    242 #define db_long(name)   file_format.name = PQfnumber(res, #name ); 
    243 #define db_string(name) file_format.name = PQfnumber(res, #name ); 
    244 #include "file.db" 
    245         } 
    246  
    247         if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    248          
    249         if( PQnfields(res) != NUM_FILE_FIELDS ) return NULL; 
    250  
    251         // Fill stat 
    252 #define db_int(name)    stat->name = atoi(PQgetvalue(res, 0, file_format.name )); 
    253 #define db_long(name)   stat->name = atol(PQgetvalue(res, 0, file_format.name )); 
    254 #define db_string(name) stat->name = strdup(PQgetvalue(res, 0, file_format.name )); 
    255 #include "file.db" 
     280        db_parse_file_res(res, stat); 
    256281         
    257282        PQfreemem(res); 
     
    262287char *db_get_file_data( int file_id ){ 
    263288        char pq_request[BUFFER_SIZE]; 
    264         sprintf(pq_request,"SELECT diff
    265                            "FROM file
    266                            "WHERE file_id = \'%i\'
     289        sprintf(pq_request,"SELECT diff
     290                           "FROM file
     291                           "WHERE file_id = \'%i\'
    267292                           "AND revision_id = (SELECT MAX(revision_id) FROM file WHERE file_id = \'%i\')", 
    268293                           file_id, file_id); 
     
    282307 
    283308char *db_get_file_rev_data( int file_id, int revision_id ){ 
    284         int i = db_get_max_file_revision(file_id); 
     309        int i = db_get_file_max_revision(file_id); 
    285310        char *data, *diff, *temp; 
    286311 
     
    303328        while( --i >= revision_id ){ 
    304329                char pq_request[BUFFER_SIZE]; 
    305                 sprintf(pq_request,"SELECT diff
    306                                    "FROM file
    307                                    "WHERE file_id = \'%i\'
     330                sprintf(pq_request,"SELECT diff
     331                                   "FROM file
     332                                   "WHERE file_id = \'%i\'
    308333                                   "AND revision_id = \'%i\'", 
    309334                                   file_id,i); 
     
    365390        sprintf(pq_request,"SELECT * " 
    366391                           "FROM directory " 
    367                            "WHERE directory_id = \'%i\'", 
    368                            dir_id); 
    369         PGresult *res=PQexec(pq_conn,pq_request); 
    370  
    371         if( !NUM_DIR_FIELDS ){ 
    372                 NUM_DIR_FIELDS = sizeof(dir_format)/4; 
    373  
    374                 if( PQnfields(res) != NUM_DIR_FIELDS ){ 
    375                         NUM_DIR_FIELDS = 0; 
    376                         return NULL; 
    377                 } 
    378  
    379         // Fill dir_format with column numbers 
    380 #define db_int(name)    dir_format.name = PQfnumber(res, #name ); 
    381 #define db_long(name)   dir_format.name = PQfnumber(res, #name ); 
    382 #define db_string(name) dir_format.name = PQfnumber(res, #name ); 
    383 #include "dir.db" 
    384         } 
    385  
    386         if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    387          
    388         if( PQnfields(res) != NUM_DIR_FIELDS ) return NULL; 
    389  
    390         // Fill stat 
    391 #define db_int(name)    stat->name = atoi(PQgetvalue(res, 0, dir_format.name )); 
    392 #define db_long(name)   stat->name = atol(PQgetvalue(res, 0, dir_format.name )); 
    393 #define db_string(name) stat->name = strdup(PQgetvalue(res, 0, dir_format.name )); 
    394 #include "dir.db" 
    395          
     392                           "WHERE directory_id = \'%i\' " 
     393                           "AND revision_id = (SELECT MAX(revision_id) FROM directory WHERE directory_id = \'%i\')", 
     394                           dir_id, dir_id); 
     395        PGresult *res=PQexec(pq_conn,pq_request); 
     396 
     397        db_parse_dir_res(res,stat); 
     398 
    396399        PQfreemem(res); 
    397400 
     
    411414        PGresult *res=PQexec(pq_conn,pq_request); 
    412415 
    413         if( !NUM_DIR_FIELDS ){ 
    414                 NUM_DIR_FIELDS = sizeof(dir_format)/4; 
    415  
    416                 if( PQnfields(res) != NUM_DIR_FIELDS ){ 
    417                         NUM_DIR_FIELDS = 0; 
    418                         return NULL; 
    419                 } 
    420  
    421         // Fill dir_format with column numbers 
    422 #define db_int(name)    dir_format.name = PQfnumber(res, #name ); 
    423 #define db_long(name)   dir_format.name = PQfnumber(res, #name ); 
    424 #define db_string(name) dir_format.name = PQfnumber(res, #name ); 
    425 #include "dir.db" 
    426         } 
    427  
    428         if( PQresultStatus(res) != PGRES_TUPLES_OK ) return NULL; 
    429          
    430         if( PQnfields(res) != NUM_DIR_FIELDS ) return NULL; 
    431  
    432         // Fill stat 
    433 #define db_int(name)    stat->name = atoi(PQgetvalue(res, 0, dir_format.name )); 
    434 #define db_long(name)   stat->name = atol(PQgetvalue(res, 0, dir_format.name )); 
    435 #define db_string(name) stat->name = strdup(PQgetvalue(res, 0, dir_format.name )); 
    436 #include "dir.db" 
    437          
     416        db_parse_dir_res( res, stat ); 
     417 
    438418        PQfreemem(res); 
    439419 
     
    523503} 
    524504 
    525 int db_get_max_stream_id(){ 
     505int db_get_stream_max_id(){ 
    526506        PGresult *res=PQexec(pq_conn,"SELECT MAX(stream_id) FROM stream"); 
    527507 
     
    549529        if( PQresultStatus == PGRES_TUPLES_OK ){ 
    550530                stream_id = atoi(PQgetvalue(res,0,0)); 
    551                 PQfreemem(res); 
    552                  
    553                 sprintf(pq_request, "UPDATE stream " 
    554                                     "SET use_count = use_count + 1 " 
    555                                     "WHERE stream_id = \'%i\'", 
    556                                     stream_id); 
    557                 PQfreemem(PQexec(pq_conn,pq_request)); 
    558531        }else{ 
    559532                PQfreemem(res); 
    560                 stream_id = db_get_max_stream_id() + 1; 
     533                stream_id = db_get_stream_max_id() + 1; 
    561534                 
    562535                sprintf(pq_request, "INSERT stream " 
    563                                     "(stream_id, use_count, stream_name, stream) " 
     536                                    "(stream_id, stream_name, stream) " 
    564537                                    "VALUES" 
    565                                     "\'%i\', \'0\', \'%s\', \'%s\'", 
     538                                    "\'%i\', \'%s\', \'%s\'", 
    566539                                    stream_id, stream_name, stream); 
    567540                PQfreemem(PQexec(pq_conn,pq_request)); 
     
    571544 
    572545 
    573 int db_get_max_file_id(){ 
     546int db_get_file_max_id(){ 
    574547        PGresult *res=PQexec(pq_conn,"SELECT MAX(file_id) FROM file"); 
    575548 
     
    583556} 
    584557 
    585 int db_get_max_file_uid(){ 
     558int db_get_file_max_uid(){ 
    586559        PGresult *res=PQexec(pq_conn,"SELECT MAX(file_uid) FROM file"); 
    587560 
     
    598571        int revision_id, file_id, file_uid; 
    599572         
    600         file_uid = db_get_max_file_uid() + 1; 
     573        file_uid = db_get_file_max_uid() + 1; 
    601574 
    602575        // Check to see that the file does not exist already 
    603576        file_id = db_get_file_id( file_path ); 
    604577        if( !file_id ){ 
    605                 file_id = db_get_max_file_id() + 1; 
     578                file_id = db_get_file_max_id() + 1; 
    606579                revision_id = 0; 
    607580        }else{ 
    608                 revision_id = db_get_max_file_revision( file_id ) + 1; 
     581                revision_id = db_get_file_max_revision( file_id ) + 1; 
    609582        } 
    610583         
     
    647620        dir_t *listing=malloc(*length * sizeof(dir_t)); 
    648621 
    649  
    650         if( !NUM_DIR_FIELDS ){ 
    651                 NUM_DIR_FIELDS = sizeof(dir_format)/4; 
    652  
    653                 if( PQnfields(res) != NUM_DIR_FIELDS ){ 
    654                         NUM_DIR_FIELDS = 0; 
    655                         return NULL; 
    656                 } 
    657  
    658         // Fill dir_format with column numbers 
    659 #define db_int(name)    dir_format.name = PQfnumber(res, #name ); 
    660 #define db_long(name)   dir_format.name = PQfnumber(res, #name ); 
    661 #define db_string(name) dir_format.name = PQfnumber(res, #name ); 
    662 #include "dir.db" 
    663         } 
    664  
    665         if( PQnfields(res) != NUM_DIR_FIELDS ) return NULL; 
    666  
    667622        int i; 
    668         for( i=0; i< *length; ++i ){ 
    669 #define db_int(name)    listing[i].name = atoi(PQgetvalue(res, i, dir_format.name )); 
    670 #define db_long(name)   listing[i].name = atol(PQgetvalue(res, i, dir_format.name )); 
    671 #define db_string(name) listing[i].name = strdup(PQgetvalue(res, i, dir_format.name )); 
    672 #include "dir.db" 
    673         } 
     623        for( i=0; i< *length; ++i ) 
     624                db_parse_dir_res(res, &listing[i]); 
     625         
    674626        PQfreemem(res); 
    675627 
     
    691643        file_t *listing=malloc(*length * sizeof(file_t)); 
    692644 
    693  
    694         if( !NUM_FILE_FIELDS ){ 
    695                 NUM_FILE_FIELDS = sizeof(file_format)/4; 
    696  
    697                 if( PQnfields(res) != NUM_FILE_FIELDS ){ 
    698                         NUM_FILE_FIELDS = 0; 
    699                         return NULL; 
    700                 } 
    701  
    702         // Fill file_format with column numbers 
    703 #define db_int(name)    file_format.name = PQfnumber(res, #name ); 
    704 #define db_long(name)   file_format.name = PQfnumber(res, #name ); 
    705 #define db_string(name) file_format.name = PQfnumber(res, #name ); 
    706 #include "file.db" 
    707         } 
    708  
    709         if( PQnfields(res) != NUM_FILE_FIELDS ) return NULL; 
    710  
    711645        int i; 
    712         for( i=0; i< *length; ++i ){ 
    713 #define db_int(name)    listing[i].name = atoi(PQgetvalue(res, i, file_format.name )); 
    714 #define db_long(name)   listing[i].name = atol(PQgetvalue(res, i, file_format.name )); 
    715 #define db_string(name) listing[i].name = strdup(PQgetvalue(res, i, file_format.name )); 
    716 #include "file.db" 
    717         } 
     646        for( i=0; i< *length; ++i ) 
     647                db_parse_file_res(res, &listing[i]); 
     648         
    718649        PQfreemem(res); 
    719650 
     
    740671        file_t file = *db_get_file( file_id ); 
    741672 
    742         int file_uid = db_get_max_file_uid() + 1; 
     673        int file_uid = db_get_file_max_uid() + 1; 
    743674        int parent_file_id = db_get_file_uid( file_id, file.revision_id ); 
    744675         
     
    786717        file_t file = *db_get_file( file_id ); 
    787718         
    788         int new_file_id = db_get_max_file_id() + 1; 
    789         int file_uid = db_get_max_file_uid() + 1; 
     719        int new_file_id = db_get_file_max_id() + 1; 
     720        int file_uid = db_get_file_max_uid() + 1; 
    790721 
    791722        int parent_file_id = db_get_file_uid( file_id, revision_id ); 
     
    831762        int new_stream_id = db_create_stream(new_stream_name, new_stream); 
    832763 
    833         int file_uid = db_get_max_file_uid() +1; 
     764        int file_uid = db_get_file_max_uid() +1; 
    834765 
    835766        int parent_file_id = db_get_file_uid( file_id, file.revision_id ); 
     
    877808        file_t file = *db_get_file( file_id ); 
    878809 
    879         int file_uid = db_get_max_file_uid() +1; 
     810        int file_uid = db_get_file_max_uid() +1; 
    880811 
    881812        int parent_file_id = db_get_file_uid( file_id, file.revision_id ); 
  • vowfsc/test.c

    r51 r52  
    2525 
    2626        file_t *file=db_get_file(file_id); 
    27         printf("The file revision is: %i\n", file->revision_id ); 
     27        printf("The address is: %x\n", file); 
     28         
     29        printf("The revision is: %i\n", file->revision_id ); 
    2830 
    2931        free(file);