[tarantool-patches] [PATCH v2 05/12] sql: replace bool is_derived_coll marker with flag

Kirill Shcherbatov kshcherbatov at tarantool.org
Wed Jul 10 14:01:04 MSK 2019


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





More information about the Tarantool-patches mailing list