From: Nikita Pettik <korablev@tarantool.org>
To: tarantool-patches@freelists.org
Cc: Kirill Shcherbatov <kshcherbatov@tarantool.org>
Subject: [tarantool-patches] Re: [PATCH v2 3/3] sql: use name instead of function pointer for UDF
Date: Thu, 12 Sep 2019 15:13:55 +0300 [thread overview]
Message-ID: <20190912121352.GB92833@tarantool.org> (raw)
In-Reply-To: <68b5bf44a11ea134d4a3a52f2086aa9ea640e729.1568275504.git.kshcherbatov@tarantool.org>
On 12 Sep 11:06, Kirill Shcherbatov wrote:
> This patch changes OP_Function parameters convention: now a
> function's name is passed instead of pointer to the function
> object. This allows to normally handle the situation, when UDF
> had been deleted to the moment of the VDBE code execution.
Nit: has been deleted.
> In particular case this may happen with CK constraints that
> refer to a persistent function.
-> refer to a deleted persistent function (?).
> ---
> src/box/sql/expr.c | 17 ++++++++++++-----
> src/box/sql/vdbe.c | 17 +++++++++++------
> src/box/sql/vdbe.h | 1 +
> test/sql/checks.result | 10 +++++++---
> test/sql/checks.test.lua | 3 ++-
> 5 files changed, 33 insertions(+), 15 deletions(-)
>
> diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
> index 6d5ad2a27..04c9393be 100644
> --- a/src/box/sql/expr.c
> +++ b/src/box/sql/expr.c
> @@ -4136,11 +4136,18 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target)
> sqlVdbeAddOp4(v, OP_CollSeq, 0, 0, 0,
> (char *)coll, P4_COLLSEQ);
> }
> - int op = func->def->language ==
> - FUNC_LANGUAGE_SQL_BUILTIN ?
> - OP_BuiltinFunction0 : OP_Function;
> - sqlVdbeAddOp4(v, op, constMask, r1, target,
> - (char *)func, P4_FUNC);
> + if (func->def->language == FUNC_LANGUAGE_SQL_BUILTIN) {
> + sqlVdbeAddOp4(v, OP_BuiltinFunction0, constMask,
> + r1, target, (char *)func,
> + P4_FUNC);
> + } else {
> + sqlVdbeAddOp4(v, OP_Function,
> + func->def->name_len, r1, target,
Why not null-terminate function's name? Then you don't have to deal
with name's length.
> + sqlDbStrNDup(sql_get(),
Nit: you can use pParse->db.
> diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
> index 02e16da19..4c6245348 100644
> --- a/src/box/sql/vdbe.c
> +++ b/src/box/sql/vdbe.c
> @@ -1795,16 +1795,21 @@ case OP_BuiltinFunction: {
> break;
> }
>
> -/* Opcode: Function * P2 P3 P4 P5
> +/* Opcode: Function P1 P2 P3 P4 P5
> * Synopsis: r[P3]=func(r[P2@P5])
> *
> - * Invoke a user function (P4 is a pointer to a function object
> - * that defines the function) with P5 arguments taken from
> - * register P2 and successors. The result of the function is
> - * stored in register P3.
> + * Invoke a user function (P4 is a name of the function while P1
> + * is a function name length) with P5 arguments taken from register P2 and
Nit: out of 72 :)
> + * successors. The result of the function is stored in
> + * register P3.
> */
> case OP_Function: {
> - struct func *func = pOp->p4.func;
> + assert(pOp->p4type == P4_DYNAMIC);
> + struct func *func = func_by_name(pOp->p4.z, pOp->p1);
> + if (unlikely(func == NULL)) {
> + diag_set(ClientError, ER_NO_SUCH_FUNCTION, pOp->p4.z);
> + goto abort_due_to_error;
> + }
> int argc = pOp->p5;
> struct Mem *argv = &aMem[pOp->p2];
> struct port args, ret;
> diff --git a/src/box/sql/vdbe.h b/src/box/sql/vdbe.h
> index 29ff99867..e57d7f979 100644
> --- a/src/box/sql/vdbe.h
> +++ b/src/box/sql/vdbe.h
> @@ -128,6 +128,7 @@ struct SubProgram {
> #define P4_COLLSEQ (-3) /* P4 is a pointer to a CollSeq structure */
> /** P4 is a pointer to a func structure. */
> #define P4_FUNC (-4)
> +/** P4 is a function identifier. */
Nit: redundant diff.
prev parent reply other threads:[~2019-09-12 12:13 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-12 8:06 [tarantool-patches] [PATCH v2 0/3] sql: fixes for ck constraints involving a function Kirill Shcherbatov
2019-09-12 8:06 ` [tarantool-patches] [PATCH v2 1/3] box: an ability to disable CK constraints Kirill Shcherbatov
2019-09-12 14:00 ` [tarantool-patches] " Nikita Pettik
2019-09-12 14:15 ` Kirill Shcherbatov
2019-09-12 8:06 ` [tarantool-patches] [PATCH v2 2/3] sql: disallow ck using non-persistent function Kirill Shcherbatov
2019-09-12 11:54 ` [tarantool-patches] " Nikita Pettik
2019-09-12 8:06 ` [tarantool-patches] [PATCH v2 3/3] sql: use name instead of function pointer for UDF Kirill Shcherbatov
2019-09-12 12:13 ` Nikita Pettik [this message]
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=20190912121352.GB92833@tarantool.org \
--to=korablev@tarantool.org \
--cc=kshcherbatov@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='[tarantool-patches] Re: [PATCH v2 3/3] sql: use name instead of function pointer for UDF' \
/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