Tarantool development patches archive
 help / color / mirror / Atom feed
From: Nikita Pettik <korablev@tarantool.org>
To: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] sql: fix assert in sql_type_result()
Date: Tue, 21 Jan 2020 01:25:16 +0300	[thread overview]
Message-ID: <20200120222516.GF82780@tarantool.org> (raw)
In-Reply-To: <69477df18586e6e9700d2bb12d456c0034909a3c.1579099022.git.korablev@tarantool.org>

On 15 Jan 18:01, Nikita Pettik wrote:
> Accidentally, assert in sql_type_result() checking argument types was
> changed in 64745b10c, so that now it may fail even on correct values.
> Let's revert this change.
> 
> Closes #4728
> ---
> Branch: https://github.com/tarantool/tarantool/tree/np/gh-4728-fix-assert-in-sql_type_result
> Issue: https://github.com/tarantool/tarantool/issues/4728

Pushed to master and 2.2 as trivial
 
>  src/box/sql/expr.c      |  2 +-
>  test/sql/types.result   | 27 +++++++++++++++++++++++++++
>  test/sql/types.test.lua | 13 +++++++++++++
>  3 files changed, 41 insertions(+), 1 deletion(-)
> 
> diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
> index 63808941d..bc2182446 100644
> --- a/src/box/sql/expr.c
> +++ b/src/box/sql/expr.c
> @@ -392,7 +392,7 @@ sql_type_result(enum field_type lhs, enum field_type rhs)
>  			return FIELD_TYPE_DOUBLE;
>  		if (lhs == FIELD_TYPE_INTEGER || rhs == FIELD_TYPE_INTEGER)
>  			return FIELD_TYPE_INTEGER;
> -		assert(lhs == FIELD_TYPE_UNSIGNED &&
> +		assert(lhs == FIELD_TYPE_UNSIGNED ||
>  		       rhs == FIELD_TYPE_UNSIGNED);
>  		return FIELD_TYPE_UNSIGNED;
>  	}
> diff --git a/test/sql/types.result b/test/sql/types.result
> index ac4c91e32..f0c34b6fa 100644
> --- a/test/sql/types.result
> +++ b/test/sql/types.result
> @@ -2133,3 +2133,30 @@ box.execute("SELECT d, TYPEOF(d) FROM t5;")
>    - [5.5, 'double']
>    - [6000000, 'double']
>  ...
> +-- gh-4728: make sure that given query doesn't result in
> +-- assertion fault.
> +--
> +s = box.schema.space.create('s')
> +---
> +...
> +_ = s:create_index('pk')
> +---
> +...
> +s:format({ \
> +    [1] = {name = 'id', type = 'unsigned'}, \
> +    [2] = {name = 'v', type = 'string', is_nullable = true}, \
> +})
> +---
> +...
> +box.execute([[SELECT * FROM "s" WHERE "id" = ?;]])
> +---
> +- metadata:
> +  - name: id
> +    type: unsigned
> +  - name: v
> +    type: string
> +  rows: []
> +...
> +s:drop()
> +---
> +...
> diff --git a/test/sql/types.test.lua b/test/sql/types.test.lua
> index c677b27cb..bd14b342d 100644
> --- a/test/sql/types.test.lua
> +++ b/test/sql/types.test.lua
> @@ -474,3 +474,16 @@ box.execute("SELECT 3e3, typeof(3e3);")
>  box.execute("CREATE TABLE t5 (d DOUBLE PRIMARY KEY);")
>  box.execute("INSERT INTO t5 VALUES (4), (5.5), (6e6);")
>  box.execute("SELECT d, TYPEOF(d) FROM t5;")
> +
> +-- gh-4728: make sure that given query doesn't result in
> +-- assertion fault.
> +--
> +s = box.schema.space.create('s')
> +_ = s:create_index('pk')
> +s:format({ \
> +    [1] = {name = 'id', type = 'unsigned'}, \
> +    [2] = {name = 'v', type = 'string', is_nullable = true}, \
> +})
> +
> +box.execute([[SELECT * FROM "s" WHERE "id" = ?;]])
> +s:drop()
> -- 
> 2.15.1
> 

      reply	other threads:[~2020-01-20 22:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-15 15:01 Nikita Pettik
2020-01-20 22:25 ` Nikita Pettik [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=20200120222516.GF82780@tarantool.org \
    --to=korablev@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH] sql: fix assert in sql_type_result()' \
    /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