Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
HAMANO Tsukasa
OpenLDAP
Commits
85bfb3c1
Commit
85bfb3c1
authored
Oct 03, 2011
by
Howard Chu
Browse files
Add rudimentary MDB_MULTIPLE support for puts
Only for DUPFIXED DBs. Still could do better.
parent
fa3c2945
Changes
2
Hide whitespace changes
Inline
Side-by-side
libraries/libmdb/mdb.c
View file @
85bfb3c1
...
...
@@ -3875,6 +3875,7 @@ mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data,
MDB_page
*
fp
;
MDB_db
dummy
;
int
do_sub
=
0
;
unsigned
int
mcount
=
0
;
size_t
nsize
;
int
rc
,
rc2
;
char
pbuf
[
PAGESIZE
];
...
...
@@ -3950,6 +3951,7 @@ top:
/* DB has dups? */
if
(
F_ISSET
(
mc
->
mc_db
->
md_flags
,
MDB_DUPSORT
))
{
/* Was a single item before, must convert now */
more:
if
(
!
F_ISSET
(
leaf
->
mn_flags
,
F_DUPDATA
))
{
/* Just overwrite the current item */
if
(
flags
==
MDB_CURRENT
)
...
...
@@ -4158,6 +4160,14 @@ put_sub:
*/
if
(
!
rc
&&
!
(
flags
&
MDB_CURRENT
))
mc
->
mc_db
->
md_entries
++
;
if
(
flags
&
MDB_MULTIPLE
)
{
mcount
++
;
if
(
mcount
<
data
[
1
].
mv_size
)
{
data
[
0
].
mv_data
=
(
char
*
)
data
[
0
].
mv_data
+
data
[
0
].
mv_size
;
leaf
=
NODEPTR
(
mc
->
mc_pg
[
mc
->
mc_top
],
mc
->
mc_ki
[
mc
->
mc_top
]);
goto
more
;
}
}
}
done:
return
rc
;
...
...
@@ -5308,6 +5318,8 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
if
(
nflags
&
MDB_APPEND
)
{
mn
.
mc_ki
[
mn
.
mc_top
]
=
0
;
sepkey
=
*
newkey
;
nkeys
=
0
;
split_indx
=
0
;
goto
newsep
;
}
...
...
libraries/libmdb/mdb.h
View file @
85bfb3c1
...
...
@@ -195,6 +195,8 @@ typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *rel
#define MDB_RESERVE 0x10000
/** Data is being appended, don't split full pages. */
#define MDB_APPEND 0x20000
/** Store multiple data items in one call. */
#define MDB_MULTIPLE 0x40000
/* @} */
/** @brief Cursor Get operations.
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment