diff --git a/src/box/memtx_bitset.cc b/src/box/memtx_bitset.cc index c3eff30fcd2559d8a2276a3d7f09a488b4153e33..4c4b956332d3a44394301b7a2737cc96278c6aa3 100644 --- a/src/box/memtx_bitset.cc +++ b/src/box/memtx_bitset.cc @@ -368,7 +368,8 @@ MemtxBitset::initIterator(struct iterator *iterator, enum iterator_type type, bitset_key_size); break; default: - return initIterator(iterator, type, key, part_count); + return Index::initIterator(iterator, type, key, + part_count); } if (rc != 0) { diff --git a/src/box/memtx_rtree.cc b/src/box/memtx_rtree.cc index e4d590236d502b2d912c202c3b329b416aa4cd70..5a3c9c98d432a81d5875bcdab69b542dc6987df4 100644 --- a/src/box/memtx_rtree.cc +++ b/src/box/memtx_rtree.cc @@ -277,7 +277,7 @@ MemtxRTree::initIterator(struct iterator *iterator, enum iterator_type type, op = SOP_NEIGHBOR; break; default: - return initIterator(iterator, type, key, part_count); + return Index::initIterator(iterator, type, key, part_count); } rtree_search(&m_tree, &rect, op, &it->impl); } diff --git a/src/box/sophia_index.cc b/src/box/sophia_index.cc index 122d81b9e7acc0cf9a329737ea6a2fd2d5127b08..8f4f07efb85d6edc5478030f798741b35113426c 100644 --- a/src/box/sophia_index.cc +++ b/src/box/sophia_index.cc @@ -733,7 +733,7 @@ SophiaIndex::initIterator(struct iterator *ptr, case ITER_LT: compare = "<"; break; default: - return initIterator(ptr, type, key, part_count); + return Index::initIterator(ptr, type, key, part_count); } it->cursor = sp_cursor(env); if (it->cursor == NULL) diff --git a/test/box/bitset.result b/test/box/bitset.result index 09c0523e9b890c55d7bb421e8dfb238c8e9e46fc..1538452a865eaad1af89ccb62994f5481225ab00 100644 --- a/test/box/bitset.result +++ b/test/box/bitset.result @@ -1838,3 +1838,27 @@ dump(box.index.BITS_ANY_SET, 113) drop_space() --- ... +------------------------------------------------------------------------------ +-- Misc +------------------------------------------------------------------------------ +-- gh-1467: invalid iterator type +space = box.schema.space.create('test') +--- +... +_ = space:create_index('primary', { type = 'hash', parts = {1, 'num'}, unique = true }) +--- +... +_ = space:create_index('bitset', { type = 'bitset', parts = {2, 'num'}, unique = false }) +--- +... +space.index.bitset:select({1}, { iterator = 'OVERLAPS'}) +--- +- error: Index 'bitset' (BITSET) of space 'test' (memtx) does not support requested + iterator type +... +space:drop() +--- +... +space = nil +--- +... diff --git a/test/box/bitset.test.lua b/test/box/bitset.test.lua index 237f5646fd9834b07d366c8282184f889dad6d28..ad745156d8682dd5422547ef0e9a34e06e067f88 100644 --- a/test/box/bitset.test.lua +++ b/test/box/bitset.test.lua @@ -95,3 +95,15 @@ dump(box.index.BITS_ANY_SET, 84) dump(box.index.BITS_ANY_SET, 113) drop_space() + +------------------------------------------------------------------------------ +-- Misc +------------------------------------------------------------------------------ + +-- gh-1467: invalid iterator type +space = box.schema.space.create('test') +_ = space:create_index('primary', { type = 'hash', parts = {1, 'num'}, unique = true }) +_ = space:create_index('bitset', { type = 'bitset', parts = {2, 'num'}, unique = false }) +space.index.bitset:select({1}, { iterator = 'OVERLAPS'}) +space:drop() +space = nil diff --git a/test/box/hash.result b/test/box/hash.result index fb8ec35fe5b467771bf0be209179c7c89ca2c53e..1d7618a4e62827f4c9c508623558908d1992b400 100644 --- a/test/box/hash.result +++ b/test/box/hash.result @@ -717,3 +717,18 @@ box.space.test:insert{1} box.space.test:drop() --- ... +-- gh-1467: invalid iterator type +space = box.schema.space.create('test') +--- +... +index = space:create_index('primary', { type = 'hash' }) +--- +... +space:select({1}, {iterator = 'BITS_ALL_SET' } ) +--- +- error: Index 'primary' (HASH) of space 'test' (memtx) does not support requested + iterator type +... +space:drop() +--- +... diff --git a/test/box/hash.test.lua b/test/box/hash.test.lua index 7fb2cb7c01cdbf092133c2f2922299419f30517f..ec157b926fafa95cd02484cebc95ce7185796562 100644 --- a/test/box/hash.test.lua +++ b/test/box/hash.test.lua @@ -307,3 +307,9 @@ _ = box.schema.create_space('test') _ = box.space.test:create_index('i',{parts={1,'STR'}}) box.space.test:insert{1} box.space.test:drop() + +-- gh-1467: invalid iterator type +space = box.schema.space.create('test') +index = space:create_index('primary', { type = 'hash' }) +space:select({1}, {iterator = 'BITS_ALL_SET' } ) +space:drop() diff --git a/test/box/rtree_misc.result b/test/box/rtree_misc.result index 785976aec7a026d9371015b360091a0972e40c35..625b2670c2e6bb3ca0b044849f8f7bc47d5aefdf 100644 --- a/test/box/rtree_misc.result +++ b/test/box/rtree_misc.result @@ -690,6 +690,12 @@ i:select({0, 0, 0}, {iterator = 'neighbor'}) - - [2, [2, 0, 0]] - [1, [1, 1, 1]] ... +-- gh-1467: invalid iterator type +i:select({1, 2, 3, 4, 5, 6}, {iterator = 'BITS_ALL_SET' } ) +--- +- error: Index 's' (RTREE) of space 's' (memtx) does not support requested iterator + type +... s:drop() --- ... diff --git a/test/box/rtree_misc.test.lua b/test/box/rtree_misc.test.lua index cf061a77ce7950ed045404e7b07f6fa3814e5f99..3493f065500ae9d399c26064a6ab1acdf52955c9 100644 --- a/test/box/rtree_misc.test.lua +++ b/test/box/rtree_misc.test.lua @@ -241,4 +241,7 @@ i:select({0, 0, 0}, {iterator = 'neighbor'}) i:alter{distance = 'manhattan' } i:select({0, 0, 0}, {iterator = 'neighbor'}) +-- gh-1467: invalid iterator type +i:select({1, 2, 3, 4, 5, 6}, {iterator = 'BITS_ALL_SET' } ) + s:drop() diff --git a/test/engine/iterator.result b/test/engine/iterator.result index 4658f2094046d4995e8985d5c47095a9be5f2867..e2d72ecaad4cf90c09950785708ca0008a927d13 100644 --- a/test/engine/iterator.result +++ b/test/engine/iterator.result @@ -7,6 +7,10 @@ inspector = test_run.new() engine = inspector:get_cfg('engine') --- ... +inspector:cmd("push filter '"..engine.."' to 'engine'") +--- +- true +... -- iterator (str) space = box.schema.space.create('test', { engine = engine }) --- @@ -2927,3 +2931,22 @@ t space:drop() --- ... +-- gh-1467: invalid iterator type +space = box.schema.space.create('test', { engine = engine }) +--- +... +index = space:create_index('primary') +--- +... +space:select({}, {iterator = 'BITS_ALL_SET' } ) +--- +- error: Index 'primary' (TREE) of space 'test' (engine) does not support requested + iterator type +... +space:drop() +--- +... +inspector:cmd("clear filter") +--- +- true +... diff --git a/test/engine/iterator.test.lua b/test/engine/iterator.test.lua index 7e248521417025a455441208f7675086c6aa22ef..b5c424b05ee06e23242bf0c1c0843890714f7f08 100644 --- a/test/engine/iterator.test.lua +++ b/test/engine/iterator.test.lua @@ -1,6 +1,7 @@ test_run = require('test_run') inspector = test_run.new() engine = inspector:get_cfg('engine') +inspector:cmd("push filter '"..engine.."' to 'engine'") -- iterator (str) space = box.schema.space.create('test', { engine = engine }) @@ -91,3 +92,11 @@ t t = {} for state, v in index:pairs(box.tuple.new(tostring(77)), {iterator = 'LT'}) do table.insert(t, v) end t space:drop() + +-- gh-1467: invalid iterator type +space = box.schema.space.create('test', { engine = engine }) +index = space:create_index('primary') +space:select({}, {iterator = 'BITS_ALL_SET' } ) +space:drop() + +inspector:cmd("clear filter")