diff --git a/src/box/field_map.h b/src/box/field_map.h index b0dfeb4e4579a5d7ea549bdee8d5dc9fb18cd4ae..a1a5a9dba820d577977260bfc2e1b4b1df0b8b9f 100644 --- a/src/box/field_map.h +++ b/src/box/field_map.h @@ -152,8 +152,8 @@ field_map_get_offset(const uint32_t *field_map, int32_t offset_slot, int multikey_idx) { uint32_t offset; - if (multikey_idx != MULTIKEY_NONE && field_map[offset_slot] > 0) { - assert((int32_t)field_map[offset_slot] < 0); + if (multikey_idx != MULTIKEY_NONE && + (int32_t) field_map[offset_slot] < 0) { /** * The field_map extent has the following * structure: [size=N|slot1|slot2|..|slotN] diff --git a/test/engine/multikey.result b/test/engine/multikey.result index 1d5d9e20095d4ee6b1ab8ba96bbc0d859fc91cc9..38c108ebc305e22fd1f5b3a4b107d5eb29b365ca 100644 --- a/test/engine/multikey.result +++ b/test/engine/multikey.result @@ -753,3 +753,27 @@ i2:select() s:drop() --- ... +-- +-- gh-4234: Assert when using indexes containing both multikey +-- and regular key_parts. +-- +s = box.schema.space.create('clients', {engine = engine}) +--- +... +name_idx = s:create_index('name_idx', {parts = {{1, 'string'}}}) +--- +... +phone_idx = s:create_index('phone_idx', {parts = {{'[2][*]', 'string'}, {3, 'string'}}, unique=false}) +--- +... +s:insert({"Genadiy", {"911"}, 'b'}) +--- +- ['Genadiy', ['911'], 'b'] +... +s:insert({"Jorge", {"911", "89457609234"}, 'a'}) +--- +- ['Jorge', ['911', '89457609234'], 'a'] +... +s:drop() +--- +... diff --git a/test/engine/multikey.test.lua b/test/engine/multikey.test.lua index f32f49d2b993e9c5f0f6946d273d2c5f39d60ab5..a2bef989f93db8b387366a95234ef3a2ab566e25 100644 --- a/test/engine/multikey.test.lua +++ b/test/engine/multikey.test.lua @@ -194,3 +194,14 @@ s:replace{2, {{2, 3}}} i2 = s:create_index('sk', {parts = {{2, 'unsigned', path = '[1][*]'}}}) i2:select() s:drop() + +-- +-- gh-4234: Assert when using indexes containing both multikey +-- and regular key_parts. +-- +s = box.schema.space.create('clients', {engine = engine}) +name_idx = s:create_index('name_idx', {parts = {{1, 'string'}}}) +phone_idx = s:create_index('phone_idx', {parts = {{'[2][*]', 'string'}, {3, 'string'}}, unique=false}) +s:insert({"Genadiy", {"911"}, 'b'}) +s:insert({"Jorge", {"911", "89457609234"}, 'a'}) +s:drop()