From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp52.i.mail.ru (smtp52.i.mail.ru [94.100.177.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 7D6F44696C3 for ; Tue, 21 Apr 2020 02:57:07 +0300 (MSK) Date: Mon, 20 Apr 2020 23:57:06 +0000 From: Nikita Pettik Message-ID: <20200420235706.GA28948@tarantool.org> References: <6CC4ABB2-D49D-4721-B913-B999D70844FB@tarantool.org> <20200417063512.GA10928@tarantool.org> <1c1301d61489$a1af1790$e50d46b0$@tarantool.org> <8A7E5353-3471-4B54-91F7-F35AB4A4B039@tarantool.org> <1e3201d614ae$8cc16d40$a64447c0$@tarantool.org> <2D88A96E-5B9A-418C-8DD1-BB9BFD1EDD57@tarantool.org> <203801d61562$5ce44390$16accab0$@tarantool.org> <610CF1D6-A724-4BE2-A717-C3F44A733D7A@tarantool.org> <20200420010518.GA25021@tarantool.org> <1207B8C8-659E-44EB-80F1-9ABBF6B65FA1@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1207B8C8-659E-44EB-80F1-9ABBF6B65FA1@tarantool.org> Subject: Re: [Tarantool-patches] [PATCH] sql: fix number and boolean sorting rules List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Roman Khabibov Cc: tarantool-patches@dev.tarantool.org On 20 Apr 23:28, Roman Khabibov wrote: > diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c > index b88726ea1..985c6ef54 100644 > --- a/src/box/sql/vdbeaux.c > +++ b/src/box/sql/vdbeaux.c > @@ -3054,7 +3054,8 @@ sqlVdbeCompareMsgpack(const char **key1, > rc = double_compare_uint64(pKey2->u.r, > mem1.u.u, -1); > } else { > - rc = (pKey2->flags & MEM_Null) ? +1 : -1; > + rc = (pKey2->flags & MEM_Null) != 0 || > + (pKey2->flags & MEM_Bool) != 0 ? 1 : -1; Nit: please, split this into two branches. This makes code flow more clear. It is not so easy to parse ternary operator with complex condition. > diff --git a/test/sql-tap/gh-4697-scalar-bug.test.lua b/test/sql-tap/gh-4697-scalar-bug.test.lua > new file mode 100755 > index 000000000..4ac286f77 > --- /dev/null > +++ b/test/sql-tap/gh-4697-scalar-bug.test.lua Please, use more specific test name. Like: gh-4697-scalar-bool-sort-cmp.test.lua Also, now we can write tests using only SQL format. Let's strive to use it whenever it is possible. > @@ -0,0 +1,35 @@ > +#!/usr/bin/env tarantool > +test = require("sqltester") > +test:plan(2) > + > +-- > +-- gh-4679: Make sure that boolean precedes any number within > +-- scalar. Result with order by indexed (using index) and > +-- non-indexed (using no index) must be the same. > +-- > +test:execsql [[ > + CREATE TABLE test (s1 INTEGER PRIMARY KEY, s2 SCALAR UNIQUE, s3 SCALAR); > + INSERT INTO test VALUES (0, 1, 1); > + INSERT INTO test VALUES (1, 1.1, 1.1); > + INSERT INTO test VALUES (2, true, true); Check also NULLs as values (since NULLs appear in the same code path).