From: Konstantin Osipov <kostja@tarantool.org> To: tarantool-patches@freelists.org Cc: korablev@tarantool.org, Kirill Shcherbatov <kshcherbatov@tarantool.org> Subject: [tarantool-patches] Re: [PATCH v1 2/4] sql: disallow use of TYPEOF in Check Date: Fri, 18 Jan 2019 21:04:17 +0300 [thread overview] Message-ID: <20190118180417.GB24439@chai> (raw) In-Reply-To: <467d962bb970e77481307b7e73892e35c1a6601f.1547128310.git.kshcherbatov@tarantool.org> * Kirill Shcherbatov <kshcherbatov@tarantool.org> [19/01/10 23:12]: > Due to the fact that we are going to perform CHECKs validations > on the server side, checks are performed on the fields with > affinity already applied that may differ with type of original > data. > After the introduction of static types, the need for type checks > based on the CHECKs disappeared. > > Need for #3691 > --- > src/box/sql/build.c | 23 ++++++++++ > test/sql-tap/check.test.lua | 89 ++----------------------------------- > 2 files changed, 26 insertions(+), 86 deletions(-) > > diff --git a/src/box/sql/build.c b/src/box/sql/build.c > index 7e5bcc518..9c6b1b49a 100644 > --- a/src/box/sql/build.c > +++ b/src/box/sql/build.c > @@ -756,12 +756,35 @@ primary_key_exit: > return; > } > > +static int > +sql_check_expr_test_callback(struct Walker *walker, struct Expr *expr) > +{ > + if (expr->op == TK_FUNCTION && strcmp(expr->u.zToken, "TYPEOF") == 0) { > + diag_set(ClientError, ER_SQL, "TYPEOF function is forbidden " > + "for usage in Check constraint"); > + walker->eCode = 1; > + return WRC_Abort; > + } > + return WRC_Continue; > +} This callback needs a comment. All functions need a comment, even static ones. A commonly accepted abbreviation for callbacks is _cb ending. A better option for function name would be ck_constraint_walk_expr_cb. Please reply to my questions in previous emails. > void > sql_add_check_constraint(struct Parse *parser, struct ExprSpan *span) > { > struct Expr *expr = span->pExpr; > struct Table *table = parser->pNewTable; > if (table != NULL) { > + /* Test if Check expression valid. */ is valid. valid is a general term. What problems specifically are you looking for? What is forbidden in a check expression? please add a better comment. > + struct Walker w; > + memset(&w, 0, sizeof(w)); > + w.xExprCallback = sql_check_expr_test_callback; > + sqlite3WalkExpr(&w, expr); > + if (w.eCode != 0) { > + parser->rc = SQL_TARANTOOL_ERROR; > + parser->nErr++; > + goto release_expr; > + } > + I don't understand the premise for this code. Why do yo uneed a separate walker, aren't these expressions checked already someplace else in the code? -- Konstantin Osipov, Moscow, Russia, +7 903 626 22 32 http://tarantool.io - www.twitter.com/kostja_osipov
next prev parent reply other threads:[~2019-01-18 18:04 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-10 13:54 [tarantool-patches] [PATCH v1 0/4] sql: Checks on server side Kirill Shcherbatov 2019-01-10 13:54 ` [tarantool-patches] [PATCH v1 1/4] box: rename space->opts checks to checks_ast Kirill Shcherbatov 2019-01-11 14:05 ` [tarantool-patches] " Konstantin Osipov 2019-01-18 18:00 ` Konstantin Osipov 2019-01-10 13:54 ` [tarantool-patches] [PATCH v1 2/4] sql: disallow use of TYPEOF in Check Kirill Shcherbatov 2019-01-11 14:06 ` [tarantool-patches] " Konstantin Osipov 2019-01-11 14:07 ` Konstantin Osipov 2019-01-18 18:04 ` Konstantin Osipov [this message] 2019-01-10 13:54 ` [tarantool-patches] [PATCH v1 3/4] box: exported sql_bind structure and API Kirill Shcherbatov 2019-01-10 13:54 ` [tarantool-patches] [PATCH v1 4/4] sql: make sql checks on server side Kirill Shcherbatov 2019-01-11 14:12 ` [tarantool-patches] " Konstantin Osipov 2019-01-11 14:14 ` Konstantin Osipov 2019-01-18 18:11 ` Konstantin Osipov 2019-01-21 14:47 ` n.pettik
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=20190118180417.GB24439@chai \ --to=kostja@tarantool.org \ --cc=korablev@tarantool.org \ --cc=kshcherbatov@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='[tarantool-patches] Re: [PATCH v1 2/4] sql: disallow use of TYPEOF in Check' \ /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