From: imeevma@tarantool.org To: korablev@tarantool.org, tsafin@tarantool.org, tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH v3 4/8] sql: replace ApplyType by CheckType for IN operator Date: Thu, 25 Jun 2020 18:17:43 +0300 [thread overview] Message-ID: <a090ea42e15a75ba23ec0ab0995a2a0cd0e88147.1593096639.git.imeevma@gmail.com> (raw) In-Reply-To: <cover.1593096639.git.imeevma@gmail.com> This patch removes implicit cast from STRING to numeric and vice versa of left operand of IN operator. Part of #4230 Part of #4692 --- src/box/sql/expr.c | 2 +- test/sql-tap/in3.test.lua | 14 +------ test/sql-tap/subquery.test.lua | 69 +--------------------------------- 3 files changed, 3 insertions(+), 82 deletions(-) diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c index 019628a26..745011d35 100644 --- a/src/box/sql/expr.c +++ b/src/box/sql/expr.c @@ -3179,7 +3179,7 @@ sqlExprCodeIN(Parse * pParse, /* Parsing and code generating context */ * true. */ zAff[nVector] = field_type_MAX; - sqlVdbeAddOp4(v, OP_ApplyType, rLhs, nVector, 0, (char*)zAff, + sqlVdbeAddOp4(v, OP_ImplicitCast, rLhs, nVector, 0, (char*)zAff, P4_DYNAMIC); /* * zAff will be freed at the end of VDBE execution, since diff --git a/test/sql-tap/in3.test.lua b/test/sql-tap/in3.test.lua index f7681640e..a2147b0e8 100755 --- a/test/sql-tap/in3.test.lua +++ b/test/sql-tap/in3.test.lua @@ -1,6 +1,6 @@ #!/usr/bin/env tarantool test = require("sqltester") -test:plan(29) +test:plan(28) --!./tcltestrunner.lua -- 2007 November 29 @@ -322,18 +322,6 @@ test:do_test( -- </in3-3.2> }) -test:do_test( - "in3-3.3", - function() - -- Logically, numeric affinity is applied to both sides before - -- the comparison, but index can't be used. - return exec_neph(" SELECT x IN (SELECT b FROM t1) FROM t2 ") - end, { - -- <in3-3.3> - 1, true - -- </in3-3.3> - }) - test:do_test( "in3-3.4", function() diff --git a/test/sql-tap/subquery.test.lua b/test/sql-tap/subquery.test.lua index 15c4c8276..e0771825e 100755 --- a/test/sql-tap/subquery.test.lua +++ b/test/sql-tap/subquery.test.lua @@ -1,6 +1,6 @@ #!/usr/bin/env tarantool test = require("sqltester") -test:plan(73) +test:plan(69) --!./tcltestrunner.lua -- 2005 January 19 @@ -335,73 +335,6 @@ test:do_execsql_test( -- </subquery-2.4.3> }) -test:do_execsql_test( - "subquery-2.5.1", - [[ - CREATE TABLE t3(a INTEGER PRIMARY KEY); - INSERT INTO t3 VALUES(10); - - CREATE TABLE t4(x TEXT PRIMARY KEY); - INSERT INTO t4 VALUES('10'); - ]], { - -- <subquery-2.5.1> - - -- </subquery-2.5.1> - }) - -test:do_test( - "subquery-2.5.2", - function() - -- In the expr "x IN (SELECT a FROM t3)" the RHS of the IN operator - -- has text affinity and the LHS has integer affinity. The rule is - -- that we try to convert both sides to an integer before doing the - -- comparision. Hence, the integer value 10 in t3 will compare equal - -- to the string value '10.0' in t4 because the t4 value will be - -- converted into an integer. - return test:execsql [[ - SELECT * FROM t4 WHERE x IN (SELECT a FROM t3); - ]] - end, { - -- <subquery-2.5.2> - "10" - -- </subquery-2.5.2> - }) - -test:do_test( - "subquery-2.5.3.1", - function() - -- The t4i index cannot be used to resolve the "x IN (...)" constraint - -- because the constraint has integer affinity but t4i has text affinity. - return test:execsql [[ - CREATE INDEX t4i ON t4(x); - SELECT * FROM t4 WHERE x IN (SELECT a FROM t3); - ]] - end, { - -- <subquery-2.5.3.1> - "10" - -- </subquery-2.5.3.1> - }) - --- Tarantool: no-rowid is implied for the table, so query plan contains --- scan over t4i. Verified w/ vanilla sql. Comment this case ---do_test subquery-2.5.3.2 { --- Verify that the t4i index was not used in the previous query --- execsql { --- EXPLAIN QUERY PLAN --- SELECT * FROM t4 WHERE x IN (SELECT a FROM t3); --- } ---} {~/t4i/} -test:do_execsql_test( - "subquery-2.5.4", - [[ - DROP TABLE t3; - DROP TABLE t4; - ]], { - -- <subquery-2.5.4> - - -- </subquery-2.5.4> - }) - -------------------------------------------------------------------- -- The following test cases - subquery-3.* - test tickets that -- were raised during development of correlated subqueries. -- 2.25.1
next prev parent reply other threads:[~2020-06-25 15:17 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-25 15:17 [Tarantool-patches] [PATCH v3 0/8] Remove implicit cast imeevma 2020-06-25 15:17 ` [Tarantool-patches] [PATCH v3 1/8] sql: introduce mem_set_double() imeevma 2020-06-28 13:31 ` Nikita Pettik 2020-07-06 14:02 ` Nikita Pettik 2020-06-25 15:17 ` [Tarantool-patches] [PATCH v3 2/8] sql: change implicit cast for assignment imeevma 2020-06-30 11:50 ` Nikita Pettik 2020-07-05 14:26 ` Mergen Imeev 2020-07-06 21:27 ` Nikita Pettik 2020-07-07 9:29 ` Mergen Imeev 2020-07-07 15:35 ` Nikita Pettik 2020-07-10 10:49 ` Nikita Pettik 2020-06-25 15:17 ` [Tarantool-patches] [PATCH v3 3/8] sql: remove mem_apply_type() from OP_MakeRecord imeevma 2020-06-25 15:17 ` imeevma [this message] 2020-06-29 12:56 ` [Tarantool-patches] [PATCH v3 4/8] sql: replace ApplyType by CheckType for IN operator Nikita Pettik 2020-07-05 14:28 ` Mergen Imeev 2020-07-06 22:06 ` Nikita Pettik 2020-07-07 11:26 ` Mergen Imeev 2020-07-07 16:29 ` Nikita Pettik 2020-06-25 15:17 ` [Tarantool-patches] [PATCH v3 5/8] sql: remove mem_apply_type() from OP_MustBeInt imeevma 2020-06-29 13:29 ` Nikita Pettik 2020-07-05 14:29 ` Mergen Imeev 2020-06-25 15:17 ` [Tarantool-patches] [PATCH v3 6/8] sql: remove implicit cast for comparison imeevma 2020-06-29 23:51 ` Nikita Pettik 2020-07-05 14:47 ` Mergen Imeev 2020-07-06 23:11 ` Nikita Pettik 2020-06-25 15:17 ` [Tarantool-patches] [PATCH v3 7/8] sql: remove unused functions imeevma 2020-06-29 23:52 ` Nikita Pettik 2020-07-05 14:50 ` Mergen Imeev 2020-06-25 15:17 ` [Tarantool-patches] [PATCH v3 8/8] sql: show value and its type in type mismatch error imeevma 2020-06-30 0:22 ` Nikita Pettik 2020-07-05 15:03 ` Mergen Imeev 2020-07-06 21:44 ` Nikita Pettik
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=a090ea42e15a75ba23ec0ab0995a2a0cd0e88147.1593096639.git.imeevma@gmail.com \ --to=imeevma@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=tsafin@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v3 4/8] sql: replace ApplyType by CheckType for IN operator' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox