hamsterdb Embedded Database 1.1.14
|
00001 00016 #include <iostream> 00017 #include <ham/hamsterdb.hpp> 00018 00019 #define LOOP 10 00020 00021 int 00022 run_demo(void) 00023 { 00024 int i; 00025 ham::db db; /* hamsterdb database object */ 00026 ham::key key; /* a key */ 00027 ham::record record; /* a record */ 00028 00029 /* 00030 * first, create a new database file 00031 */ 00032 db.create("test.db"); 00033 00034 /* 00035 * now we can insert, delete or lookup values in the database 00036 * 00037 * for our test program, we just insert a few values, then look them 00038 * up, then delete them and try to look them up again (which will fail). 00039 */ 00040 for (i=0; i<LOOP; i++) { 00041 key.set_size(sizeof(i)); 00042 key.set_data(&i); 00043 00044 record.set_size(sizeof(i)); 00045 record.set_data(&i); 00046 00047 db.insert(&key, &record); 00048 } 00049 00050 /* 00051 * now lookup all values 00052 * 00053 * for db::find(), we could use the flag HAM_RECORD_USER_ALLOC, if WE 00054 * allocate record.data (otherwise the memory is automatically allocated 00055 * by hamsterdb) 00056 */ 00057 for (i=0; i<LOOP; i++) { 00058 key.set_size(sizeof(i)); 00059 key.set_data(&i); 00060 00061 record=db.find(&key); 00062 00063 /* 00064 * check if the value is ok 00065 */ 00066 if (*(int *)record.get_data()!=i) { 00067 std::cerr << "db::find() ok, but returned bad value" << std::endl; 00068 return (-1); 00069 } 00070 } 00071 00072 /* 00073 * close the database handle, then re-open it (just to demonstrate how 00074 * to open a database file) 00075 */ 00076 db.close(); 00077 db.open("test.db"); 00078 00079 /* 00080 * now erase all values 00081 */ 00082 for (i=0; i<LOOP; i++) { 00083 key.set_size(sizeof(i)); 00084 key.set_data(&i); 00085 00086 db.erase(&key); 00087 } 00088 00089 /* 00090 * once more we try to find all values... every db::find() call must 00091 * now fail with HAM_KEY_NOT_FOUND 00092 */ 00093 for (i=0; i<LOOP; i++) { 00094 key.set_size(sizeof(i)); 00095 key.set_data(&i); 00096 00097 try { 00098 record=db.find(&key); 00099 } 00100 catch (ham::error &e) { 00101 if (e.get_errno()!=HAM_KEY_NOT_FOUND) { 00102 std::cerr << "db::find() returned error " << e.get_string() 00103 << std::endl; 00104 return (-1); 00105 } 00106 } 00107 } 00108 00109 /* 00110 * we're done! no need to close the database handle, it's done 00111 * automatically 00112 */ 00113 00114 std::cout << "success!" << std::endl; 00115 return (0); 00116 } 00117 00118 int 00119 main(int argc, char **argv) 00120 { 00121 try { 00122 return (run_demo()); 00123 } 00124 catch (ham::error &e) { 00125 std::cerr << "run_demo() failed with unexpected error " 00126 << e.get_errno() << " ('" 00127 << e.get_string() << "')" << std::endl; 00128 return (-1); 00129 } 00130 }