From: Mergen Imeev <imeevma@tarantool.org>
To: Nikita Pettik <korablev@tarantool.org>
Cc: tarantool-discussions@dev.tarantool.org
Subject: Re: [Tarantool-discussions] Implicit cast for COMPARISON
Date: Thu, 6 Feb 2020 16:09:40 +0300 [thread overview]
Message-ID: <20200206130940.GA22763@tarantool.org> (raw)
In-Reply-To: <20200206124106.GA22195@tarantool.org>
On Thu, Feb 06, 2020 at 03:41:06PM +0300, Mergen Imeev wrote:
> On Tue, Feb 04, 2020 at 09:50:11PM +0300, Nikita Pettik wrote:
> <cut>
>
> > > 7) We need to clarify the rules when comparing SCALAR values. I
> > > think we cannot use the Tarantool rules here, as the Tarantool
> > > rules indicate that “100 < '2' == true”, but we decided that
> > > "100 > '2' == true", since '2' implicitly cast to 2. Could you
> > > suggest the rules that we should use here?
> >
> > There's already existing solution: while fetching value from space,
> > we preserve its initial field type. For SCALAR values we may use one
> > rules, for values fetched from INTEGER/STRING fields - apply another ones.
> >
>
> Hi,
> After some thinking, I came to the conclusion that your idea is
> pretty good. I suggest this algorithm for comparison:
> if (has NULL)
> <return NULL>
> else if (same mp_type) \\MP_TYPE == MEM_TYPE here.
> <compare>
> else if (both numeric)
> <compare>
> else if (has SCALAR)
> <compare using SCALAR rules>
> else if (STRING compared with numeric)
> <if possible cast string to number and compare, else error>
> else
> <error>
>
> In this case, if we still decide to remove the implicit cast from
> STRING, we can do this quite easily.
>
> Please note that this is a simplified version. For example, we do
> not always need to return NULL if one of the operands is NULL.
>
> In addition, this implementation means that we are moving the
> implicit cast for comparison from OP_ApplyType to opcodes
> responsible for comparing.
>
> What do you think about this?
>
Actually, currently it partly works this way:
tarantool> CREATE TABLE t(i INT PRIMARY KEY, a SCALAR);
---
- row_count: 1
...
tarantool> INSERT INTO t VALUES (1,1), (2,2), (3,3), (4,4), (5,5);
---
- row_count: 5
...
tarantool> SELECT COUNT(i) FROM t WHERE '2' > a;
---
- metadata:
- name: COUNT(i)
type: integer
rows:
- [5]
...
Still, not always:
tarantool> SELECT COUNT(i) FROM t WHERE '2' > a + 1;
---
- metadata:
- name: COUNT(i)
type: integer
rows:
- [0]
...
Also, it doesn't work for constants:
tarantool> select 2 > '1';
---
- metadata:
- name: 2 > '1'
type: boolean
rows:
- [true]
...
tarantool> select 2 > CAST('1' AS SCALAR);
---
- metadata:
- name: 2 > CAST('1' AS SCALAR)
type: boolean
rows:
- [true]
...
prev parent reply other threads:[~2020-02-06 13:09 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-21 11:11 Mergen Imeev
2020-01-21 18:09 ` Peter Gulutzan
2020-01-22 14:13 ` Mergen Imeev
2020-01-22 14:24 ` Nikita Pettik
2020-01-30 18:51 ` Konstantin Osipov
2020-01-22 16:43 ` Peter Gulutzan
2020-01-30 18:52 ` Konstantin Osipov
2020-02-03 11:35 ` Mergen Imeev
2020-02-03 15:02 ` Konstantin Osipov
2020-02-04 18:50 ` Nikita Pettik
2020-02-05 2:57 ` Peter Gulutzan
2020-02-07 14:24 ` Nikita Pettik
2020-02-07 14:40 ` Konstantin Osipov
2020-02-07 22:30 ` Peter Gulutzan
2020-02-11 13:32 ` Mergen Imeev
2020-02-05 7:52 ` Mergen Imeev
2020-02-06 12:41 ` Mergen Imeev
2020-02-06 13:09 ` Mergen Imeev [this message]
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=20200206130940.GA22763@tarantool.org \
--to=imeevma@tarantool.org \
--cc=korablev@tarantool.org \
--cc=tarantool-discussions@dev.tarantool.org \
--subject='Re: [Tarantool-discussions] Implicit cast for COMPARISON' \
/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