File: speed15.c

package info (click to toggle)
whitedb 0.7.3%2Bgit200711-1
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 3,340 kB
  • sloc: ansic: 33,250; javascript: 3,299; python: 790; lex: 359; java: 277; makefile: 192; sh: 164; yacc: 138; sed: 41
file content (45 lines) | stat: -rw-r--r-- 1,378 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*

creating a flat pointer list of 10 million records of 5 fields in
a 1 GB database: 
store a pointer to the previous record to field 3 of each record,
store a pointer to the last record to field 2 of first record.

Observe that we use standard C int 0 for the NULL pointer,
this is also what wg_encode_null(db,0) always gives.

real	0m0.666s
user	0m0.516s
sys	0m0.150s

*/

#include <whitedb/dbapi.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv) {
  void *db, *rec, *firstrec, *lastrec;
  char *name="15";
  int i;  
  db = wg_attach_database(name, 1000000000);
  if (!db) { printf("db creation failed \n"); exit(0); }
  rec = wg_create_raw_record(db, 5);
  firstrec=rec; // store for use in the end
  lastrec=rec; 
  for(i=1;i<10000000;i++) {   
    rec = wg_create_raw_record(db, 5);
    if (!rec) { printf("record creation failed \n"); exit(0); }   
    // store a pointer to the previously built record
    wg_set_new_field(db,rec,3,wg_encode_record(db,lastrec));   
    lastrec=rec;
  }  
  // field 3 of the first record will be an encoded NULL pointer
  // which is always just (wg_int)0
  wg_set_new_field(db,firstrec,3,wg_encode_null(db,0));
  // field 2 of the first record will be a pointer to the last record
  wg_set_new_field(db,firstrec,2,wg_encode_record(db,lastrec));
  printf("i %d\n", i);
  wg_detach_database(db);
  return 0;
}