From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id E41192BD90 for ; Mon, 12 Nov 2018 19:07:36 -0500 (EST) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id C0p6e_QxhxyU for ; Mon, 12 Nov 2018 19:07:36 -0500 (EST) Received: from smtp20.mail.ru (smtp20.mail.ru [94.100.179.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 9C0A02B6E3 for ; Mon, 12 Nov 2018 19:07:36 -0500 (EST) From: Nikita Pettik Subject: [tarantool-patches] [PATCH v2 0/3] Change collation compatibility rules according to ANSI SQL Date: Tue, 13 Nov 2018 03:07:23 +0300 Message-Id: Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-subscribe: List-owner: List-post: List-archive: To: tarantool-patches@freelists.org Cc: v.shpilevoy@tarantool.org, Nikita Pettik This patch-set introduces rules for collation compatibility in order to restrict usage of different collations within one comparison. Originally, SQLite uses doubtful approach: if collations of LHS and RHS can not be used together, then collation of LHS is chosen. Such behaviour quite misleading and results in the fact that swap of LHS and RHS values may change result of operation. We've decided to add restrictions on collations of LHS and RHS to disallow messing different collations as it is stated in ANSI SQL. Changes in v2: Instead of using surrogate ids for "binary" and "none" collations, now real ones are added to _collation space. They also come with new collation type - binary. It simply uses memcmp as a collation rule. For details see second patch in series. Minor fixes: - Make collations_are_compatible() be collations_check_compatibility() and process diag_set() right there; - Clean-up debug asserts. Nikita Pettik (3): sql: do not add explicit clause Introduce "none" and "binary" collations sql: change collation compatibility rules src/box/alter.cc | 13 ++++- src/box/bootstrap.snap | Bin 1888 -> 1911 bytes src/box/coll_id.c | 1 - src/box/errcode.h | 2 + src/box/field_def.c | 2 +- src/box/key_def.c | 18 +++--- src/box/key_def.h | 6 -- src/box/lua/space.cc | 2 +- src/box/lua/upgrade.lua | 2 + src/box/sql.c | 10 ++-- src/box/sql/build.c | 2 +- src/box/sql/callback.c | 19 +++++-- src/box/sql/expr.c | 73 ++++++++++++++++++------ src/box/sql/fkey.c | 2 - src/box/sql/func.c | 2 +- src/box/sql/select.c | 117 ++++++++++++++++++++------------------ src/box/sql/sqliteInt.h | 28 ++++++++- src/box/sql/where.c | 15 +++-- src/box/sql/whereexpr.c | 38 ++++++------- src/box/tuple_format.c | 4 +- src/coll.c | 52 ++++++++++++++--- src/coll_def.c | 2 +- src/coll_def.h | 1 + test/box/ddl.result | 20 ++++--- test/box/misc.result | 2 + test/box/net.box.result | 2 +- test/sql-tap/collation.test.lua | 12 ++-- test/sql-tap/distinct.test.lua | 2 +- test/sql-tap/e_select1.test.lua | 12 ++-- test/sql-tap/in3.test.lua | 2 +- test/sql-tap/in4.test.lua | 2 +- test/sql-tap/index3.test.lua | 2 +- test/sql-tap/join.test.lua | 2 +- test/sql-tap/tkt3493.test.lua | 4 +- test/sql-tap/transitive1.test.lua | 4 +- test/sql-tap/where2.test.lua | 2 +- test/sql-tap/with1.test.lua | 2 +- test/sql/collation.result | 90 +++++++++++++++++++++++++++++ test/sql/collation.test.lua | 36 ++++++++++++ 39 files changed, 427 insertions(+), 180 deletions(-) -- 2.15.1