diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2012-09-27 16:59:59 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2012-09-27 17:01:02 -0400 |
| commit | 70bc5833195daf64a200ac7b4a8c9aff65cf966f (patch) | |
| tree | 18d0013f9301d95749b722228bc0fcbe59a771b9 /src/include/access | |
| parent | ae90ffada4cb27c9194797c43d864a86ce88d72c (diff) | |
Fix btmarkpos/btrestrpos to handle array keys.
This fixes another error in commit 9e8da0f75731aaa7605cf4656c21ea09e84d2eb1.
I neglected to make the mark/restore functionality save and restore the
current set of array key values, which led to strange behavior if an
IndexScan with ScalarArrayOpExpr quals was used as the inner side of a
mergejoin. Per bug #7570 from Melese Tesfaye.
Diffstat (limited to 'src/include/access')
| -rw-r--r-- | src/include/access/nbtree.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index f23ac3559ad..d4941e0ff84 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -535,6 +535,7 @@ typedef struct BTArrayKeyInfo { int scan_key; /* index of associated key in arrayKeyData */ int cur_elem; /* index of current element in elem_values */ + int mark_elem; /* index of marked element in elem_values */ int num_elems; /* number of elems in current array value */ Datum *elem_values; /* array of num_elems Datums */ } BTArrayKeyInfo; @@ -665,6 +666,8 @@ extern void _bt_freestack(BTStack stack); extern void _bt_preprocess_array_keys(IndexScanDesc scan); extern void _bt_start_array_keys(IndexScanDesc scan, ScanDirection dir); extern bool _bt_advance_array_keys(IndexScanDesc scan, ScanDirection dir); +extern void _bt_mark_array_keys(IndexScanDesc scan); +extern void _bt_restore_array_keys(IndexScanDesc scan); extern void _bt_preprocess_keys(IndexScanDesc scan); extern IndexTuple _bt_checkkeys(IndexScanDesc scan, Page page, OffsetNumber offnum, |
