From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp54.i.mail.ru (smtp54.i.mail.ru [217.69.128.34]) (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 298C44696C2 for ; Thu, 28 May 2020 17:17:36 +0300 (MSK) From: Mergen Imeev Date: Thu, 28 May 2020 17:17:35 +0300 Message-Id: <40caa8fdc66d3d20aca72677e10014e749172f92.1590671266.git.imeevma@gmail.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH 4/6] sql: remove mem_apply_type() from OP_MustBeInt List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: v.shpilevoy@tarantool.org, tsafin@tarantool.org, tarantool-patches@dev.tarantool.org This patch replaces mem_apply_type() by mem_check_types() in OP_MustBeInt, which allows to remove implicit case in some places, for example in IN operator. Part of #4230 --- src/box/sql/vdbe.c | 2 +- test/sql-tap/e_select1.test.lua | 17 +++-- test/sql-tap/in4.test.lua | 97 +--------------------------- test/sql-tap/join.test.lua | 1 - test/sql-tap/limit.test.lua | 2 +- test/sql-tap/tkt-9a8b09f8e6.test.lua | 4 -- test/sql-tap/tkt-fc7bd6358f.test.lua | 2 - test/sql-tap/transitive1.test.lua | 4 +- test/sql-tap/whereB.test.lua | 2 - test/sql-tap/whereC.test.lua | 8 +-- 10 files changed, 18 insertions(+), 121 deletions(-) diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index fc41ee0d6..7add67ae7 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -2073,7 +2073,7 @@ case OP_AddImm: { /* in1 */ case OP_MustBeInt: { /* jump, in1 */ pIn1 = &aMem[pOp->p1]; if ((pIn1->flags & (MEM_Int | MEM_UInt)) == 0) { - mem_apply_type(pIn1, FIELD_TYPE_INTEGER); + mem_check_types(pIn1, FIELD_TYPE_INTEGER); if ((pIn1->flags & (MEM_Int | MEM_UInt)) == 0) { if (pOp->p2==0) { diag_set(ClientError, ER_SQL_TYPE_MISMATCH, diff --git a/test/sql-tap/e_select1.test.lua b/test/sql-tap/e_select1.test.lua index 7673426f4..578620fca 100755 --- a/test/sql-tap/e_select1.test.lua +++ b/test/sql-tap/e_select1.test.lua @@ -1,6 +1,6 @@ #!/usr/bin/env tarantool test = require("sqltester") -test:plan(510) +test:plan(509) --!./tcltestrunner.lua -- 2010 July 16 @@ -2150,7 +2150,6 @@ test:do_select_tests( {"2", "SELECT b FROM f1 ORDER BY a LIMIT 2+3 ", {"a", "b", "c", "d", "e"}}, {"3", "SELECT b FROM f1 ORDER BY a LIMIT (SELECT a FROM f1 WHERE b = 'e') ", {"a", "b", "c", "d", "e"}}, {"4", "SELECT b FROM f1 ORDER BY a LIMIT 5.0 ", {"a", "b", "c", "d", "e"}}, - {"5", "SELECT b FROM f1 ORDER BY a LIMIT '5' ", {"a", "b", "c", "d", "e"}}, }) -- EVIDENCE-OF: R-46155-47219 If the expression evaluates to a NULL value @@ -2195,7 +2194,7 @@ test:do_select_tests( {"1", "SELECT b FROM f1 ORDER BY a LIMIT 0 ", {}}, {"2", "SELECT b FROM f1 ORDER BY a DESC LIMIT 4 ", {"z", "y", "x", "w"}}, {"3", "SELECT b FROM f1 ORDER BY a DESC LIMIT 8 ", {"z", "y", "x", "w", "v", "u", "t", "s"}}, - {"4", "SELECT b FROM f1 ORDER BY a DESC LIMIT '12' ", {"z", y, "x", "w", "v", "u", "t", "s", "r", "q", "p", "o"}}, + {"4", "SELECT b FROM f1 ORDER BY a DESC LIMIT 12 ", {"z", y, "x", "w", "v", "u", "t", "s", "r", "q", "p", "o"}}, }) -- EVIDENCE-OF: R-54935-19057 Or, if the SELECT statement would return @@ -2240,10 +2239,10 @@ test:do_select_tests( {"1", "SELECT b FROM f1 ORDER BY a LIMIT 10 OFFSET 5", {"f", "g", "h", "i", "j", "k", "l", "m", "n", "o"}}, {"2", "SELECT b FROM f1 ORDER BY a LIMIT 2+3 OFFSET 10", {"k", "l", "m", "n", "o"}}, {"3", "SELECT b FROM f1 ORDER BY a LIMIT (SELECT a FROM f1 WHERE b='j') OFFSET (SELECT a FROM f1 WHERE b='b') ", {"c", "d", "e", "f", "g", "h", "i", "j", "k", "l"}}, - {"4", "SELECT b FROM f1 ORDER BY a LIMIT '5' OFFSET 3.0 ", {"d", "e", "f", "g", "h"}}, - {"5", "SELECT b FROM f1 ORDER BY a LIMIT '5' OFFSET 0 ", {"a", "b", "c", "d", "e"}}, + {"4", "SELECT b FROM f1 ORDER BY a LIMIT 5 OFFSET 3.0 ", {"d", "e", "f", "g", "h"}}, + {"5", "SELECT b FROM f1 ORDER BY a LIMIT 5 OFFSET 0 ", {"a", "b", "c", "d", "e"}}, {"6", "SELECT b FROM f1 ORDER BY a LIMIT 0 OFFSET 10 ", {}}, - {"7", "SELECT b FROM f1 ORDER BY a LIMIT 3 OFFSET '1'||'5' ", {"p", "q", "r"}}, + {"7", "SELECT b FROM f1 ORDER BY a LIMIT 3 OFFSET CAST('1'||'5' AS INTEGER) ", {"p", "q", "r"}}, }) -- EVIDENCE-OF: R-34648-44875 Or, if the SELECT would return less than @@ -2279,10 +2278,10 @@ test:do_select_tests( {"1", "SELECT b FROM f1 ORDER BY a LIMIT 5, 10 ", {"f", "g", "h", "i", "j", "k", "l", "m", "n", "o"}}, {"2", "SELECT b FROM f1 ORDER BY a LIMIT 10, 2+3 ", {"k", "l", "m", "n", "o"}}, {"3", "SELECT b FROM f1 ORDER BY a LIMIT (SELECT a FROM f1 WHERE b='b'), (SELECT a FROM f1 WHERE b='j')", {"c", "d", "e", "f", "g", "h", "i", "j", "k", "l"}}, - {"4", "SELECT b FROM f1 ORDER BY a LIMIT 3.0, '5' ", {"d", "e", "f", "g", "h"}}, - {"5", "SELECT b FROM f1 ORDER BY a LIMIT 0, '5' ", {"a", "b", "c", "d", "e"}}, + {"4", "SELECT b FROM f1 ORDER BY a LIMIT 3.0, 5 ", {"d", "e", "f", "g", "h"}}, + {"5", "SELECT b FROM f1 ORDER BY a LIMIT 0, 5 ", {"a", "b", "c", "d", "e"}}, {"6", "SELECT b FROM f1 ORDER BY a LIMIT 10, 0 ", {}}, - {"7", "SELECT b FROM f1 ORDER BY a LIMIT '1'||'5', 3 ", {"p", "q", "r"}}, + {"7", "SELECT b FROM f1 ORDER BY a LIMIT CAST('1'||'5' AS INTEGER), 3 ", {"p", "q", "r"}}, {"8", "SELECT b FROM f1 ORDER BY a LIMIT 20, 10 ", {"u", "v", "w", "x", "y", "z"}}, {"9", "SELECT a FROM f1 ORDER BY a DESC LIMIT 18+4, 100 ", {4, 3, 2, 1}}, {"10", "SELECT b FROM f1 ORDER BY a LIMIT 0, 5 ", {"a", "b", "c", "d", "e"}}, diff --git a/test/sql-tap/in4.test.lua b/test/sql-tap/in4.test.lua index 8c6917379..33947d0ab 100755 --- a/test/sql-tap/in4.test.lua +++ b/test/sql-tap/in4.test.lua @@ -1,6 +1,6 @@ #!/usr/bin/env tarantool test = require("sqltester") -test:plan(61) +test:plan(52) --!./tcltestrunner.lua -- 2008 September 1 @@ -140,7 +140,7 @@ test:do_execsql_test( test:do_execsql_test( "in4-2.7", [[ - SELECT b FROM t2 WHERE a IN ('1', '2') + SELECT b FROM t2 WHERE a IN (1, 2) ]], { -- "one", "two" @@ -153,7 +153,6 @@ test:do_execsql_test( SELECT b FROM t2 WHERE a IN ('', '0.0.0', '2') ]], { -- - "two" -- }) @@ -585,98 +584,6 @@ test:do_execsql_test( -- }) -test:do_execsql_test( - "in4-4.11", - [[ - CREATE TABLE t4b(a TEXT, b NUMBER, c INT PRIMARY KEY); - INSERT INTO t4b VALUES('1.0',1,4); - SELECT c FROM t4b WHERE a=b; - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.12", - [[ - SELECT c FROM t4b WHERE b=a; - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.13", - [[ - SELECT c FROM t4b WHERE +a=b; - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.14", - [[ - SELECT c FROM t4b WHERE a=+b; - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.15", - [[ - SELECT c FROM t4b WHERE +b=a; - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.16", - [[ - SELECT c FROM t4b WHERE b=+a; - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.17", - [[ - SELECT c FROM t4b WHERE a IN (b); - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.18", - [[ - SELECT c FROM t4b WHERE b IN (a); - ]], { - -- - 4 - -- - }) - -test:do_execsql_test( - "in4-4.19", - [[ - SELECT c FROM t4b WHERE +b IN (a); - ]], { - -- - 4 - -- - }) - -- MUST_WORK_TEST -- Tarantool: TBI: Need to support collations. Depends on #2121 -- test:do_execsql_test( diff --git a/test/sql-tap/join.test.lua b/test/sql-tap/join.test.lua index 840b780a3..51e0ecb79 100755 --- a/test/sql-tap/join.test.lua +++ b/test/sql-tap/join.test.lua @@ -1034,7 +1034,6 @@ test:do_execsql_test( SELECT * FROM t1 NATURAL JOIN t2 ]], { -- - "one", "1", "two", "2" -- }) diff --git a/test/sql-tap/limit.test.lua b/test/sql-tap/limit.test.lua index 870233942..a7d1451f7 100755 --- a/test/sql-tap/limit.test.lua +++ b/test/sql-tap/limit.test.lua @@ -441,7 +441,7 @@ test:do_catchsql_test( test:do_execsql_test( "limit-6.5.2", [[ - SELECT * FROM t6 LIMIT '12' + SELECT * FROM t6 LIMIT 12 ]], { -- 1, 2, 3, 4 diff --git a/test/sql-tap/tkt-9a8b09f8e6.test.lua b/test/sql-tap/tkt-9a8b09f8e6.test.lua index cb5348ab4..854ed774f 100755 --- a/test/sql-tap/tkt-9a8b09f8e6.test.lua +++ b/test/sql-tap/tkt-9a8b09f8e6.test.lua @@ -189,7 +189,6 @@ test:do_execsql_test( SELECT x FROM t2 WHERE x IN ('1'); ]], { -- <3.3> - 1 -- }) @@ -199,7 +198,6 @@ test:do_execsql_test( SELECT x FROM t2 WHERE x IN ('1'); ]], { -- <3.4> - 1 -- }) @@ -229,7 +227,6 @@ test:do_execsql_test( SELECT x FROM t2 WHERE '1' IN (x); ]], { -- <3.7> - 1 -- }) @@ -239,7 +236,6 @@ test:do_execsql_test( SELECT x FROM t2 WHERE '1' IN (x); ]], { -- <3.8> - 1 -- }) diff --git a/test/sql-tap/tkt-fc7bd6358f.test.lua b/test/sql-tap/tkt-fc7bd6358f.test.lua index fe5d6200f..f38ffa3d6 100755 --- a/test/sql-tap/tkt-fc7bd6358f.test.lua +++ b/test/sql-tap/tkt-fc7bd6358f.test.lua @@ -80,7 +80,6 @@ for a, from in ipairs(froms) do function() return test:execsql(string.format("SELECT t1.textid, i.intid, t2.textid %s %s", from, where)) end, { - "12", 12, "12", "34", 34, "34" }) test:do_test( @@ -88,7 +87,6 @@ for a, from in ipairs(froms) do function() return test:execsql(string.format("SELECT t1.textid, i.intid, t2.textid %s %s", from, where)) end, { - "12", 12, "12", "34", 34, "34" }) end diff --git a/test/sql-tap/transitive1.test.lua b/test/sql-tap/transitive1.test.lua index e96056580..96895b4a7 100755 --- a/test/sql-tap/transitive1.test.lua +++ b/test/sql-tap/transitive1.test.lua @@ -338,7 +338,7 @@ test:do_execsql_test( ON tvshow.idshow = episode.idshow LEFT JOIN seasons ON seasons.idshow = episode.idshow - AND seasons.season = episode.c12 + AND seasons.season = CAST(episode.c12 AS INTEGER) JOIN path ON files.idpath = path.idpath LEFT JOIN bookmark @@ -378,7 +378,7 @@ test:do_execsql_test( FROM episodeview JOIN tvshowview ON tvshowview.idShow = episodeview.idShow JOIN seasons ON (seasons.idShow = tvshowview.idShow - AND seasons.season = episodeview.c12) + AND seasons.season = CAST(episodeview.c12 AS INTEGER)) JOIN files ON files.idFile = episodeview.idFile JOIN tvshowlinkpath ON tvshowlinkpath.idShow = tvshowview.idShow JOIN path ON path.idPath = tvshowlinkpath.idPath diff --git a/test/sql-tap/whereB.test.lua b/test/sql-tap/whereB.test.lua index fe5e28c70..970ff1dec 100755 --- a/test/sql-tap/whereB.test.lua +++ b/test/sql-tap/whereB.test.lua @@ -432,7 +432,6 @@ test:do_execsql_test( ]], { -- - 1, 2, true -- }) @@ -443,7 +442,6 @@ test:do_execsql_test( ]], { -- - 1, 2, true -- }) diff --git a/test/sql-tap/whereC.test.lua b/test/sql-tap/whereC.test.lua index 89459dee3..58c049553 100755 --- a/test/sql-tap/whereC.test.lua +++ b/test/sql-tap/whereC.test.lua @@ -55,9 +55,9 @@ test:do_execsql_test( test:test("main", function() local data = {{"SELECT i FROM t1 WHERE a=1 AND b=2 AND i>3", {4, 5}}, -- {"SELECT i FROM t1 WHERE rowid='12'", {12}}, - {"SELECT i FROM t1 WHERE a=1 AND b='2'", {3, 4, 5}}, - {"SELECT i FROM t1 WHERE a=1 AND b='2' AND i>'3'", {4, 5}}, - {"SELECT i FROM t1 WHERE a=1 AND b='2' AND i<5", {3, 4}}, + {"SELECT i FROM t1 WHERE a=1 AND b=2", {3, 4, 5}}, + {"SELECT i FROM t1 WHERE a=1 AND b=2 AND i>3", {4, 5}}, + {"SELECT i FROM t1 WHERE a=1 AND b=2 AND i<5", {3, 4}}, {"SELECT i FROM t1 WHERE a=2 AND b=2 AND i<12", {10, 11}}, {"SELECT i FROM t1 WHERE a IN(1, 2) AND b=2 AND i<11", {3, 4, 5, 10}}, {"SELECT i FROM t1 WHERE a=2 AND b=2 AND i BETWEEN 10 AND 12", {10, 11, 12}}, @@ -66,7 +66,7 @@ test:test("main", function() {"SELECT i FROM t1 WHERE a=2 AND b=2 AND i BETWEEN 12 AND 10", {}}, {"SELECT i FROM t1 WHERE a=2 AND b=2 AND i=NULL", {}}, - {"SELECT i FROM t1 WHERE a=1 AND b='2' AND i<4.5", {3, 4}}} + {"SELECT i FROM t1 WHERE a=1 AND b=2 AND i<4.5", {3, 4}}} -- {"SELECT i FROM t1 WHERE rowid IS '12'", {12}}} for tn, t in ipairs(data) do -- 2.25.1