mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-30 13:30:57 +08:00
Merge remote-tracking branch 'origin/mdb.RE/0.9'
This commit is contained in:
commit
14815f318b
@ -1021,14 +1021,16 @@ int mdb_txn_renew(MDB_txn *txn);
|
|||||||
* The database handle may be discarded by calling #mdb_dbi_close().
|
* The database handle may be discarded by calling #mdb_dbi_close().
|
||||||
* The old database handle is returned if the database was already open.
|
* The old database handle is returned if the database was already open.
|
||||||
* The handle may only be closed once.
|
* The handle may only be closed once.
|
||||||
|
*
|
||||||
* The database handle will be private to the current transaction until
|
* The database handle will be private to the current transaction until
|
||||||
* the transaction is successfully committed. If the transaction is
|
* the transaction is successfully committed. If the transaction is
|
||||||
* aborted the handle will be closed automatically.
|
* aborted the handle will be closed automatically.
|
||||||
* After a successful commit the
|
* After a successful commit the handle will reside in the shared
|
||||||
* handle will reside in the shared environment, and may be used
|
* environment, and may be used by other transactions.
|
||||||
* by other transactions. This function must not be called from
|
*
|
||||||
* multiple concurrent transactions in the same process. A transaction
|
* This function must not be called from multiple concurrent
|
||||||
* that uses this function must finish (either commit or abort) before
|
* transactions in the same process. A transaction that uses
|
||||||
|
* this function must finish (either commit or abort) before
|
||||||
* any other transaction in the process may use this function.
|
* any other transaction in the process may use this function.
|
||||||
*
|
*
|
||||||
* To use named databases (with name != NULL), #mdb_env_set_maxdbs()
|
* To use named databases (with name != NULL), #mdb_env_set_maxdbs()
|
||||||
@ -1450,7 +1452,7 @@ int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
|
|||||||
* <ul>
|
* <ul>
|
||||||
* <li>#MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize().
|
* <li>#MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize().
|
||||||
* <li>#MDB_TXN_FULL - the transaction has too many dirty pages.
|
* <li>#MDB_TXN_FULL - the transaction has too many dirty pages.
|
||||||
* <li>EACCES - an attempt was made to modify a read-only database.
|
* <li>EACCES - an attempt was made to write in a read-only transaction.
|
||||||
* <li>EINVAL - an invalid parameter was specified.
|
* <li>EINVAL - an invalid parameter was specified.
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
@ -1470,7 +1472,7 @@ int mdb_cursor_put(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
|
|||||||
* @return A non-zero error value on failure and 0 on success. Some possible
|
* @return A non-zero error value on failure and 0 on success. Some possible
|
||||||
* errors are:
|
* errors are:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>EACCES - an attempt was made to modify a read-only database.
|
* <li>EACCES - an attempt was made to write in a read-only transaction.
|
||||||
* <li>EINVAL - an invalid parameter was specified.
|
* <li>EINVAL - an invalid parameter was specified.
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
|
@ -2491,6 +2491,7 @@ mdb_txn_renew0(MDB_txn *txn)
|
|||||||
int rc, new_notls = 0;
|
int rc, new_notls = 0;
|
||||||
|
|
||||||
if (txn->mt_flags & MDB_TXN_RDONLY) {
|
if (txn->mt_flags & MDB_TXN_RDONLY) {
|
||||||
|
txn->mt_flags = MDB_TXN_RDONLY;
|
||||||
/* Setup db info */
|
/* Setup db info */
|
||||||
txn->mt_numdbs = env->me_numdbs;
|
txn->mt_numdbs = env->me_numdbs;
|
||||||
txn->mt_dbxs = env->me_dbxs; /* mostly static anyway */
|
txn->mt_dbxs = env->me_dbxs; /* mostly static anyway */
|
||||||
@ -7088,6 +7089,7 @@ mdb_cursor_init(MDB_cursor *mc, MDB_txn *txn, MDB_dbi dbi, MDB_xcursor *mx)
|
|||||||
mc->mc_snum = 0;
|
mc->mc_snum = 0;
|
||||||
mc->mc_top = 0;
|
mc->mc_top = 0;
|
||||||
mc->mc_pg[0] = 0;
|
mc->mc_pg[0] = 0;
|
||||||
|
mc->mc_ki[0] = 0;
|
||||||
mc->mc_flags = 0;
|
mc->mc_flags = 0;
|
||||||
if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) {
|
if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) {
|
||||||
mdb_tassert(txn, mx != NULL);
|
mdb_tassert(txn, mx != NULL);
|
||||||
|
@ -45,10 +45,12 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
E(mdb_env_create(&env));
|
E(mdb_env_create(&env));
|
||||||
|
E(mdb_env_set_maxreaders(env, 1));
|
||||||
E(mdb_env_set_mapsize(env, 10485760));
|
E(mdb_env_set_mapsize(env, 10485760));
|
||||||
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP /*|MDB_NOSYNC*/, 0664));
|
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP /*|MDB_NOSYNC*/, 0664));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 0, &txn));
|
E(mdb_txn_begin(env, NULL, 0, &txn));
|
||||||
E(mdb_open(txn, NULL, 0, &dbi));
|
E(mdb_dbi_open(txn, NULL, 0, &dbi));
|
||||||
|
|
||||||
key.mv_size = sizeof(int);
|
key.mv_size = sizeof(int);
|
||||||
key.mv_data = sval;
|
key.mv_data = sval;
|
||||||
@ -68,7 +70,7 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_txn_commit(txn));
|
E(mdb_txn_commit(txn));
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
@ -97,7 +99,7 @@ int main(int argc,char * argv[])
|
|||||||
printf("Deleted %d values\n", j);
|
printf("Deleted %d values\n", j);
|
||||||
|
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
printf("Cursor next\n");
|
printf("Cursor next\n");
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
@ -164,9 +166,9 @@ int main(int argc,char * argv[])
|
|||||||
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
||||||
}
|
}
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
mdb_close(env, dbi);
|
|
||||||
|
|
||||||
mdb_txn_abort(txn);
|
mdb_txn_abort(txn);
|
||||||
|
|
||||||
|
mdb_dbi_close(env, dbi);
|
||||||
mdb_env_close(env);
|
mdb_env_close(env);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -47,11 +47,13 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
E(mdb_env_create(&env));
|
E(mdb_env_create(&env));
|
||||||
|
E(mdb_env_set_maxreaders(env, 1));
|
||||||
E(mdb_env_set_mapsize(env, 10485760));
|
E(mdb_env_set_mapsize(env, 10485760));
|
||||||
E(mdb_env_set_maxdbs(env, 4));
|
E(mdb_env_set_maxdbs(env, 4));
|
||||||
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 0, &txn));
|
E(mdb_txn_begin(env, NULL, 0, &txn));
|
||||||
E(mdb_open(txn, "id1", MDB_CREATE, &dbi));
|
E(mdb_dbi_open(txn, "id1", MDB_CREATE, &dbi));
|
||||||
|
|
||||||
key.mv_size = sizeof(int);
|
key.mv_size = sizeof(int);
|
||||||
key.mv_data = sval;
|
key.mv_data = sval;
|
||||||
@ -68,7 +70,7 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_txn_commit(txn));
|
E(mdb_txn_commit(txn));
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
@ -97,7 +99,7 @@ int main(int argc,char * argv[])
|
|||||||
printf("Deleted %d values\n", j);
|
printf("Deleted %d values\n", j);
|
||||||
|
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
printf("Cursor next\n");
|
printf("Cursor next\n");
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
@ -114,10 +116,9 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
mdb_close(env, dbi);
|
|
||||||
|
|
||||||
mdb_txn_abort(txn);
|
mdb_txn_abort(txn);
|
||||||
mdb_env_close(env);
|
|
||||||
|
|
||||||
|
mdb_dbi_close(env, dbi);
|
||||||
|
mdb_env_close(env);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,9 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_env_set_mapsize(env, 10485760));
|
E(mdb_env_set_mapsize(env, 10485760));
|
||||||
E(mdb_env_set_maxdbs(env, 4));
|
E(mdb_env_set_maxdbs(env, 4));
|
||||||
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 0, &txn));
|
E(mdb_txn_begin(env, NULL, 0, &txn));
|
||||||
E(mdb_open(txn, "id2", MDB_CREATE|MDB_DUPSORT, &dbi));
|
E(mdb_dbi_open(txn, "id2", MDB_CREATE|MDB_DUPSORT, &dbi));
|
||||||
|
|
||||||
key.mv_size = sizeof(int);
|
key.mv_size = sizeof(int);
|
||||||
key.mv_data = kval;
|
key.mv_data = kval;
|
||||||
@ -73,7 +74,7 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_txn_commit(txn));
|
E(mdb_txn_commit(txn));
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
@ -107,7 +108,7 @@ int main(int argc,char * argv[])
|
|||||||
printf("Deleted %d values\n", j);
|
printf("Deleted %d values\n", j);
|
||||||
|
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
printf("Cursor next\n");
|
printf("Cursor next\n");
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
@ -124,10 +125,9 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
mdb_close(env, dbi);
|
|
||||||
|
|
||||||
mdb_txn_abort(txn);
|
mdb_txn_abort(txn);
|
||||||
mdb_env_close(env);
|
|
||||||
|
|
||||||
|
mdb_dbi_close(env, dbi);
|
||||||
|
mdb_env_close(env);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -51,8 +51,9 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_env_set_mapsize(env, 10485760));
|
E(mdb_env_set_mapsize(env, 10485760));
|
||||||
E(mdb_env_set_maxdbs(env, 4));
|
E(mdb_env_set_maxdbs(env, 4));
|
||||||
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 0, &txn));
|
E(mdb_txn_begin(env, NULL, 0, &txn));
|
||||||
E(mdb_open(txn, "id4", MDB_CREATE|MDB_DUPSORT|MDB_DUPFIXED, &dbi));
|
E(mdb_dbi_open(txn, "id4", MDB_CREATE|MDB_DUPSORT|MDB_DUPFIXED, &dbi));
|
||||||
|
|
||||||
key.mv_size = sizeof(int);
|
key.mv_size = sizeof(int);
|
||||||
key.mv_data = kval;
|
key.mv_data = kval;
|
||||||
@ -72,7 +73,7 @@ int main(int argc,char * argv[])
|
|||||||
|
|
||||||
/* there should be one full page of dups now.
|
/* there should be one full page of dups now.
|
||||||
*/
|
*/
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
@ -142,7 +143,7 @@ int main(int argc,char * argv[])
|
|||||||
printf("Deleted %d values\n", j);
|
printf("Deleted %d values\n", j);
|
||||||
|
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
printf("Cursor next\n");
|
printf("Cursor next\n");
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
@ -159,10 +160,9 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
mdb_close(env, dbi);
|
|
||||||
|
|
||||||
mdb_txn_abort(txn);
|
mdb_txn_abort(txn);
|
||||||
mdb_env_close(env);
|
|
||||||
|
|
||||||
|
mdb_dbi_close(env, dbi);
|
||||||
|
mdb_env_close(env);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,9 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_env_set_mapsize(env, 10485760));
|
E(mdb_env_set_mapsize(env, 10485760));
|
||||||
E(mdb_env_set_maxdbs(env, 4));
|
E(mdb_env_set_maxdbs(env, 4));
|
||||||
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 0, &txn));
|
E(mdb_txn_begin(env, NULL, 0, &txn));
|
||||||
E(mdb_open(txn, "id2", MDB_CREATE|MDB_DUPSORT, &dbi));
|
E(mdb_dbi_open(txn, "id2", MDB_CREATE|MDB_DUPSORT, &dbi));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
|
|
||||||
key.mv_size = sizeof(int);
|
key.mv_size = sizeof(int);
|
||||||
@ -75,7 +76,7 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_txn_commit(txn));
|
E(mdb_txn_commit(txn));
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
@ -109,7 +110,7 @@ int main(int argc,char * argv[])
|
|||||||
printf("Deleted %d values\n", j);
|
printf("Deleted %d values\n", j);
|
||||||
|
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
printf("Cursor next\n");
|
printf("Cursor next\n");
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
@ -126,10 +127,9 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
mdb_close(env, dbi);
|
|
||||||
|
|
||||||
mdb_txn_abort(txn);
|
mdb_txn_abort(txn);
|
||||||
mdb_env_close(env);
|
|
||||||
|
|
||||||
|
mdb_dbi_close(env, dbi);
|
||||||
|
mdb_env_close(env);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -46,8 +46,9 @@ int main(int argc,char * argv[])
|
|||||||
E(mdb_env_set_mapsize(env, 10485760));
|
E(mdb_env_set_mapsize(env, 10485760));
|
||||||
E(mdb_env_set_maxdbs(env, 4));
|
E(mdb_env_set_maxdbs(env, 4));
|
||||||
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
|
||||||
|
|
||||||
E(mdb_txn_begin(env, NULL, 0, &txn));
|
E(mdb_txn_begin(env, NULL, 0, &txn));
|
||||||
E(mdb_open(txn, "id6", MDB_CREATE|MDB_INTEGERKEY, &dbi));
|
E(mdb_dbi_open(txn, "id6", MDB_CREATE|MDB_INTEGERKEY, &dbi));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
E(mdb_stat(txn, dbi, &mst));
|
E(mdb_stat(txn, dbi, &mst));
|
||||||
|
|
||||||
@ -110,7 +111,7 @@ int main(int argc,char * argv[])
|
|||||||
printf("Deleted %d values\n", j);
|
printf("Deleted %d values\n", j);
|
||||||
|
|
||||||
E(mdb_env_stat(env, &mst));
|
E(mdb_env_stat(env, &mst));
|
||||||
E(mdb_txn_begin(env, NULL, 1, &txn));
|
E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
|
||||||
E(mdb_cursor_open(txn, dbi, &cursor));
|
E(mdb_cursor_open(txn, dbi, &cursor));
|
||||||
printf("Cursor next\n");
|
printf("Cursor next\n");
|
||||||
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
|
||||||
@ -127,9 +128,9 @@ int main(int argc,char * argv[])
|
|||||||
}
|
}
|
||||||
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
mdb_close(env, dbi);
|
|
||||||
|
|
||||||
mdb_txn_abort(txn);
|
mdb_txn_abort(txn);
|
||||||
|
|
||||||
|
mdb_dbi_close(env, dbi);
|
||||||
#endif
|
#endif
|
||||||
mdb_env_close(env);
|
mdb_env_close(env);
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ int main(int argc,char * argv[])
|
|||||||
rc = mdb_env_create(&env);
|
rc = mdb_env_create(&env);
|
||||||
rc = mdb_env_open(env, "./testdb", 0, 0664);
|
rc = mdb_env_open(env, "./testdb", 0, 0664);
|
||||||
rc = mdb_txn_begin(env, NULL, 0, &txn);
|
rc = mdb_txn_begin(env, NULL, 0, &txn);
|
||||||
rc = mdb_open(txn, NULL, 0, &dbi);
|
rc = mdb_dbi_open(txn, NULL, 0, &dbi);
|
||||||
|
|
||||||
key.mv_size = sizeof(int);
|
key.mv_size = sizeof(int);
|
||||||
key.mv_data = sval;
|
key.mv_data = sval;
|
||||||
@ -56,7 +56,7 @@ int main(int argc,char * argv[])
|
|||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
mdb_txn_abort(txn);
|
mdb_txn_abort(txn);
|
||||||
leave:
|
leave:
|
||||||
mdb_close(env, dbi);
|
mdb_dbi_close(env, dbi);
|
||||||
mdb_env_close(env);
|
mdb_env_close(env);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user