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[])31 int 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