diff --git a/src/box/tuple_compare.cc b/src/box/tuple_compare.cc index 8e11ac5a8edc878732c19efe21f231c8e639c7a1..cf8fc130e80329ab40f1d003b65eebedcfb29b80 100644 --- a/src/box/tuple_compare.cc +++ b/src/box/tuple_compare.cc @@ -413,6 +413,8 @@ tuple_compare_field_with_hint(const char *field_a, enum mp_type a_type, case FIELD_TYPE_NUMBER: return mp_compare_number_with_hint(field_a, a_type, field_b, b_type); + case FIELD_TYPE_BOOLEAN: + return mp_compare_bool(field_a, field_b); case FIELD_TYPE_SCALAR: return coll != NULL ? mp_compare_scalar_coll(field_a, field_b, coll) : diff --git a/test/engine/null.result b/test/engine/null.result index e216cc11f0dd258b3f7953a19bbccb40e5539f7d..54b4ea9abca06ed25b10164d66a05d9657960ac4 100644 --- a/test/engine/null.result +++ b/test/engine/null.result @@ -627,3 +627,123 @@ s:select{} s:drop() --- ... +-- Check nullable indexes with other types +s = box.schema.space.create('test', {engine = engine}) +--- +... +_ = s:create_index('pk') +--- +... +_ = s:create_index('i1', {parts = {{2, 'string', is_nullable = true}}}) +--- +... +_ = s:create_index('i2', {parts = {{3, 'number', is_nullable = true}}}) +--- +... +_ = s:create_index('i3', {parts = {{4, 'integer', is_nullable = true}}}) +--- +... +_ = s:create_index('i4', {parts = {{5, 'boolean', is_nullable = true}}, unique = false}) +--- +... +_ = s:create_index('i5', {parts = {{6, 'scalar', is_nullable = true}}}) +--- +... +_ = s:auto_increment{box.NULL, 1.11, -111, false, '111'} +--- +... +_ = s:auto_increment{'222', box.NULL, -222, true, 222} +--- +... +_ = s:auto_increment{'333', 3.33, box.NULL, false, 3.33} +--- +... +_ = s:auto_increment{'444', 4.44, -444, box.NULL, true} +--- +... +_ = s:auto_increment{'555', 5.55, -555, false, box.NULL} +--- +... +_ = s:auto_increment{box.NULL, 6.66, -666, true, '666'} +--- +... +_ = s:auto_increment{'777', box.NULL, -777, false, 777} +--- +... +_ = s:auto_increment{'888', 8.88, box.NULL, true, 8.88} +--- +... +_ = s:auto_increment{'999', 9.99, -999, box.NULL, false} +--- +... +_ = s:auto_increment{'000', 0.00, -000, true, box.NULL} +--- +... +s.index.i1:select() +--- +- - [1, null, 1.11, -111, false, '111'] + - [6, null, 6.66, -666, true, '666'] + - [10, '000', 0, 0, true, null] + - [2, '222', null, -222, true, 222] + - [3, '333', 3.33, null, false, 3.33] + - [4, '444', 4.44, -444, null, true] + - [5, '555', 5.55, -555, false, null] + - [7, '777', null, -777, false, 777] + - [8, '888', 8.88, null, true, 8.88] + - [9, '999', 9.99, -999, null, false] +... +s.index.i2:select() +--- +- - [2, '222', null, -222, true, 222] + - [7, '777', null, -777, false, 777] + - [10, '000', 0, 0, true, null] + - [1, null, 1.11, -111, false, '111'] + - [3, '333', 3.33, null, false, 3.33] + - [4, '444', 4.44, -444, null, true] + - [5, '555', 5.55, -555, false, null] + - [6, null, 6.66, -666, true, '666'] + - [8, '888', 8.88, null, true, 8.88] + - [9, '999', 9.99, -999, null, false] +... +s.index.i3:select() +--- +- - [3, '333', 3.33, null, false, 3.33] + - [8, '888', 8.88, null, true, 8.88] + - [9, '999', 9.99, -999, null, false] + - [7, '777', null, -777, false, 777] + - [6, null, 6.66, -666, true, '666'] + - [5, '555', 5.55, -555, false, null] + - [4, '444', 4.44, -444, null, true] + - [2, '222', null, -222, true, 222] + - [1, null, 1.11, -111, false, '111'] + - [10, '000', 0, 0, true, null] +... +s.index.i4:select() +--- +- - [4, '444', 4.44, -444, null, true] + - [9, '999', 9.99, -999, null, false] + - [1, null, 1.11, -111, false, '111'] + - [3, '333', 3.33, null, false, 3.33] + - [5, '555', 5.55, -555, false, null] + - [7, '777', null, -777, false, 777] + - [2, '222', null, -222, true, 222] + - [6, null, 6.66, -666, true, '666'] + - [8, '888', 8.88, null, true, 8.88] + - [10, '000', 0, 0, true, null] +... +s.index.i5:select() +--- +- - [5, '555', 5.55, -555, false, null] + - [10, '000', 0, 0, true, null] + - [9, '999', 9.99, -999, null, false] + - [4, '444', 4.44, -444, null, true] + - [3, '333', 3.33, null, false, 3.33] + - [8, '888', 8.88, null, true, 8.88] + - [2, '222', null, -222, true, 222] + - [7, '777', null, -777, false, 777] + - [1, null, 1.11, -111, false, '111'] + - [6, null, 6.66, -666, true, '666'] +... +s:drop() +--- +... diff --git a/test/engine/null.test.lua b/test/engine/null.test.lua index c15a47cacb3c6ecf8b49cba0049402f287ac3ee7..33dfe339f4e1b979fe55d95d9ee2198914496068 100644 --- a/test/engine/null.test.lua +++ b/test/engine/null.test.lua @@ -211,3 +211,31 @@ t3.field1, t3.field2, t3.field3, t3.field4, t3.field5, t3.field6, t3.field7 s:select{} s:drop() + +-- Check nullable indexes with other types +s = box.schema.space.create('test', {engine = engine}) +_ = s:create_index('pk') +_ = s:create_index('i1', {parts = {{2, 'string', is_nullable = true}}}) +_ = s:create_index('i2', {parts = {{3, 'number', is_nullable = true}}}) +_ = s:create_index('i3', {parts = {{4, 'integer', is_nullable = true}}}) +_ = s:create_index('i4', {parts = {{5, 'boolean', is_nullable = true}}, unique = false}) +_ = s:create_index('i5', {parts = {{6, 'scalar', is_nullable = true}}}) + +_ = s:auto_increment{box.NULL, 1.11, -111, false, '111'} +_ = s:auto_increment{'222', box.NULL, -222, true, 222} +_ = s:auto_increment{'333', 3.33, box.NULL, false, 3.33} +_ = s:auto_increment{'444', 4.44, -444, box.NULL, true} +_ = s:auto_increment{'555', 5.55, -555, false, box.NULL} +_ = s:auto_increment{box.NULL, 6.66, -666, true, '666'} +_ = s:auto_increment{'777', box.NULL, -777, false, 777} +_ = s:auto_increment{'888', 8.88, box.NULL, true, 8.88} +_ = s:auto_increment{'999', 9.99, -999, box.NULL, false} +_ = s:auto_increment{'000', 0.00, -000, true, box.NULL} + +s.index.i1:select() +s.index.i2:select() +s.index.i3:select() +s.index.i4:select() +s.index.i5:select() + +s:drop()