#include #include #include #include #define FALSE 0 void print_help() { printf("Usage: kyotodbtobdb "); } class CopyVisitor : public kyotocabinet::DB::Visitor { private: DB * m_bdb; public: CopyVisitor(DB * bdb) { m_bdb = bdb; } virtual const char* visit_full(const char* kbuf, size_t ksiz, const char* vbuf, size_t vsiz, size_t* sp) { DBT key, data; /* Initialize our DBTs. */ memset(&key, 0, sizeof(DBT)); key.data = (void *) kbuf; key.size = ksiz; memset(&data, 0, sizeof(DBT)); data.data = (void *) vbuf; data.size = vsiz; int ret = m_bdb->put(m_bdb, NULL, &key, &data, 0); return NOP; } virtual const char* visit_empty(const char* kbuf, size_t ksiz, size_t* sp) { DBT key, data; /* Initialize our DBTs. */ memset(&key, 0, sizeof(DBT)); key.data = (void *) kbuf; key.size = ksiz; memset(&data, 0, sizeof(DBT)); int ret = m_bdb->put(m_bdb, NULL, &key, &data, 0); return NOP; } }; bool convert(kyotocabinet::BasicDB * kyotodb, DB * bdb) { CopyVisitor visitor(bdb); kyotodb->iterate(&visitor, false); return true; } int main(int argc, char * argv[]) { if (argc != 3) { print_help(); exit(1); } const char * kyotodbfile = argv[1]; const char * bdbfile = argv[2]; kyotocabinet::BasicDB * kyotodb = new kyotocabinet::HashDB; kyotodb->open(kyotodbfile, kyotocabinet::BasicDB::OREADER); DB * bdb = NULL; int ret = db_create(&bdb, NULL, 0); ret = bdb->open(bdb, NULL, bdbfile, NULL, DB_HASH, DB_CREATE, 0644); convert(kyotodb, bdb); bdb->sync(bdb, 0); bdb->close(bdb, 0); bdb = NULL; kyotodb->synchronize(); kyotodb->close(); delete kyotodb; return 0; }