From: imeevma@tarantool.org To: v.shpilevoy@tarantool.org, tsafin@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH v2 07/10] sql: move built-in function definitions in _func Date: Fri, 14 Aug 2020 18:05:03 +0300 [thread overview] Message-ID: <1fc825807e36bd97b97a28756b3e9da2c270de5b.1597417321.git.imeevma@gmail.com> (raw) In-Reply-To: <cover.1597417321.git.imeevma@gmail.com> This patch moves SQL built-in function definitions to _func. This helps create an unified way to check the types of arguments. It also allows users to see these definitions. Also, this patch enables overloading for length(), trim(), position() and substr() functions. Part of #4159 --- src/box/bootstrap.snap | Bin 5976 -> 6446 bytes src/box/lua/upgrade.lua | 192 +++++++++++++++++++++++++++++++++ src/box/sql/func.c | 6 -- test/box-py/bootstrap.result | 6 +- test/box/access.result | 2 +- test/box/access.test.lua | 2 +- test/box/access_bin.result | 2 +- test/box/access_bin.test.lua | 2 +- test/box/access_sysview.result | 8 +- test/box/function1.result | 6 +- test/wal_off/func_max.result | 8 +- 11 files changed, 212 insertions(+), 22 deletions(-) diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap index 8bd4f7ce24216a8bcced6aa97c20c83eb7a02c77..17e5e2c65ea977620fae969da73b5449c9227078 100644 GIT binary patch literal 6446 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 IAJq`8?W$`(1ONa4 literal 5976 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 G5UuU4uRFp3 diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua index add791cd7..290741940 100644 --- a/src/box/lua/upgrade.lua +++ b/src/box/lua/upgrade.lua @@ -971,6 +971,197 @@ local function upgrade_to_2_3_1() create_session_settings_space() end +-------------------------------------------------------------------------------- +-- Tarantool 2.5.2 +-------------------------------------------------------------------------------- + +local function update_sql_builtin_functions() + local _func = box.space[box.schema.FUNC_ID] + local _priv = box.space[box.schema.PRIV_ID] + local updates + local datetime = os.date("%Y-%m-%d %H:%M:%S") + local overloaded_function_list = { + "LENGTH_VARBINARY", "POSITION_VARBINARY", "TRIM_VARBINARY", + "SUBSTR_VARBINARY", + } + + for _, v in pairs(overloaded_function_list) do + local t = _func:auto_increment({ADMIN, v, 1, 'SQL_BUILTIN', '', + 'function', {}, 'any', 'none', 'none', + false, false, true, {}, setmap({}), '', + datetime, datetime}) + _priv:replace{ADMIN, PUBLIC, 'function', t.id, box.priv.X} + end + + _func:run_triggers(false) + updates = {{'=', 'param_list', {'number'}}, {'=', 'returns', 'number'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('ABS', updates) + + updates = {{'=', 'param_list', {'number'}}, {'=', 'returns', 'number'}, + {'=', 'aggregate', 'group'}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('AVG', updates) + _func.index[2]:update('SUM', updates) + _func.index[2]:update('TOTAL', updates) + + updates = {{'=', 'param_list', {'unsigned'}}, {'=', 'returns', 'string'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('CHAR', updates) + + updates = {{'=', 'param_list', {'string'}}, {'=', 'returns', 'integer'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('CHARACTER_LENGTH', updates) + _func.index[2]:update('CHAR_LENGTH', updates) + + updates = {{'=', 'param_list', {'string'}}, {'=', 'returns', 'integer'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_overload = true}}} + _func.index[2]:update('LENGTH', updates) + + updates = {{'=', 'param_list', {'varbinary'}}, {'=', 'returns', 'integer'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}, + {'=', 'opts', {is_overloaded = true}}} + _func.index[2]:update('LENGTH_VARBINARY', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'scalar'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('COALESCE', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'integer'}, + {'=', 'aggregate', 'group'}, {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('COUNT', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'scalar'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('GREATEST', updates) + _func.index[2]:update('LEAST', updates) + + updates = {{'=', 'param_list', {'scalar', 'scalar'}}, + {'=', 'returns', 'string'}, {'=', 'aggregate', 'group'}, + {'=', 'exports', {'SQL'}}, {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('GROUP_CONCAT', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'string'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('HEX', updates) + + updates = {{'=', 'param_list', {'scalar', 'scalar'}}, + {'=', 'returns', 'scalar'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}} + _func.index[2]:update('IFNULL', updates) + _func.index[2]:update('NULLIF', updates) + + updates = {{'=', 'param_list', {'string', 'string', 'string'}}, + {'=', 'returns', 'boolean'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('LIKE', updates) + + updates = {{'=', 'param_list', {'scalar', 'double'}}, + {'=', 'returns', 'scalar'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}} + _func.index[2]:update('LIKELIHOOD', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'scalar'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('LIKELY', updates) + _func.index[2]:update('UNLIKELY', updates) + + updates = {{'=', 'param_list', {'string'}}, {'=', 'returns', 'string'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('LOWER', updates) + _func.index[2]:update('SOUNDEX', updates) + _func.index[2]:update('UNICODE', updates) + _func.index[2]:update('UPPER', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'string'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('QUOTE', updates) + _func.index[2]:update('TYPEOF', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'scalar'}, + {'=', 'aggregate', 'group'}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('MAX', updates) + _func.index[2]:update('MIN', updates) + + updates = {{'=', 'param_list', {'string', 'string'}}, + {'=', 'returns', 'integer'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, {'=', 'opts', {has_overload = true}}} + _func.index[2]:update('POSITION', updates) + + updates = {{'=', 'param_list', {'varbinary', 'varbinary'}}, + {'=', 'returns', 'integer'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, {'=', 'opts', {is_overloaded = true}}} + _func.index[2]:update('POSITION_VARBINARY', updates) + + updates = {{'=', 'param_list', {'scalar'}}, {'=', 'returns', 'string'}, + {'=', 'is_deterministic', true}, {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('PRINTF', updates) + + updates = {{'=', 'param_list', {'string', 'unsigned', 'string'}}, + {'=', 'returns', 'string'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true, has_overload = true}}} + _func.index[2]:update('TRIM', updates) + + updates = {{'=', 'param_list', {'varbinary', 'unsigned', 'varbinary'}}, + {'=', 'returns', 'string'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true, is_overloaded = true}}} + _func.index[2]:update('TRIM_VARBINARY', updates) + + updates = {{'=', 'returns', 'integer'}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('RANDOM', updates) + + updates = {{'=', 'returns', 'integer'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}} + _func.index[2]:update('ROW_COUNT', updates) + + updates = {{'=', 'param_list', {'unsigned'}}, + {'=', 'returns', 'varbinary'}, {'=', 'exports', {'SQL'}}} + _func.index[2]:update('RANDOMBLOB', updates) + + updates = {{'=', 'param_list', {'unsigned'}}, + {'=', 'returns', 'varbinary'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}} + _func.index[2]:update('ZEROBLOB', updates) + + updates = {{'=', 'param_list', {'string', 'string', 'string'}}, + {'=', 'returns', 'string'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}} + _func.index[2]:update('REPLACE', updates) + + updates = {{'=', 'param_list', {'double', 'unsigned'}}, + {'=', 'returns', 'double'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, {'=', 'opts', {has_vararg = true}}} + _func.index[2]:update('ROUND', updates) + + updates = {{'=', 'param_list', {'string', 'integer', 'integer'}}, + {'=', 'returns', 'string'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true, has_overload = true}}} + _func.index[2]:update('SUBSTR', updates) + + updates = {{'=', 'param_list', {'varbinary', 'integer', 'integer'}}, + {'=', 'returns', 'string'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}, + {'=', 'opts', {has_vararg = true, is_overloaded = true}}} + _func.index[2]:update('SUBSTR_VARBINARY', updates) + + updates = {{'=', 'returns', 'string'}, {'=', 'is_deterministic', true}, + {'=', 'exports', {'SQL'}}} + _func.index[2]:update('VERSION', updates) + _func:run_triggers(true) +end + +local function upgrade_to_2_5_2() + update_sql_builtin_functions() +end + -------------------------------------------------------------------------------- local function get_version() @@ -1007,6 +1198,7 @@ local function upgrade(options) {version = mkversion(2, 2, 1), func = upgrade_to_2_2_1, auto = true}, {version = mkversion(2, 3, 0), func = upgrade_to_2_3_0, auto = true}, {version = mkversion(2, 3, 1), func = upgrade_to_2_3_1, auto = true}, + {version = mkversion(2, 5, 2), func = upgrade_to_2_5_2, auto = true}, } for _, handler in ipairs(handlers) do diff --git a/src/box/sql/func.c b/src/box/sql/func.c index ae1842824..1fbffa535 100644 --- a/src/box/sql/func.c +++ b/src/box/sql/func.c @@ -2971,12 +2971,6 @@ func_sql_builtin_new(struct func_def *def) func->flags = sql_builtins[idx].flags; func->call = sql_builtins[idx].call; func->finalize = sql_builtins[idx].finalize; - def->param_count = sql_builtins[idx].param_count; - def->is_deterministic = sql_builtins[idx].is_deterministic; - def->returns = sql_builtins[idx].returns; - def->aggregate = sql_builtins[idx].aggregate; - def->exports.sql = sql_builtins[idx].export_to_sql; - def->opts.has_vararg = sql_builtins[idx].param_count == -1; return &func->base; } diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result index 0876e77a6..289289443 100644 --- a/test/box-py/bootstrap.result +++ b/test/box-py/bootstrap.result @@ -4,7 +4,7 @@ box.internal.bootstrap() box.space._schema:select{} --- - - ['max_id', 511] - - ['version', 2, 3, 1] + - ['version', 2, 5, 2] ... box.space._cluster:select{} --- @@ -242,6 +242,10 @@ box.space._priv:select{} - [1, 2, 'function', 65, 4] - [1, 2, 'function', 66, 4] - [1, 2, 'function', 67, 4] + - [1, 2, 'function', 68, 4] + - [1, 2, 'function', 69, 4] + - [1, 2, 'function', 70, 4] + - [1, 2, 'function', 71, 4] - [1, 2, 'space', 276, 2] - [1, 2, 'space', 277, 1] - [1, 2, 'space', 281, 1] diff --git a/test/box/access.result b/test/box/access.result index 20b1b8b35..b72fa8b02 100644 --- a/test/box/access.result +++ b/test/box/access.result @@ -703,7 +703,7 @@ box.schema.func.exists(1) --- - true ... -box.schema.func.exists(68) +box.schema.func.exists(72) --- - false ... diff --git a/test/box/access.test.lua b/test/box/access.test.lua index 3e083a383..759d0a94f 100644 --- a/test/box/access.test.lua +++ b/test/box/access.test.lua @@ -282,7 +282,7 @@ box.schema.user.exists{} box.schema.func.exists('nosuchfunc') box.schema.func.exists('guest') box.schema.func.exists(1) -box.schema.func.exists(68) +box.schema.func.exists(72) box.schema.func.exists('box.schema.user.info') box.schema.func.exists() box.schema.func.exists(nil) diff --git a/test/box/access_bin.result b/test/box/access_bin.result index c58f331d3..d345e5996 100644 --- a/test/box/access_bin.result +++ b/test/box/access_bin.result @@ -298,7 +298,7 @@ box.schema.user.grant('guest', 'execute', 'universe') function f1() return box.space._func:get(1)[4] end --- ... -function f2() return box.space._func:get(68)[4] end +function f2() return box.space._func:get(72)[4] end --- ... box.schema.func.create('f1') diff --git a/test/box/access_bin.test.lua b/test/box/access_bin.test.lua index 41d5f4245..13d8041a9 100644 --- a/test/box/access_bin.test.lua +++ b/test/box/access_bin.test.lua @@ -112,7 +112,7 @@ test:drop() -- notice that guest can execute stuff, but can't read space _func box.schema.user.grant('guest', 'execute', 'universe') function f1() return box.space._func:get(1)[4] end -function f2() return box.space._func:get(68)[4] end +function f2() return box.space._func:get(72)[4] end box.schema.func.create('f1') box.schema.func.create('f2',{setuid=true}) c = net.connect(box.cfg.listen) diff --git a/test/box/access_sysview.result b/test/box/access_sysview.result index 799d19f03..f9ffae127 100644 --- a/test/box/access_sysview.result +++ b/test/box/access_sysview.result @@ -258,11 +258,11 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 82 +- 86 ... #box.space._vfunc:select{} --- -- 67 +- 71 ... #box.space._vcollation:select{} --- @@ -290,11 +290,11 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 82 +- 86 ... #box.space._vfunc:select{} --- -- 67 +- 71 ... #box.space._vsequence:select{} --- diff --git a/test/box/function1.result b/test/box/function1.result index 928cd5758..3cce0f4e2 100644 --- a/test/box/function1.result +++ b/test/box/function1.result @@ -97,7 +97,7 @@ box.func["function1.args"] exports: lua: true sql: false - id: 68 + id: 72 setuid: false is_multikey: false is_deterministic: false @@ -593,7 +593,7 @@ func exports: lua: true sql: false - id: 68 + id: 72 setuid: false is_multikey: false is_deterministic: false @@ -665,7 +665,7 @@ func exports: lua: true sql: false - id: 68 + id: 72 setuid: false is_multikey: false is_deterministic: false diff --git a/test/wal_off/func_max.result b/test/wal_off/func_max.result index 78db38d6b..1aef99c66 100644 --- a/test/wal_off/func_max.result +++ b/test/wal_off/func_max.result @@ -42,11 +42,11 @@ test_run:cmd("setopt delimiter ''"); ... func_limit() --- -- error: 'Failed to create function ''func31934'': function id is too big' +- error: 'Failed to create function ''func31930'': function id is too big' ... drop_limit_func() --- -- error: Function 'func31934' does not exist +- error: Function 'func31930' does not exist ... box.schema.user.create('testuser') --- @@ -62,11 +62,11 @@ session.su('testuser') ... func_limit() --- -- error: 'Failed to create function ''func31934'': function id is too big' +- error: 'Failed to create function ''func31930'': function id is too big' ... drop_limit_func() --- -- error: Function 'func31934' does not exist +- error: Function 'func31930' does not exist ... session.su('admin') --- -- 2.25.1
next prev parent reply other threads:[~2020-08-14 15:05 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-14 15:04 [Tarantool-patches] [PATCH v2 00/10] sql: properly check arguments types of built-in functions imeevma 2020-08-14 15:04 ` [Tarantool-patches] [PATCH v2 01/10] sql: do not return UNSIGNED in " imeevma 2020-08-22 14:23 ` Vladislav Shpilevoy 2020-08-14 15:04 ` [Tarantool-patches] [PATCH v2 02/10] sql: fix functions return types imeevma 2020-08-22 14:24 ` Vladislav Shpilevoy 2020-08-14 15:04 ` [Tarantool-patches] [PATCH v2 03/10] sql: change signature of trim() imeevma 2020-08-22 14:26 ` Vladislav Shpilevoy 2020-08-14 15:04 ` [Tarantool-patches] [PATCH v2 04/10] box: add new options for functions imeevma 2020-08-22 14:28 ` Vladislav Shpilevoy 2020-08-14 15:05 ` [Tarantool-patches] [PATCH v2 05/10] sql: use has_vararg for built-in functions imeevma 2020-08-14 15:05 ` [Tarantool-patches] [PATCH v2 06/10] sql: add overloaded versions of the functions imeevma 2020-08-22 14:29 ` Vladislav Shpilevoy 2020-08-14 15:05 ` imeevma [this message] 2020-08-22 14:30 ` [Tarantool-patches] [PATCH v2 07/10] sql: move built-in function definitions in _func Vladislav Shpilevoy 2020-08-14 15:05 ` [Tarantool-patches] [PATCH v2 08/10] box: add param_list to 'struct func' imeevma 2020-08-22 14:30 ` Vladislav Shpilevoy 2020-08-14 15:05 ` [Tarantool-patches] [PATCH v2 09/10] sql: check built-in functions argument types imeevma 2020-08-14 15:05 ` [Tarantool-patches] [PATCH v2 10/10] sql: refactor sql/func.c imeevma 2020-08-22 14:31 ` Vladislav Shpilevoy 2020-08-22 14:25 ` [Tarantool-patches] [PATCH v2 00/10] sql: properly check arguments types of built-in functions Vladislav Shpilevoy
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=1fc825807e36bd97b97a28756b3e9da2c270de5b.1597417321.git.imeevma@gmail.com \ --to=imeevma@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=tsafin@tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v2 07/10] sql: move built-in function definitions in _func' \ /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