1 //-< TESTFRAG.CPP >--------------------------------------------------*--------* 2 // FastDB Version 1.0 (c) 1999 GARRET * ? * 3 // (Main Memory Database Management System) * /\| * 4 // * / \ * 5 // Created: 26-Jul-2001 K.A. Knizhnik * / [] \ * 6 // Last update: 26-Jul-2001 K.A. Knizhnik * GARRET * 7 //-------------------------------------------------------------------*--------* 8 // Memory allocator test 9 //-------------------------------------------------------------------*--------* 10 11 #include "fastdb.h" 12 #include <stdio.h> 13 14 USE_FASTDB_NAMESPACE 15 16 #define N_ITERATIONS 1000000 17 #define N_RECORDS 100000 18 #define MAX_VALUE_LENGTH 1000 19 20 class Record { 21 public: 22 int id; 23 db_int8 key; 24 dbArray<int1> value; 25 26 TYPE_DESCRIPTOR((KEY(id, HASHED), KEY(key, INDEXED), FIELD(value))); 27 }; 28 29 REGISTER(Record); 30 main(int argc,char * argv[])31int main(int argc, char* argv[]) 32 { 33 int i; 34 dbDatabase db; 35 int nIterations = N_ITERATIONS; 36 if (argc > 1) { 37 nIterations = atoi(argv[1]); 38 } 39 dbDatabase::OpenParameters params; 40 params.databaseName = _T("testfrag"); 41 params.fileOpenFlags = dbFile::no_sync; 42 if (db.open(params)) { 43 Record rec; 44 db_int8 key = 1999; 45 for (i = 0; i < N_RECORDS; i++) { 46 key = (3141592621u*key + 2718281829u) % 1000000007u; 47 rec.id = i; 48 rec.key = key; 49 db.insert(rec); 50 } 51 dbCursor<Record> cursor(dbCursorForUpdate); 52 int id; 53 dbQuery q; 54 q = "id=",id; 55 for (i = 0; i < nIterations; i++) { 56 id = i % N_RECORDS; 57 cursor.select(q); 58 cursor->key = key = (3141592621u*key + 2718281829u) % 1000000007u; 59 cursor->value.resize((unsigned)(key*4) % MAX_VALUE_LENGTH); 60 cursor.update(); 61 db.commit(); 62 if (i % 1000 == 0) { 63 printf("Iteration %d\r", i); 64 fflush(stdout); 65 } 66 } 67 printf("\nUpdate completed\n"); 68 db.close(); 69 } else { 70 fprintf(stderr, "Failed to open database\n"); 71 } 72 return 0; 73 } 74 75 76 77 78 79 80 81 82 83 84 85