From: Nikita Pettik <korablev@tarantool.org> To: imeevma@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH v5 6/6] sql: remove implicit cast from MakeRecord opcode Date: Fri, 18 Sep 2020 12:28:10 +0000 [thread overview] Message-ID: <20200918122809.GJ10599@tarantool.org> (raw) In-Reply-To: <2446ef040a7f9d235cfc14bccf4dcaa7b6254e73.1598000242.git.imeevma@gmail.com> On 21 Aug 12:19, imeevma@tarantool.org wrote: > This patch removes implicit casting from MakeRecord opcode. > > Closes #4230 > > @TarantoolBot document > Title: remove implicit cast for comparison > > After this patch-set, there will be no implicit casts for comparison. > This means that the values of the field types STRING, BOOLEAN and Again these strange characters in commit msg.. > VARBINARY can be compared with the values of the same field type. Only. > Any numerical value can be compared with any other numerical value. > > Example: > > ``` > tarantool> box.execute([[SELECT '1' > 0;]]) > --- > - null > - 'Type mismatch: can not convert 1 to numeric' > ... > > tarantool> box.execute([[SELECT true > X'33';]]) > --- > - null > - 'Type mismatch: can not convert boolean to varbinary' > ... > > tarantool> box.execute([[SELECT 1.23 > 123;]]) > --- > - metadata: > - name: 1.23 > 123 > type: boolean > rows: > - [false] > ... > ``` > --- > diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c > index bc2182446..d553b80db 100644 > --- a/src/box/sql/expr.c > +++ b/src/box/sql/expr.c > @@ -2886,11 +2886,18 @@ sqlCodeSubselect(Parse * pParse, /* Parsing context */ > jmpIfDynamic = -1; > } > r3 = sqlExprCodeTarget(pParse, pE2, r1); > - enum field_type types[2] = > - { lhs_type, field_type_MAX }; > - sqlVdbeAddOp4(v, OP_MakeRecord, r3, > - 1, r2, (char *)types, > - sizeof(types)); > + uint32_t size = > + 2 * sizeof(enum field_type); > + enum field_type *types= > + sqlDbMallocZero(pParse->db, Why do you have manually alloc types? It is done in sqlVdbeAddOp4() if pass n > 0 (like it was before your refactoring). > + size); > + types[0] = lhs_type; > + types[1] = field_type_MAX; > + sqlVdbeAddOp4(v, OP_ApplyType, r3, 1, 0, > + (char *)types, P4_DYNAMIC); > + sqlVdbeChangeP5(v, OPFLAG_DO_NOT_CONVERT_NUMBERS); > + sqlVdbeAddOp3(v, OP_MakeRecord, r3, 1, > + r2); > sql_expr_type_cache_change(pParse, > r3, 1); > sqlVdbeAddOp2(v, OP_IdxInsert, r2, You also can remove now mem_apply_type(). > diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c > index a0ddbaf60..544619b03 100644 > --- a/src/box/sql/vdbe.c > +++ b/src/box/sql/vdbe.c > @@ -3145,24 +3145,17 @@ type_mismatch: > break; > } > > diff --git a/test/sql-tap/in3.test.lua b/test/sql-tap/in3.test.lua > index a6d842962..7f3abbae0 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(28) > +test:plan(26) > > --!./tcltestrunner.lua > -- 2007 November 29 > @@ -334,18 +334,6 @@ test:do_test( > -- </in3-3.4> > }) > > -test:do_test( > - "in3-3.5", > - function() > - -- Numeric affinity should be applied to each side before the comparison > - -- takes place. Therefore we cannot use index t1_i1, which has no affinity. > - return exec_neph(" SELECT y IN (SELECT a FROM t1) FROM t2 ") > - end, { > - -- <in3-3.5> > - 1, true > - -- </in3-3.5> > - }) > - > test:do_test( > "in3-3.6", > function() > @@ -358,18 +346,6 @@ test:do_test( > -- </in3-3.6> > }) > > -test:do_test( > - "in3-3.7", > - function() > - -- Numeric affinity is applied before the comparison takes place. > - -- Making it impossible to use index t1_i3. > - return exec_neph(" SELECT y IN (SELECT c FROM t1) FROM t2 ") > - end, { > - -- <in3-3.7> > - 1, true > - -- </in3-3.7> > - }) > - Why did you remove these tests? > ----------------------------------------------------------------------- > -- > -- Test using a multi-column index.
next prev parent reply other threads:[~2020-09-18 12:28 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-21 9:19 [Tarantool-patches] [PATCH v5 0/6] sql; remove implicit cast for comparison imeevma 2020-08-21 9:19 ` [Tarantool-patches] [PATCH v5 1/6] sql: remove unused DOUBLE to INTEGER conversion imeevma 2020-09-17 14:48 ` Nikita Pettik 2020-09-28 15:50 ` Mergen Imeev 2020-08-21 9:19 ` [Tarantool-patches] [PATCH v5 2/6] sql: add implicit cast between numbers in OP_Seek* imeevma 2020-09-17 15:34 ` Nikita Pettik 2020-09-28 15:55 ` Mergen Imeev 2020-08-21 9:19 ` [Tarantool-patches] [PATCH v5 3/6] sql: change comparison between numbers using index imeevma 2020-09-18 8:08 ` Nikita Pettik 2020-09-28 16:10 ` Mergen Imeev 2020-08-21 9:19 ` [Tarantool-patches] [PATCH v5 4/6] sql: remove implicit cast from comparison opcodes imeevma 2020-08-21 9:19 ` [Tarantool-patches] [PATCH v5 5/6] sql: fix implicit cast in opcode MustBeInt imeevma 2020-08-21 9:19 ` [Tarantool-patches] [PATCH v5 6/6] sql: remove implicit cast from MakeRecord opcode imeevma 2020-09-18 12:28 ` Nikita Pettik [this message] 2020-09-28 16:19 ` Mergen Imeev
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=20200918122809.GJ10599@tarantool.org \ --to=korablev@tarantool.org \ --cc=imeevma@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v5 6/6] sql: remove implicit cast from MakeRecord opcode' \ /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