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 22B692064D for ; Wed, 10 Jul 2019 07:01:16 -0400 (EDT) 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 Ag6XJWJZ2xTG for ; Wed, 10 Jul 2019 07:01:16 -0400 (EDT) Received: from smtp60.i.mail.ru (smtp60.i.mail.ru [217.69.128.40]) (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 C8848248C8 for ; Wed, 10 Jul 2019 07:01:15 -0400 (EDT) From: Kirill Shcherbatov Subject: [tarantool-patches] [PATCH v2 05/12] sql: replace bool is_derived_coll marker with flag Date: Wed, 10 Jul 2019 14:01:04 +0300 Message-Id: <60aa4444f13d2a91d4b5f3a2b5b3052b87c94a0e.1562756438.git.kshcherbatov@tarantool.org> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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, korablev@tarantool.org Cc: kostja@tarantool.org, Kirill Shcherbatov Introduce a new flag SQL_FUNC_DERIVEDCOLL for function that may require collation to be applied on its result instead of separate boolean variable. This is required to get rid of FuncDef in further patches. Needed for #4113, #2200, #2233 --- src/box/sql/expr.c | 2 +- src/box/sql/sqlInt.h | 34 +++++++++++++++++----------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c index 20e490b96..7ee3e992e 100644 --- a/src/box/sql/expr.c +++ b/src/box/sql/expr.c @@ -280,7 +280,7 @@ sql_expr_coll(Parse *parse, Expr *p, bool *is_explicit_coll, uint32_t *coll_id, arg_count, 0); if (func == NULL) break; - if (func->is_coll_derived) { + if ((func->funcFlags & SQL_FUNC_DERIVEDCOLL) != 0) { /* * Now we use quite straightforward * approach assuming that resulting diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h index 7bcbb4eb1..d6a46e534 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -1229,13 +1229,6 @@ struct FuncDef { } u; /* Return type. */ enum field_type ret_type; - /** - * If function returns string, it may require collation - * to be applied on its result. For instance, result of - * substr() built-in function must have the same collation - * as its first argument. - */ - bool is_coll_derived; }; /* @@ -1283,6 +1276,13 @@ struct FuncDestructor { #define SQL_FUNC_TYPEOF 0x0080 /* Built-in typeof() function */ #define SQL_FUNC_COUNT 0x0100 /* Built-in count(*) aggregate */ #define SQL_FUNC_COALESCE 0x0200 /* Built-in coalesce() or ifnull() */ +/** + * If function returns string, it may require collation to be + * applied on its result. For instance, result of substr() + * built-in function must have the same collation as its first + * argument. + */ +#define SQL_FUNC_DERIVEDCOLL 0x0400 #define SQL_FUNC_CONSTANT 0x0800 /* Constant inputs give a constant output */ #define SQL_FUNC_MINMAX 0x1000 /* True for min() and max() aggregates */ #define SQL_FUNC_SLOCHNG 0x2000 /* "Slow Change". Value constant during a @@ -1340,31 +1340,31 @@ enum trim_side_mask { */ #define FUNCTION(zName, nArg, iArg, bNC, xFunc, type) \ {nArg, SQL_FUNC_CONSTANT|(bNC*SQL_FUNC_NEEDCOLL), \ - SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type, false} + SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type} #define FUNCTION_COLL(zName, nArg, iArg, bNC, xFunc) \ - {nArg, SQL_FUNC_CONSTANT|(bNC*SQL_FUNC_NEEDCOLL), \ - SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, FIELD_TYPE_STRING, true} + {nArg, SQL_FUNC_CONSTANT|SQL_FUNC_DERIVEDCOLL|(bNC*SQL_FUNC_NEEDCOLL), \ + SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, FIELD_TYPE_STRING} #define VFUNCTION(zName, nArg, iArg, bNC, xFunc, type) \ {nArg, (bNC*SQL_FUNC_NEEDCOLL), \ - SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type, false } + SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type} #define DFUNCTION(zName, nArg, iArg, bNC, xFunc, type) \ {nArg, SQL_FUNC_SLOCHNG|(bNC*SQL_FUNC_NEEDCOLL), \ - SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type, false } + SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type} #define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags, type) \ {nArg,SQL_FUNC_CONSTANT|(bNC*SQL_FUNC_NEEDCOLL)|extraFlags,\ - SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type, false } + SQL_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0}, type} #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ {nArg, SQL_FUNC_SLOCHNG|(bNC*SQL_FUNC_NEEDCOLL), \ - pArg, 0, xFunc, 0, #zName, {SQL_AFF_STRING, {0}}, false} + pArg, 0, xFunc, 0, #zName, {SQL_AFF_STRING, {0}}} #define LIKEFUNC(zName, nArg, arg, flags, type) \ {nArg, SQL_FUNC_CONSTANT|flags, \ - (void *)(SQL_INT_TO_PTR(arg)), 0, likeFunc, 0, #zName, {0}, type, false } + (void *)(SQL_INT_TO_PTR(arg)), 0, likeFunc, 0, #zName, {0}, type} #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal, type) \ {nArg, (nc*SQL_FUNC_NEEDCOLL), \ - SQL_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}, type, false} + SQL_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}, type} #define AGGREGATE2(zName, nArg, arg, nc, xStep, xFinal, extraFlags, type) \ {nArg, (nc*SQL_FUNC_NEEDCOLL)|extraFlags, \ - SQL_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}, type, false} + SQL_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}, type} /* * All current savepoints are stored in a linked list starting at -- 2.21.0