本文整理汇总了C++中DB::close方法的典型用法代码示例。如果您正苦于以下问题:C++ DB::close方法的具体用法?C++ DB::close怎么用?C++ DB::close使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DB
的用法示例。
在下文中一共展示了DB::close方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
DB *dbp;
DBT key, data;
int ret, t_ret;
if ((ret = db_create(&dbp, NULL, 0)) != 0)
{
cerr << "db_create:" << db_strerror(ret) << endl;
exit (1);
}
if ((ret = dbp->open(dbp, NULL, kDatabaseName, "",
DB_BTREE, DB_CREATE, 0664)) != 0)
{
dbp->err(dbp, ret, "%s", kDatabaseName);
goto err;
}
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = (char*)"fruit";
key.size = sizeof("fruit");
data.data = (char*)"apple";
data.size = sizeof("apple");
if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) == 0)
cout << "db: " << (char*)key.data << ": key stored.\n";
else
{
dbp->err(dbp, ret, "DB->put");
goto err;
}
if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0)
cout << "db: " << (char*)key.data
<< ": key retrieved: data was " << (char *)data.data << endl;
else
{
dbp->err(dbp, ret, "DB->get");
goto err;
}
if ((ret = dbp->del(dbp, NULL, &key, 0)) == 0)
cout << "db: " << (char*)key.data << " key was deleted.\n";
else
{
dbp->err(dbp, ret, "DB->del");
goto err;
}
if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0)
cout << "db: " << (char*)key.data << ": key retrieved: data was "
<< (char *)data.data << endl;
else
dbp->err(dbp, ret, "DB->get");
err:
if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
ret = t_ret;
return ret;
}
示例2: getopt
//.........这里部分代码省略.........
return (usage());
/* Usage. */
#if DB_VERSION_MAJOR > 5 || (DB_VERSION_MAJOR == 5 && DB_VERSION_MINOR >= 2)
if (duplicate &&
(type == DB_QUEUE || type == DB_RECNO || type == DB_HEAP)) {
fprintf(stderr,
"b_load: Queue, Recno and Heap don't support duplicates\n");
return (usage());
}
#else
if (duplicate && (type == DB_QUEUE || type == DB_RECNO)) {
fprintf(stderr,
"b_load: Queue an Recno don't support duplicates\n");
return (usage());
}
#endif
#if DB_VERSION_MAJOR < 3 || DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR < 1
/*
* DB versions prior to 3.1.17 didn't have off-page duplicates, so
* this test can run forever.
*/
if (duplicate)
return (0);
#endif
/* Create the database. */
DB_BENCH_ASSERT(db_create(&dbp, NULL, 0) == 0);
DB_BENCH_ASSERT(dbp->set_cachesize(dbp, 0, cachesize, 0) == 0);
if (duplicate)
DB_BENCH_ASSERT(dbp->set_flags(dbp, DB_DUP) == 0);
dbp->set_errfile(dbp, stderr);
/* Set record length for Queue. */
if (type == DB_QUEUE)
DB_BENCH_ASSERT(dbp->set_re_len(dbp, 20) == 0);
#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
DB_BENCH_ASSERT(
dbp->open(dbp, NULL, TESTFILE, NULL, type, DB_CREATE, 0666) == 0);
#else
DB_BENCH_ASSERT(
dbp->open(dbp, TESTFILE, NULL, type, DB_CREATE, 0666) == 0);
#endif
/* Initialize the data. */
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
/* Insert count in-order key/data pairs. */
TIMER_START;
if (duplicate) {
key.size = 10;
key.data = "01234567890123456789";
data.data = buf;
data.size = 20;
for (i = 0; i < count; ++i) {
(void)snprintf(buf, sizeof(buf), "%020d", i);
DB_BENCH_ASSERT(
dbp->put(dbp, NULL, &key, &data, 0) == 0);
}
} else {
data.data = buf;
data.size = 20;
if (type == DB_BTREE || type == DB_HASH) {
key.size = 10;
key.data = buf;
for (i = 0; i < count; ++i) {
(void)snprintf(buf, sizeof(buf), "%010d", i);
DB_BENCH_ASSERT(
dbp->put(dbp, NULL, &key, &data, 0) == 0);
}
#if DB_VERSION_MAJOR > 5 || (DB_VERSION_MAJOR == 5 && DB_VERSION_MINOR >= 2)
} else if (type == DB_HEAP) {
key.data = &rid;
key.size = sizeof(rid);
for (i = 0; i < count; ++i)
DB_BENCH_ASSERT(dbp->put(dbp,
NULL, &key, &data, DB_APPEND) == 0);
#endif
} else {
key.data = &recno;
key.size = sizeof(recno);
for (i = 0, recno = 1; i < count; ++i, ++recno)
DB_BENCH_ASSERT(
dbp->put(dbp, NULL, &key, &data, 0) == 0);
}
}
TIMER_STOP;
printf("# %d %s database in-order put of 10/20 byte key/data %sitems\n",
count, ts, duplicate ? "duplicate " : "");
TIMER_DISPLAY(count);
DB_BENCH_ASSERT(dbp->close(dbp, 0) == 0);
return (0);
}
示例3: if
//.........这里部分代码省略.........
{
printf("Error trying to convert userinput in time-field 1\n");
}
else if(ODD(sts))
{
nrOfEvents++;
evDeq.push_front((sEvent)*eventp);
}
}
while((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0)
{
eventp = (sEvent *)data.data;
sts = check_conditions(eventp, &query);
if(sts == ERROR_TIME_CONVERT)
{
printf("Error trying to convert userinput in time-field\n");
}
else if(ODD(sts))
{
nrOfEvents++;
evDeq.push_front(*eventp);
}
}
if(ret != DB_NOTFOUND)
{
printf("error dbcp->c_get: %s\n", db_strerror(ret));
printf("Fel vid försök att läsa post nr %u, avslutar\n", nrOfEvents);
}
/*Close the cursor*/
if((ret = dbcp->c_close(dbcp)) != 0)
{
printf("Error dbcp->c_close(): %s\n", db_strerror(ret));
}
/*close the database*/
if((ret = dataBaseP->close(dataBaseP,0) != 0))
{
printf("error db_close: %s\n", db_strerror(ret));
}
//create a new MhrEvent[]
jobjectArr = (jobjectArray)env->NewObjectArray(nrOfEvents, mhrEventArrCls, NULL);
// printf("nrOfEvents: %d\n", nrOfEvents);
sEvent ev;
//put the result in an objectarray of MhrEvent
for(i=0;i<nrOfEvents;i++)
{
ev = evDeq.front();
switch (ev.EventType) {
case mh_eEvent_Alarm:
case mh_eEvent_MaintenanceAlarm:
case mh_eEvent_SystemAlarm:
case mh_eEvent_UserAlarm1:
case mh_eEvent_UserAlarm2:
case mh_eEvent_UserAlarm3:
case mh_eEvent_UserAlarm4:
case mh_eEvent_Info:
case mh_eEvent_InfoSuccess:
env->SetObjectArrayElement(jobjectArr, i, convertAlarmOrInfoToMhrEvent( (mh_sMessage *)(&(ev.Mess) ) ) );
示例4: getopt
int
b_open(int argc, char *argv[])
{
extern char *optarg;
extern int optind, __db_getopt_reset;
DB_ENV *dbenv;
DB *dbp;
DBTYPE type;
int ch, i, count;
char *fname, *dbname, *ts;
type = DB_BTREE;
count = 1000;
fname = dbname = NULL;
ts = "Btree";
__db_getopt_reset = 1;
while ((ch = getopt(argc, argv, "c:dft:")) != EOF)
switch (ch) {
case 'c':
count = atoi(optarg);
break;
case 'd':
dbname = "dbname";
break;
case 'f':
fname = "filename";
break;
case 't':
switch (optarg[0]) {
case 'B': case 'b':
ts = "Btree";
type = DB_BTREE;
break;
case 'H': case 'h':
if (b_util_have_hash())
return (0);
ts = "Hash";
type = DB_HASH;
break;
case 'Q': case 'q':
if (b_util_have_queue())
return (0);
ts = "Queue";
type = DB_QUEUE;
break;
case 'R': case 'r':
ts = "Recno";
type = DB_RECNO;
break;
default:
return (b_open_usage());
}
break;
case '?':
default:
return (b_open_usage());
}
argc -= optind;
argv += optind;
if (argc != 0)
return (b_open_usage());
#if DB_VERSION_MAJOR < 4
/*
* Don't run in-memory database tests on versions less than 3, it
* takes forever and eats memory.
*/
if (fname == NULL && dbname == NULL)
return (0);
#endif
#if DB_VERSION_MAJOR < 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 4
/*
* Named in-memory databases weren't available until 4.4.
*/
if (fname == NULL && dbname != NULL)
return (0);
#endif
/* Create the environment. */
DB_BENCH_ASSERT(db_env_create(&dbenv, 0) == 0);
dbenv->set_errfile(dbenv, stderr);
#if DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR == 0
DB_BENCH_ASSERT(dbenv->open(dbenv, TESTDIR,
NULL, DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE, 0666) == 0);
#else
DB_BENCH_ASSERT(dbenv->open(dbenv, TESTDIR,
DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE, 0666) == 0);
#endif
/* Create the database. */
DB_BENCH_ASSERT(db_create(&dbp, dbenv, 0) == 0);
#if DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 1
DB_BENCH_ASSERT(dbp->open(
dbp, NULL, fname, dbname, type, DB_CREATE, 0666) == 0);
#else
DB_BENCH_ASSERT(dbp->open(
dbp, fname, dbname, type, DB_CREATE, 0666) == 0);
#endif
DB_BENCH_ASSERT(dbp->close(dbp, 0) == 0);
//.........这里部分代码省略.........
示例5: memset
int
doloop(DB_ENV *dbenv)
{
DB *dbp;
APP_DATA *app_data;
DBT key, data;
char buf[BUFSIZE], *rbuf;
int ret;
u_int32_t flags;
dbp = NULL;
ret = 0;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
app_data = dbenv->app_private;
for (;;) {
if (dbp == NULL) {
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
return (ret);
flags = DB_AUTO_COMMIT;
if (app_data->is_master)
flags |= DB_CREATE;
if ((ret = dbp->open(dbp,
NULL, DATABASE, NULL, DB_BTREE, flags, 0)) != 0) {
if (ret == ENOENT) {
printf(
"No stock database yet available.\n");
if ((ret = dbp->close(dbp, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->close");
goto err;
}
dbp = NULL;
sleep(SLEEPTIME);
continue;
}
dbenv->err(dbenv, ret, "DB->open");
goto err;
}
}
printf("QUOTESERVER%s> ",
app_data->is_master ? "" : " (read-only)");
fflush(stdout);
if (fgets(buf, sizeof(buf), stdin) == NULL)
break;
if (strtok(&buf[0], " \t\n") == NULL) {
switch ((ret = print_stocks(dbp))) {
case 0:
continue;
case DB_REP_HANDLE_DEAD:
(void)dbp->close(dbp, DB_NOSYNC);
dbp = NULL;
dbenv->errx(dbenv, "Got a dead replication handle");
continue;
default:
dbp->err(dbp, ret, "Error traversing data");
goto err;
}
}
rbuf = strtok(NULL, " \t\n");
if (rbuf == NULL || rbuf[0] == '\0') {
if (strncmp(buf, "exit", 4) == 0 ||
strncmp(buf, "quit", 4) == 0)
break;
dbenv->errx(dbenv, "Format: TICKER VALUE");
continue;
}
if (!app_data->is_master) {
dbenv->errx(dbenv, "Can't update at client");
continue;
}
key.data = buf;
key.size = (u_int32_t)strlen(buf);
data.data = rbuf;
data.size = (u_int32_t)strlen(rbuf);
if ((ret = dbp->put(dbp,
NULL, &key, &data, 0)) != 0) {
dbp->err(dbp, ret, "DB->put");
goto err;
}
}
err: if (dbp != NULL)
(void)dbp->close(dbp, DB_NOSYNC);
return (ret);
}
示例6: bdblib_create_table
//.........这里部分代码省略.........
}
tp->name.s = (char*)pkg_malloc(_s->len*sizeof(char));
memcpy(tp->name.s, _s->s, _s->len);
tp->name.len = _s->len;
tp->db=bdb;
tp->ncols=0;
tp->nkeys=0;
tp->ro=0; /*0=ReadWrite ; 1=ReadOnly*/
tp->ino=0; /*inode*/
tp->logflags=0; /*bitmap; 4=Delete, 2=Update, 1=Insert, 0=None*/
tp->fp=0;
tp->t=0;
for(i=0;i<MAX_NUM_COLS;i++)
tp->colp[i] = NULL;
/*load metadata; seeded\db_loaded when database are created*/
/*initialize columns with metadata*/
rc = load_metadata_columns(tp);
if(rc!=0)
{
ERR("FAILED to load METADATA COLS in table: %s.\n", tblname);
goto error;
}
/*initialize columns default values from metadata*/
rc = load_metadata_defaults(tp);
if(rc!=0)
{
ERR("FAILED to load METADATA DEFAULTS in table: %s.\n", tblname);
goto error;
}
rc = load_metadata_keys(tp);
if(rc!=0)
{
ERR("FAILED to load METADATA KEYS in table: %s.\n", tblname);
/*will have problems later figuring column types*/
goto error;
}
/*opened RW by default; Query to set the RO flag */
rc = load_metadata_readonly(tp);
if(rc!=0)
{
INFO("No METADATA_READONLY in table: %s.\n", tblname);
/*non-critical; table will default to READWRITE*/
}
if(tp->ro)
{
/*schema defines this table RO readonly*/
if ((rc = bdb->close(bdb,0)) != 0)
{
_db->dbenv->err(_db->dbenv, rc, "DB->close: %s", tblname);
ERR("bdb close: %s.\n",db_strerror(rc));
goto error;
}
bdb = NULL;
if ((rc = db_create(&bdb, _db->dbenv, 0)) != 0)
{
_db->dbenv->err(_db->dbenv, rc, "database create");
ERR("error in db_create.\n");
goto error;
}
flags = DB_THREAD | DB_RDONLY;
if ((rc = bdb->open(bdb, NULL, tblname, NULL, DB_HASH, flags, 0664)) != 0)
{
_db->dbenv->err(_db->dbenv, rc, "DB->open: %s", tblname);
ERR("bdb open: %s.\n",db_strerror(rc));
goto error;
}
tp->db=bdb;
}
/* set the journaling flags; flags indicate which operations
need to be journalled. (e.g possible to only journal INSERT.)
*/
rc = load_metadata_logflags(tp);
if(rc!=0)
INFO("No METADATA_LOGFLAGS in table: %s.\n", tblname);
if ((tp->logflags & JLOG_FILE) == JLOG_FILE)
bdblib_create_journal(_db, tp);
return tp;
error:
if(tp)
{
pkg_free(tp->name.s);
pkg_free(tp);
}
return NULL;
}
示例7: while
int
main(int argc, char *argv[])
{
/* Initialize our handles */
DB *dbp = NULL;
DB_ENV *envp = NULL;
thread_t writer_threads[NUMWRITERS];
int ch, i, ret, ret_t;
u_int32_t env_flags;
char *db_home_dir;
/* Application name */
const char *prog_name = "txn_guide";
/* Database file name */
const char *file_name = "mydb.db";
/* Parse the command line arguments */
#ifdef _WIN32
db_home_dir = ".\\";
#else
db_home_dir = "./";
#endif
while ((ch = getopt(argc, argv, "h:")) != EOF)
switch (ch) {
case 'h':
db_home_dir = optarg;
break;
case '?':
default:
return (usage());
}
/* Create the environment */
ret = db_env_create(&envp, 0);
if (ret != 0) {
fprintf(stderr, "Error creating environment handle: %s\n",
db_strerror(ret));
goto err;
}
/*
* Indicate that we want db to perform lock detection internally.
* Also indicate that the transaction with the fewest number of
* write locks will receive the deadlock notification in
* the event of a deadlock.
*/
ret = envp->set_lk_detect(envp, DB_LOCK_MINWRITE);
if (ret != 0) {
fprintf(stderr, "Error setting lock detect: %s\n",
db_strerror(ret));
goto err;
}
env_flags =
DB_CREATE | /* Create the environment if it does not exist */
DB_RECOVER | /* Run normal recovery. */
DB_INIT_LOCK | /* Initialize the locking subsystem */
DB_INIT_LOG | /* Initialize the logging subsystem */
DB_INIT_TXN | /* Initialize the transactional subsystem. This
* also turns on logging. */
DB_INIT_MPOOL | /* Initialize the memory pool (in-memory cache) */
DB_THREAD; /* Cause the environment to be free-threaded */
/* Now actually open the environment */
ret = envp->open(envp, db_home_dir, env_flags, 0);
if (ret != 0) {
fprintf(stderr, "Error opening environment: %s\n",
db_strerror(ret));
goto err;
}
/*
* If we had utility threads (for running checkpoints or
* deadlock detection, for example) we would spawn those
* here. However, for a simple example such as this,
* that is not required.
*/
/* Open the database */
ret = open_db(&dbp, prog_name, file_name,
envp, DB_DUPSORT);
if (ret != 0)
goto err;
/* Initialize a mutex. Used to help provide thread ids. */
(void)mutex_init(&thread_num_lock, NULL);
/* Start the writer threads. */
for (i = 0; i < NUMWRITERS; i++)
(void)thread_create(
&writer_threads[i], NULL, writer_thread, (void *)dbp);
/* Join the writers */
for (i = 0; i < NUMWRITERS; i++)
(void)thread_join(writer_threads[i], NULL);
err:
/* Close our database handle, if it was opened. */
if (dbp != NULL) {
ret_t = dbp->close(dbp, 0);
//.........这里部分代码省略.........
示例8: memset
int
doloop(DB_ENV *dbenv)
{
DB *dbp;
DBT key, data;
char buf[BUFSIZE], *rbuf;
int ret;
u_int32_t db_flags;
dbp = NULL;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
ret = 0;
for (;;) {
if (dbp == NULL) {
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
return (ret);
db_flags = DB_AUTO_COMMIT | DB_CREATE;
if ((ret = dbp->open(dbp,
NULL, DATABASE, NULL, DB_BTREE, db_flags, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->open");
goto err;
}
}
printf("QUOTESERVER> ");
fflush(stdout);
if (fgets(buf, sizeof(buf), stdin) == NULL)
break;
if (strtok(&buf[0], " \t\n") == NULL) {
switch ((ret = print_stocks(dbp))) {
case 0:
continue;
default:
dbp->err(dbp, ret, "Error traversing data");
goto err;
}
}
rbuf = strtok(NULL, " \t\n");
if (rbuf == NULL || rbuf[0] == '\0') {
if (strncmp(buf, "exit", 4) == 0 ||
strncmp(buf, "quit", 4) == 0)
break;
dbenv->errx(dbenv, "Format: TICKER VALUE");
continue;
}
key.data = buf;
key.size = (u_int32_t)strlen(buf);
data.data = rbuf;
data.size = (u_int32_t)strlen(rbuf);
if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) != 0)
{
dbp->err(dbp, ret, "DB->put");
if (ret != DB_KEYEXIST)
goto err;
}
}
err: if (dbp != NULL)
(void)dbp->close(dbp, DB_NOSYNC);
return (ret);
}
示例9: backupCleanup
/* Close or free all handles and commit or rollback the transaction. */
static int backupCleanup(sqlite3_backup *p)
{
int rc, rc2, ret;
void *app;
DB *db;
rc = rc2 = SQLITE_OK;
if (!p || p->rc == SQLITE_OK)
return rc;
rc2 = sqlite3BtreeCloseCursor(&p->destCur);
if (rc2 != SQLITE_OK)
rc = rc2;
if (p->srcCur) {
db = p->srcCur->dbp;
app = db->app_private;
if ((ret = p->srcCur->close(p->srcCur)) == 0)
ret = db->close(db, DB_NOSYNC);
rc2 = dberr2sqlite(ret);
/*
* The KeyInfo was allocated in btreeSetupIndex,
* so have to deallocate it here.
*/
if (app)
sqlite3DbFree(p->pSrcDb, app);
}
if (rc2 != SQLITE_OK)
rc = rc2;
p->srcCur = 0;
/*
* May retry on a locked or busy error, so keep
* these values.
*/
if (p->rc != SQLITE_LOCKED && p->rc != SQLITE_BUSY) {
if (p->srcName)
sqlite3_free(p->srcName);
if (p->destName != 0)
sqlite3_free(p->destName);
p->srcName = p->destName = NULL;
}
if (p->tables != 0)
sqlite3_free(p->tables);
p->tables = NULL;
if (p->pSrc->nBackup)
p->pSrc->nBackup--;
if (p->pDest != NULL && p->pDest->nBackup)
p->pDest->nBackup--;
if (p->srcTxn) {
if (p->rc == SQLITE_DONE)
ret = p->srcTxn->commit(p->srcTxn, 0);
else
ret = p->srcTxn->abort(p->srcTxn);
rc2 = dberr2sqlite(ret);
}
p->srcTxn = 0;
if (rc2 != SQLITE_OK && sqlite3BtreeIsInTrans(p->pDest)) {
rc = rc2;
if (p->rc == SQLITE_DONE)
rc2 = sqlite3BtreeCommit(p->pDest);
else
rc2 = sqlite3BtreeRollback(p->pDest);
if (rc2 != SQLITE_OK)
rc = rc2;
}
if (p->pDest && p->openDest) {
char path[512];
/*
* If successfully done then delete the old backup, if
* an error then delete the current database and restore
* the old backup.
*/
sqlite3_snprintf(sizeof(path), path,
"%s%s", p->fullName, BACKUP_SUFFIX);
if (p->rc == SQLITE_DONE) {
rc2 = btreeDeleteEnvironment(p->pDest, path, 0);
} else {
rc2 = btreeDeleteEnvironment(p->pDest, p->fullName, 0);
if (!__os_exists(NULL, path, 0))
__os_rename(NULL, path, p->fullName, 0);
}
if (rc == SQLITE_OK)
rc = rc2;
if (rc == SQLITE_OK) {
p->pDest = NULL;
p->pDestDb->aDb[p->iDb].pBt = NULL;
p->openDest = 0;
rc = sqlite3BtreeOpen(p->fullName, p->pDestDb,
&p->pDest,
SQLITE_DEFAULT_CACHE_SIZE | SQLITE_OPEN_MAIN_DB,
p->pDestDb->openFlags);
p->pDestDb->aDb[p->iDb].pBt = p->pDest;
if (rc == SQLITE_OK) {
p->pDestDb->aDb[p->iDb].pSchema =
//.........这里部分代码省略.........
示例10: remove_collection_entry
static int remove_collection_entry(char* storage_space, char* collname)
{
char collections_db[PATH_MAX];
DB * dbp;
DBT key, data;
int ret = 0;
TROVE_coll_id coll_id;
sprintf(collections_db, "%s/collections.db", storage_space);
ret = access(collections_db, F_OK);
if(ret == -1 && errno == ENOENT)
{
fprintf(stderr, "Error: could not find %s.\n", collections_db);
fprintf(stderr, "Error: src directory is not a known format.\n");
return ret;
}
else if(ret == -1)
{
fprintf(stderr, "access(%s): %s\n", collections_db, strerror(errno));
return -1;
}
ret = db_create(&dbp, NULL, 0);
if(ret != 0)
{
fprintf(stderr, "Error: db_create: %s.\n", db_strerror(ret));
return -1;
}
ret = dbp->open(dbp,
#ifdef HAVE_TXNID_PARAMETER_TO_DB_OPEN
NULL,
#endif
collections_db,
NULL,
DB_UNKNOWN,
0,
0);
if(ret != 0)
{
fprintf(stderr, "Error: dbp->open: %s.\n", db_strerror(ret));
return(-1);
}
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = collname;
key.size = strlen(collname) + 1;
data.data = &coll_id;
data.ulen = sizeof(coll_id);
data.flags = DB_DBT_USERMEM;
ret = dbp->get(dbp, NULL, &key, &data, 0);
if (ret != 0)
{
fprintf(stderr, "Error: dbp->get: %s\n", db_strerror(ret));
return -1;
}
ret = dbp->del(dbp, NULL, &key, 0);
if (ret != 0)
{
fprintf(stderr, "Error: dbp->del: %s\n", db_strerror(ret));
return -1;
}
ret = dbp->sync(dbp, 0);
if (ret != 0)
{
fprintf(stderr, "Error: dbp->sync: %s\n", db_strerror(ret));
return -1;
}
dbp->close(dbp, 0);
return 0;
}
示例11: sprintf
/**
* Migrates collection xattrs from a 0.0.1 DBPF collection
* \return 0 on succes, -1 on failure
*/
static int translate_coll_eattr_0_0_1(
char* old_coll_path, /**< path to old trove collection */
TROVE_coll_id coll_id, /**< collection id in string format */
char* coll_name, /**< name of collection */
TROVE_context_id trove_context) /**< open trove context */
{
int ret = -1;
char coll_db[PATH_MAX];
DB *dbp;
DBT key, data;
DBC *dbc_p = NULL;
TROVE_keyval_s t_key;
TROVE_keyval_s t_val;
TROVE_op_id op_id;
int count = 0;
TROVE_ds_state state;
sprintf(coll_db, "%s/collection_attributes.db", old_coll_path);
ret = db_create(&dbp, NULL, 0);
if(ret != 0)
{
fprintf(stderr, "Error: db_create: %s.\n", db_strerror(ret));
return(-1);
}
/* open collection_attributes.db from old collection */
ret = dbp->open(dbp,
#ifdef HAVE_TXNID_PARAMETER_TO_DB_OPEN
NULL,
#endif
coll_db,
NULL,
DB_UNKNOWN,
0,
0);
if(ret != 0)
{
fprintf(stderr, "Error: dbp->open: %s.\n", db_strerror(ret));
return(-1);
}
ret = dbp->cursor(dbp, NULL, &dbc_p, 0);
if (ret != 0)
{
fprintf(stderr, "Error: dbp->cursor: %s.\n", db_strerror(ret));
dbp->close(dbp, 0);
return(-1);
}
memset(&key, 0, sizeof(key));
key.data = malloc(DEF_KEY_SIZE);
if(!key.data)
{
perror("malloc");
dbc_p->c_close(dbc_p);
dbp->close(dbp, 0);
return(-1);
}
key.size = key.ulen = DEF_KEY_SIZE;
key.flags |= DB_DBT_USERMEM;
memset(&data, 0, sizeof(data));
data.data = malloc(DEF_DATA_SIZE);
if(!data.data)
{
perror("malloc");
free(key.data);
dbc_p->c_close(dbc_p);
dbp->close(dbp, 0);
return(-1);
}
data.size = data.ulen = DEF_DATA_SIZE;
data.flags |= DB_DBT_USERMEM;
do
{
/* iterate through eattr's on the old collection */
ret = dbc_p->c_get(dbc_p, &key, &data, DB_NEXT);
if (ret != DB_NOTFOUND && ret != 0)
{
fprintf(stderr, "Error: dbc_p->c_get: %s.\n", db_strerror(ret));
free(data.data);
free(key.data);
dbc_p->c_close(dbc_p);
dbp->close(dbp, 0);
return(-1);
}
/* skip the version attribute- we don't want to copy that one */
if(ret == 0 && strncmp(key.data, "trove-dbpf-version",
strlen("trove-dbpf-version")) != 0)
{
if(verbose) printf("VERBOSE Migrating collection eattr: %s\n", (char*)key.data);
memset(&t_key, 0, sizeof(t_key));
memset(&t_val, 0, sizeof(t_val));
t_key.buffer = key.data;
//.........这里部分代码省略.........
示例12: if
/**
* Reads the version number from a 0.0.1 DBPF collection
* \return 0 on succes, -1 on failure
*/
static int src_get_version_0_0_1(
char* storage_space, /**< path to storage space */
TROVE_coll_id coll_id, /**< collection id */
char* ver_string, /**< version in string format */
int ver_string_max) /**< maximum size of version string */
{
char coll_db[PATH_MAX];
int ret;
DB *dbp;
DBT key, data;
sprintf(coll_db, "%s/%08x/collection_attributes.db",
storage_space, coll_id);
/* try to find a collections db */
ret = access(coll_db, F_OK);
if(ret == -1 && errno == ENOENT)
{
fprintf(stderr, "Error: could not find %s.\n", coll_db);
fprintf(stderr, "Error: src directory is not a known format.\n");
return(-1);
}
else if(ret == -1)
{
fprintf(stderr, "access(%s): %s\n", coll_db, strerror(errno));
return(-1);
}
ret = db_create(&dbp, NULL, 0);
if(ret != 0)
{
fprintf(stderr, "Error: db_create: %s.\n", db_strerror(ret));
return(-1);
}
ret = dbp->open(dbp,
#ifdef HAVE_TXNID_PARAMETER_TO_DB_OPEN
NULL,
#endif
coll_db,
NULL,
DB_UNKNOWN,
0,
0);
if(ret != 0)
{
fprintf(stderr, "Error: dbp->open: %s.\n", db_strerror(ret));
return(-1);
}
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "trove-dbpf-version";
key.size = strlen("trove-dbpf-version");
data.data = ver_string;
data.size = data.ulen = ver_string_max;
data.flags |= DB_DBT_USERMEM;
ret = dbp->get(dbp, NULL, &key, &data, 0);
if(ret != 0)
{
fprintf(stderr, "Error: dbp->get: %s\n", db_strerror(ret));
return(-1);
}
dbp->close(dbp, 0);
return(0);
}
示例13: getopt
//.........这里部分代码省略.........
"b_curwalk: Queue and Recno don't support duplicates\n");
return (b_curwalk_usage());
}
#if DB_VERSION_MAJOR < 3 || DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR == 0
#define DB_PREV_NODUP 0
/*
* DB_PREV_NODUP wasn't available until after 3.0.55.
*
* For some reason, testing sorted duplicates doesn't work either.
* I don't really care about 3.0.55 any more, just ignore it.
*/
return (0);
#endif
/* Create the database. */
DB_BENCH_ASSERT(db_create(&dbp, NULL, 0) == 0);
DB_BENCH_ASSERT(dbp->set_cachesize(dbp, 0, cachesize, 0) == 0);
DB_BENCH_ASSERT(dbp->set_pagesize(dbp, pagesize) == 0);
dbp->set_errfile(dbp, stderr);
/* Set record length for Queue. */
if (type == DB_QUEUE)
DB_BENCH_ASSERT(dbp->set_re_len(dbp, 20) == 0);
/* Set duplicates flag. */
if (dupcount != 0)
DB_BENCH_ASSERT(
dbp->set_flags(dbp, sorted ? DB_DUPSORT : DB_DUP) == 0);
#if DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 1
DB_BENCH_ASSERT(dbp->open(
dbp, NULL, TESTFILE, NULL, type, DB_CREATE, 0666) == 0);
#else
DB_BENCH_ASSERT(dbp->open(
dbp, TESTFILE, NULL, type, DB_CREATE, 0666) == 0);
#endif
/* Initialize the data. */
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
/* Insert count in-order key/data pairs. */
data.data = dbuf;
data.size = 20;
if (type == DB_BTREE || type == DB_HASH) {
key.size = 10;
key.data = kbuf;
for (i = 0; i < count; ++i) {
(void)snprintf(kbuf, sizeof(kbuf), "%010d", i);
for (j = 0; j <= dupcount; ++j) {
(void)snprintf(dbuf, sizeof(dbuf), "%020d", j);
DB_BENCH_ASSERT(
dbp->put(dbp, NULL, &key, &data, 0) == 0);
}
}
} else {
key.data = &recno;
key.size = sizeof(recno);
for (i = 0, recno = 1; i < count; ++i, ++recno)
DB_BENCH_ASSERT(
dbp->put(dbp, NULL, &key, &data, 0) == 0);
}
walkflags = prev ?
(skipdupwalk ? DB_PREV_NODUP : DB_PREV) :
(skipdupwalk ? DB_NEXT_NODUP : DB_NEXT);
/* Walk the cursor through the tree N times. */
TIMER_START;
for (i = 0; i < walkcount; ++i) {
DB_BENCH_ASSERT(dbp->cursor(dbp, NULL, &dbc, 0) == 0);
while ((ret = dbc->c_get(dbc, &key, &data, walkflags)) == 0)
;
DB_BENCH_ASSERT(ret == DB_NOTFOUND);
DB_BENCH_ASSERT(dbc->c_close(dbc) == 0);
}
TIMER_STOP;
printf("# %d %s %s cursor of %d 10/20 byte key/data items",
walkcount, ts, prev ?
(skipdupwalk ? "DB_PREV_NODUP" : "DB_PREV") :
(skipdupwalk ? "DB_NEXT_NODUP" : "DB_NEXT"),
count);
if (dupcount != 0)
printf(" with %d dups", dupcount);
printf("\n");
/*
* An "operation" is traversal of a single key/data pair -- not a
* return of the key/data pair, since some versions of this test
* skip duplicate key/data pairs.
*
* Use a "double" so we don't overflow.
*/
TIMER_DISPLAY((double)count * walkcount);
DB_BENCH_ASSERT(dbp->close(dbp, 0) == 0);
return (EXIT_SUCCESS);
}
示例14: btreeCopyPages
/*
* Use Bulk Get/Put to copy the given number of pages worth of
* records from the source database to the destination database,
* this function should be called until all tables are copied, at
* which point it will return SQLITE_DONE. Both Btrees need to
* have transactions before calling this function.
* p->pSrc - Source Btree
* p->tables - Contains a list of iTables to copy, gotten using
* btreeGetTables().
* p->currentTable - Index in tables of the current table being copied.
* p->srcCur - Cursor on the current source table being copied.
* p->pDest - Destiniation Btree.
* p->destCur - BtCursor on the destination table being copied into.
* pages - Number of pages worth of data to copy.
*/
static int btreeCopyPages(sqlite3_backup *p, int *pages)
{
DB *dbp;
DBT dataOut, dataIn;
char bufOut[MULTI_BUFSIZE], bufIn[MULTI_BUFSIZE];
int ret, rc, copied, srcIsDupIndex;
void *in, *out, *app;
ret = 0;
rc = SQLITE_OK;
dbp = NULL;
copied = 0;
memset(&dataOut, 0, sizeof(dataOut));
memset(&dataIn, 0, sizeof(dataIn));
dataOut.flags = DB_DBT_USERMEM;
dataIn.flags = DB_DBT_USERMEM;
dataOut.data = bufOut;
dataOut.ulen = sizeof(bufOut);
dataIn.data = bufIn;
dataIn.ulen = sizeof(bufIn);
while (*pages < 0 || *pages > copied) {
/* No tables left to copy */
if (p->tables[p->currentTable] == -1) {
u32 val;
/*
* Update the schema file format and largest rootpage
* in the meta data. Other meta data values should
* not be changed.
*/
sqlite3BtreeGetMeta(p->pSrc, 1, &val);
if (p->pSrc->db->errCode == SQLITE_BUSY) {
rc = SQLITE_BUSY;
goto err;
}
rc = sqlite3BtreeUpdateMeta(p->pDest, 1, val);
if (rc != SQLITE_OK)
goto err;
sqlite3BtreeGetMeta(p->pSrc, 3, &val);
if (p->pSrc->db->errCode == SQLITE_BUSY) {
rc = SQLITE_BUSY;
goto err;
}
rc = sqlite3BtreeUpdateMeta(p->pDest, 3, val);
if (rc != SQLITE_OK)
goto err;
ret = SQLITE_DONE;
goto err;
}
/* If not currently copying a table, get the next table. */
if (!p->srcCur) {
rc = btreeGetUserTable(p->pSrc, p->srcTxn, &dbp,
p->tables[p->currentTable]);
if (rc != SQLITE_OK)
goto err;
assert(dbp);
memset(&p->destCur, 0, sizeof(p->destCur));
/*
* Open a cursor on the destination table, this will
* create the table and allow the Btree to manage the
* DB object.
*/
sqlite3BtreeCursor(p->pDest, p->tables[p->currentTable],
1, dbp->app_private, &p->destCur);
if ((rc = p->destCur.error) != SQLITE_OK) {
app = dbp->app_private;
dbp->close(dbp, DB_NOSYNC);
if (app)
sqlite3DbFree(p->pSrcDb, app);
goto err;
}
/* Open a cursor on the source table. */
if ((ret = dbp->cursor(dbp,
p->srcTxn, &p->srcCur, 0)) != 0)
goto err;
dbp = 0;
}
srcIsDupIndex = isDupIndex((p->tables[p->currentTable] & 1) ?
BTREE_INTKEY : 0, p->pSrc->pBt->dbStorage,
p->srcCur->dbp->app_private, p->srcCur->dbp);
/*
* Copy the current table until the given number of
* pages is copied, or the entire table has been copied.
*/
while (*pages < 0 || *pages > copied) {
//.........这里部分代码省略.........
示例15: hash
/**1 output_file = new file()
2 dict = new hash()
3 while (free memory available)
4 do token = next_token()
5 if token not in dict
6 postinglist = addtodict(dict, token)
7 else postinglist = getpostinglist(dict, token)
8 if full(postinglist)
9 postinglist = doublepostinglist(dict, token)
10 addtopostinglist(postinglist, docid(token))
11 sorted_terms = sortterm(dict) // for merge purpose
*12 writeblock(sorted_terms, dict, output_file)
*/
int
build_board_index(char *bname)
{
char *word;
char dirfile[PATH_MAX], docid2path[PATH_MAX], indexfile[PATH_MAX];
char filepath[PATH_MAX]; /* article file path */
char filename[20];
char cachedir[PATH_MAX];
char cachefile[PATH_MAX];
char ndocsfile[PATH_MAX];
DB *dbp;
DBT key, data;
int ret;
int result = -1;
FILE *filelist, *fp;
struct postinglist *p;
unsigned int docid = 1;
gzFile cachefp;
int gzerr;
setboardfile(dirfile, bname, bname);
set_brddocid2path_file(docid2path, bname);
set_brdindex_file(indexfile, bname);
/* Initialize the DB structure.*/
ret = db_create(&dbp, NULL, 0);
if (ret != 0) {
ERROR("create db hanldle failed");
goto RETURN;
}
if (dbopen(dbp, docid2path, 1) != 0) {
ERROR1("open db %s failed", docid2path);
goto RETURN;
}
if (!(filelist = fopen(dirfile, "r"))) {
ERROR1("open file %s failed", dirfile);
goto CLEAN_DB;
}
size_t size = 300000; /* TODO: define this constant */
struct dict_t **bucket = new_postinglist_bucket(size);
if (bucket == NULL) {
ERROR1("new_dict size=%u failed", size);
goto CLEAN_FP;
}
g_text = malloc(MAX_FILE_SIZE);
if (g_text == NULL) {
ERROR("malloc failed");
goto CLEAN_MEM;
}
/* Zero out the DBTs before using them. */
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
key.size = sizeof(unsigned int);
key.data = &docid;
/* ensure the cache directory exists */
setcachepath(cachedir, bname);
f_mkdir(cachedir, 0755);
while (fgets(filename, sizeof(filename), filelist)) {
filename[strlen(filename) - 1] = '\0';
data.size = strlen(filename) + 1;
data.data = filename;
setboardfile(filepath, bname, filename);
ansi_filter(filepath);
if (g_len != 0) {
fprintf(stderr, "%d indexing %s\n", docid, filename);
/* save to cache file */
setcachefile(cachefile, bname, filename);
cachefp = gzopen(cachefile, "wb");
if (cachefp != NULL) {
if (gzwrite(cachefp, g_text, g_len) != g_len)
ERROR(gzerror(cachefp, &gzerr));
gzclose(cachefp);
}
g_pos = 0;
//.........这里部分代码省略.........