From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (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 7637B46970E for ; Wed, 15 Jan 2020 18:01:20 +0300 (MSK) From: Nikita Pettik Date: Wed, 15 Jan 2020 18:01:15 +0300 Message-Id: <69477df18586e6e9700d2bb12d456c0034909a3c.1579099022.git.korablev@tarantool.org> Subject: [Tarantool-patches] [PATCH] sql: fix assert in sql_type_result() List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org 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 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