diff options
author | Keith Bostic <keith@wiredtiger.com> | 2014-08-10 12:33:13 -0400 |
---|---|---|
committer | Keith Bostic <keith@wiredtiger.com> | 2014-08-10 12:33:13 -0400 |
commit | 49b2995d3d368c867cf885155a1e182b0a604c1e (patch) | |
tree | db16aade9022db5060e02ff13a391dc77c2321c4 /src | |
parent | aec0ae8d6f4f3c8f5bfa3bbf45b8ef92206c612a (diff) | |
download | mongo-49b2995d3d368c867cf885155a1e182b0a604c1e.tar.gz |
Replace the collator comparison #defines with inline functions,
the #defines confuse zoom for some reason I can't figure out,
might as well be consistent.
Diffstat (limited to 'src')
-rw-r--r-- | src/btree/bt_cursor.c | 4 | ||||
-rw-r--r-- | src/btree/bt_slvg.c | 47 | ||||
-rw-r--r-- | src/btree/bt_vrfy.c | 7 | ||||
-rw-r--r-- | src/btree/bt_vrfy_dsk.c | 4 | ||||
-rw-r--r-- | src/btree/rec_split.c | 4 | ||||
-rw-r--r-- | src/btree/rec_write.c | 12 | ||||
-rw-r--r-- | src/btree/row_srch.c | 19 | ||||
-rw-r--r-- | src/conn/conn_api.c | 3 | ||||
-rw-r--r-- | src/cursor/cur_bulk.c | 4 | ||||
-rw-r--r-- | src/cursor/cur_ds.c | 3 | ||||
-rw-r--r-- | src/include/btree.i | 43 | ||||
-rw-r--r-- | src/lsm/lsm_cursor.c | 7 |
12 files changed, 95 insertions, 62 deletions
diff --git a/src/btree/bt_cursor.c b/src/btree/bt_cursor.c index 95e1b147da8..6acc6c09acd 100644 --- a/src/btree/bt_cursor.c +++ b/src/btree/bt_cursor.c @@ -779,8 +779,8 @@ __wt_btcur_compare(WT_CURSOR_BTREE *a_arg, WT_CURSOR_BTREE *b_arg, int *cmpp) *cmpp = 1; break; case BTREE_ROW: - WT_RET(WT_LEX_CMP( - session, btree->collator, &a->key, &b->key, *cmpp)); + WT_RET(__wt_lex_compare_collator( + session, btree->collator, &a->key, &b->key, cmpp)); break; WT_ILLEGAL_VALUE(session); } diff --git a/src/btree/bt_slvg.c b/src/btree/bt_slvg.c index 0fe020e783a..8e4525a4c17 100644 --- a/src/btree/bt_slvg.c +++ b/src/btree/bt_slvg.c @@ -1310,9 +1310,10 @@ __slvg_row_range(WT_SESSION_IMPL *session, WT_STUFF *ss) * We're done if this page starts after our stop, no * subsequent pages can overlap our page. */ - WT_RET(WT_LEX_CMP(session, btree->collator, + WT_RET(__wt_lex_compare_collator( + session, btree->collator, &ss->pages[j]->row_start, - &ss->pages[i]->row_stop, cmp)); + &ss->pages[i]->row_stop, &cmp)); if (cmp > 0) break; @@ -1402,8 +1403,8 @@ __slvg_row_range_overlap( #define __slvg_key_copy(session, dst, src) \ __wt_buf_set(session, dst, (src)->data, (src)->size) - WT_RET(WT_LEX_CMP( - session, btree->collator, A_TRK_START, B_TRK_START, cmp)); + WT_RET(__wt_lex_compare_collator( + session, btree->collator, A_TRK_START, B_TRK_START, &cmp)); if (cmp == 0) { /* Case #1, #4, #9 */ /* * The secondary sort of the leaf page array was the page's LSN, @@ -1413,8 +1414,8 @@ __slvg_row_range_overlap( * this simplifies things, it guarantees a_trk has a higher LSN * than b_trk. */ - WT_RET(WT_LEX_CMP( - session, btree->collator, A_TRK_STOP, B_TRK_STOP, cmp)); + WT_RET(__wt_lex_compare_collator( + session, btree->collator, A_TRK_STOP, B_TRK_STOP, &cmp)); if (cmp >= 0) /* * Case #1, #4: a_trk is a superset of b_trk, and a_trk @@ -1433,8 +1434,8 @@ __slvg_row_range_overlap( goto merge; } - WT_RET(WT_LEX_CMP( - session, btree->collator, A_TRK_STOP, B_TRK_STOP, cmp)); + WT_RET(__wt_lex_compare_collator( + session, btree->collator, A_TRK_STOP, B_TRK_STOP, &cmp)); if (cmp == 0) { /* Case #6 */ if (a_trk->gen > b_trk->gen) /* @@ -1452,8 +1453,8 @@ __slvg_row_range_overlap( goto merge; } - WT_RET(WT_LEX_CMP( - session, btree->collator, A_TRK_STOP, B_TRK_STOP, cmp)); + WT_RET(__wt_lex_compare_collator( + session, btree->collator, A_TRK_STOP, B_TRK_STOP, &cmp)); if (cmp < 0) { /* Case #3/7 */ if (a_trk->gen > b_trk->gen) { /* @@ -1599,7 +1600,8 @@ __slvg_row_trk_update_start( WT_ERR(__wt_scr_alloc(session, 0, &key)); WT_ROW_FOREACH(page, rip, i) { WT_ERR(__wt_row_leaf_key(session, page, rip, key, 0)); - WT_ERR(WT_LEX_CMP(session, btree->collator, key, stop, cmp)); + WT_ERR(__wt_lex_compare_collator( + session, btree->collator, key, stop, &cmp)); if (cmp > 0) { found = 1; break; @@ -1624,8 +1626,8 @@ __slvg_row_trk_update_start( for (i = slot + 1; i < ss->pages_next; ++i) { if (ss->pages[i] == NULL) continue; - WT_ERR(WT_LEX_CMP(session, btree->collator, - SLOT_START(i), &trk->row_stop, cmp)); + WT_ERR(__wt_lex_compare_collator(session, + btree->collator, SLOT_START(i), &trk->row_stop, &cmp)); if (cmp > 0) break; } @@ -1769,8 +1771,8 @@ __slvg_row_build_leaf( /* * >= is correct: see the comment above. */ - WT_ERR(WT_LEX_CMP(session, - btree->collator, key, &trk->row_start, cmp)); + WT_ERR(__wt_lex_compare_collator(session, + btree->collator, key, &trk->row_start, &cmp)); if (cmp >= 0) break; if (WT_VERBOSE_ISSET(session, WT_VERB_SALVAGE)) { @@ -1792,8 +1794,8 @@ __slvg_row_build_leaf( /* * < is correct: see the comment above. */ - WT_ERR(WT_LEX_CMP(session, - btree->collator, key, &trk->row_stop, cmp)); + WT_ERR(__wt_lex_compare_collator(session, + btree->collator, key, &trk->row_stop, &cmp)); if (cmp < 0) break; if (WT_VERBOSE_ISSET(session, WT_VERB_SALVAGE)) { @@ -2121,12 +2123,13 @@ __slvg_trk_compare_key(const void *a, const void *b) btree = a_trk->ss->btree; /* * XXX - * WT_LEX_CMP can potentially fail, and we're ignoring that - * error because this routine is called as an underlying qsort - * routine. + * __wt_lex_compare_collator can potentially fail, and we're + * ignoring that error because this routine is called as an + * underlying qsort routine. */ - (void)WT_LEX_CMP(a_trk->ss->session, - btree->collator, &a_trk->row_start, &b_trk->row_start, cmp); + (void)__wt_lex_compare_collator( + a_trk->ss->session, btree->collator, + &a_trk->row_start, &b_trk->row_start, &cmp); if (cmp != 0) return (cmp); break; diff --git a/src/btree/bt_vrfy.c b/src/btree/bt_vrfy.c index 202a07b0b89..ee3dccb01b3 100644 --- a/src/btree/bt_vrfy.c +++ b/src/btree/bt_vrfy.c @@ -503,7 +503,8 @@ __verify_row_int_key_order(WT_SESSION_IMPL *session, __wt_ref_key(parent, ref, &item.data, &item.size); /* Compare the key against the largest key we've seen so far. */ - WT_RET(WT_LEX_CMP(session, btree->collator, &item, vs->max_key, cmp)); + WT_RET(__wt_lex_compare_collator( + session, btree->collator, &item, vs->max_key, &cmp)); if (cmp <= 0) WT_RET_MSG(session, WT_ERROR, "the internal key in entry %" PRIu32 " on the page at %s " @@ -562,8 +563,8 @@ __verify_row_leaf_key_order( * we've seen was a key from a previous leaf page, and it's not * OK to compare equally in that case. */ - WT_RET(WT_LEX_CMP(session, - btree->collator, vs->tmp1, (WT_ITEM *)vs->max_key, cmp)); + WT_RET(__wt_lex_compare_collator(session, + btree->collator, vs->tmp1, (WT_ITEM *)vs->max_key, &cmp)); if (cmp < 0) WT_RET_MSG(session, WT_ERROR, "the first key on the page at %s sorts equal to or " diff --git a/src/btree/bt_vrfy_dsk.c b/src/btree/bt_vrfy_dsk.c index 6c4d28a03ce..c9766c61c9f 100644 --- a/src/btree/bt_vrfy_dsk.c +++ b/src/btree/bt_vrfy_dsk.c @@ -368,8 +368,8 @@ key_compare: /* */ if ((dsk->type == WT_PAGE_ROW_INT && cell_num > 3) || (dsk->type != WT_PAGE_ROW_INT && cell_num > 1)) { - WT_ERR(WT_LEX_CMP( - session, btree->collator, last, current, cmp)); + WT_ERR(__wt_lex_compare_collator( + session, btree->collator, last, current, &cmp)); if (cmp >= 0) WT_ERR_VRFY(session, "the %" PRIu32 " and %" PRIu32 " keys on " diff --git a/src/btree/rec_split.c b/src/btree/rec_split.c index dac7286e90c..635f4272112 100644 --- a/src/btree/rec_split.c +++ b/src/btree/rec_split.c @@ -363,8 +363,8 @@ __split_verify_intl_key_order(WT_SESSION_IMPL *session, WT_PAGE *page) if (first) first = 0; else { - (void)WT_LEX_CMP(session, - btree->collator, last, next, cmp); + (void)__wt_lex_compare_collator(session, + btree->collator, last, next, &cmp); WT_ASSERT(session, cmp < 0); } } diff --git a/src/btree/rec_write.c b/src/btree/rec_write.c index 103447c9195..83ca90aefd2 100644 --- a/src/btree/rec_write.c +++ b/src/btree/rec_write.c @@ -1654,14 +1654,14 @@ __rec_split_row_promote( } /* Compare against the current key, it must be less. */ - WT_ERR(WT_LEX_CMP( - session, btree->collator, update, r->cur, cmp)); + WT_ERR(__wt_lex_compare_collator( + session, btree->collator, update, r->cur, &cmp)); if (cmp >= 0) continue; /* Compare against the last key, it must be greater. */ - WT_ERR(WT_LEX_CMP( - session, btree->collator, update, r->last, cmp)); + WT_ERR(__wt_lex_compare_collator( + session, btree->collator, update, r->last, &cmp)); if (cmp >= 0) max = update; @@ -2564,8 +2564,8 @@ __rec_split_write(WT_SESSION_IMPL *session, key->data = WT_INSERT_KEY(skip->ins); key->size = WT_INSERT_KEY_SIZE(skip->ins); } - WT_ERR(WT_LEX_CMP(session, - btree->collator, key, &(bnd + 1)->key, cmp)); + WT_ERR(__wt_lex_compare_collator(session, + btree->collator, key, &(bnd + 1)->key, &cmp)); if (cmp >= 0) goto skip_check_complete; break; diff --git a/src/btree/row_srch.c b/src/btree/row_srch.c index 3faa337e81c..a830da53607 100644 --- a/src/btree/row_srch.c +++ b/src/btree/row_srch.c @@ -31,7 +31,8 @@ __wt_search_insert_append(WT_SESSION_IMPL *session, key.data = WT_INSERT_KEY(ins); key.size = WT_INSERT_KEY_SIZE(ins); - WT_RET(WT_LEX_CMP(session, btree->collator, srch_key, &key, cmp)); + WT_RET(__wt_lex_compare_collator( + session, btree->collator, srch_key, &key, &cmp)); if (cmp >= 0) { /* * !!! @@ -97,8 +98,8 @@ __wt_search_insert( key.data = WT_INSERT_KEY(ins); key.size = WT_INSERT_KEY_SIZE(ins); match = WT_MIN(skiplow, skiphigh); - WT_RET(WT_LEX_CMP_SKIP(session, - btree->collator, srch_key, &key, cmp, &match)); + WT_RET(__wt_lex_compare_skip_collator(session, + btree->collator, srch_key, &key, &cmp, &match)); } if (cmp > 0) { /* Keep going at this level */ @@ -203,8 +204,8 @@ restart: page = parent->page; if (append_check) { child = pindex->index[pindex->entries - 1]; __wt_ref_key(page, child, &item->data, &item->size); - WT_ERR(WT_LEX_CMP( - session, btree->collator, srch_key, item, cmp)); + WT_ERR(__wt_lex_compare_collator( + session, btree->collator, srch_key, item, &cmp)); if (cmp >= 0) goto descend; @@ -257,8 +258,8 @@ restart: page = parent->page; __wt_ref_key( page, child, &item->data, &item->size); - WT_ERR(WT_LEX_CMP(session, - btree->collator, srch_key, item, cmp)); + WT_ERR(__wt_lex_compare_collator(session, + btree->collator, srch_key, item, &cmp)); if (cmp > 0) { base = indx + 1; --limit; @@ -380,8 +381,8 @@ leaf_only: rip = page->pg_row_d + indx; WT_ERR(__wt_row_leaf_key(session, page, rip, item, 1)); - WT_ERR(WT_LEX_CMP( - session, btree->collator, srch_key, item, cmp)); + WT_ERR(__wt_lex_compare_collator( + session, btree->collator, srch_key, item, &cmp)); if (cmp > 0) { base = indx + 1; --limit; diff --git a/src/conn/conn_api.c b/src/conn/conn_api.c index e9d641ecf3f..8fdacb41719 100644 --- a/src/conn/conn_api.c +++ b/src/conn/conn_api.c @@ -27,7 +27,8 @@ ext_collate(WT_EXTENSION_API *wt_api, if ((session = (WT_SESSION_IMPL *)wt_session) == NULL) session = conn->default_session; - WT_RET(WT_LEX_CMP(session, wt_api->collator, first, second, *cmpp)); + WT_RET(__wt_lex_compare_collator( + session, wt_api->collator, first, second, cmpp)); return (0); } diff --git a/src/cursor/cur_bulk.c b/src/cursor/cur_bulk.c index f68d8899202..b9ac8d83f76 100644 --- a/src/cursor/cur_bulk.c +++ b/src/cursor/cur_bulk.c @@ -167,8 +167,8 @@ __curbulk_insert_row(WT_CURSOR *cursor) * it is only zero before the first row is inserted. */ if (cbulk->rle != 0) { - WT_ERR(WT_LEX_CMP(session, - btree->collator, &cursor->key, &cbulk->last, cmp)); + WT_ERR(__wt_lex_compare_collator(session, + btree->collator, &cursor->key, &cbulk->last, &cmp)); if (cmp <= 0) WT_ERR(__bulk_row_keycmp_err(cbulk)); } diff --git a/src/cursor/cur_ds.c b/src/cursor/cur_ds.c index 07cd4334c8a..69d76e99ba7 100644 --- a/src/cursor/cur_ds.c +++ b/src/cursor/cur_ds.c @@ -161,7 +161,8 @@ __curds_compare(WT_CURSOR *a, WT_CURSOR *b, int *cmpp) * to be done can be done at this level. */ collator = ((WT_CURSOR_DATA_SOURCE *)a)->collator; - WT_ERR(WT_LEX_CMP(session, collator, &a->key, &b->key, *cmpp)); + WT_ERR(__wt_lex_compare_collator( + session, collator, &a->key, &b->key, cmpp)); } err: API_END_RET(session, ret); diff --git a/src/include/btree.i b/src/include/btree.i index 19910578558..512b261dde1 100644 --- a/src/include/btree.i +++ b/src/include/btree.i @@ -1158,14 +1158,26 @@ __wt_lex_compare(const WT_ITEM *user_item, const WT_ITEM *tree_item) return ((usz == tsz) ? 0 : (usz < tsz) ? -1 : 1); } -#define WT_LEX_CMP(s, collator, k1, k2, cmp) \ - ((collator) == NULL ? \ - (((cmp) = __wt_lex_compare((k1), (k2))), 0) : \ - (collator)->compare(collator, &(s)->iface, (k1), (k2), &(cmp))) +/* + * __wt_lex_compare_collator -- + * The same as __wt_lex_compare, but using the application's collator + * function when configured. + */ +static inline int +__wt_lex_compare_collator(WT_SESSION_IMPL *session, WT_COLLATOR *collator, + const WT_ITEM *user_item, const WT_ITEM *tree_item, int *cmpp) +{ + if (collator == NULL) { + *cmpp = __wt_lex_compare(user_item, tree_item); + return (0); + } + return (collator->compare( + collator, &session->iface, user_item, tree_item, cmpp)); +} /* * __wt_lex_compare_skip -- - * Lexicographic comparison routine, but skipping leading bytes. + * Lexicographic comparison routine, skipping leading bytes. * * Returns: * < 0 if user_item is lexicographically < tree_item @@ -1197,7 +1209,20 @@ __wt_lex_compare_skip( return ((usz == tsz) ? 0 : (usz < tsz) ? -1 : 1); } -#define WT_LEX_CMP_SKIP(s, collator, k1, k2, cmp, matchp) \ - ((collator) == NULL ? \ - (((cmp) = __wt_lex_compare_skip((k1), (k2), matchp)), 0) : \ - (collator)->compare(collator, &(s)->iface, (k1), (k2), &(cmp))) +/* + * __wt_lex_compare_skip_collator -- + * The same as __wt_lex_compare_skip, but using the application's collator + * function when configured. + */ +static inline int +__wt_lex_compare_skip_collator(WT_SESSION_IMPL *session, WT_COLLATOR *collator, + const WT_ITEM *user_item, const WT_ITEM *tree_item, int *cmpp, + size_t *matchp) +{ + if (collator == NULL) { + *cmpp = __wt_lex_compare_skip(user_item, tree_item, matchp); + return (0); + } + return (collator->compare( + collator, &session->iface, user_item, tree_item, cmpp)); +} diff --git a/src/lsm/lsm_cursor.c b/src/lsm/lsm_cursor.c index 1c2cbd0cd33..ec3e4594a2c 100644 --- a/src/lsm/lsm_cursor.c +++ b/src/lsm/lsm_cursor.c @@ -12,7 +12,8 @@ if (((c) = (clsm)->cursors[--i]) != NULL) #define WT_LSM_CURCMP(s, lsm_tree, c1, c2, cmp) \ - WT_LEX_CMP(s, (lsm_tree)->collator, &(c1)->key, &(c2)->key, cmp) + __wt_lex_compare_collator( \ + s, (lsm_tree)->collator, &(c1)->key, &(c2)->key, &cmp) /* * LSM API enter: check that the cursor is in sync with the tree. @@ -768,8 +769,8 @@ __clsm_compare(WT_CURSOR *a, WT_CURSOR *b, int *cmpp) WT_CURSOR_NEEDKEY(a); WT_CURSOR_NEEDKEY(b); - WT_ERR(WT_LEX_CMP( - session, alsm->lsm_tree->collator, &a->key, &b->key, cmp)); + WT_ERR(__wt_lex_compare_collator( + session, alsm->lsm_tree->collator, &a->key, &b->key, &cmp)); *cmpp = cmp; err: API_END_RET(session, ret); |