From: Roman Khabibov <roman.habibov@tarantool.org> To: tarantool-patches@freelists.org Cc: korablev@tarantool.org Subject: [tarantool-patches] [PATCH] sql: add check for <WITH> absence in <CREATE VIEW> Date: Fri, 2 Aug 2019 15:52:52 +0300 [thread overview] Message-ID: <20190802125252.54621-1-roman.habibov@tarantool.org> (raw) Check that <CREATE VIEW> hasn't <WITH> after <AS>: "CREATE VIEW v AS WITH ... SELECT ...". Throw error, if it has. Closes #4149 --- Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-4149-view Issue: https://github.com/tarantool/tarantool/issues/4149 src/box/sql/build.c | 7 +++++++ test/sql-tap/view.test.lua | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/box/sql/build.c b/src/box/sql/build.c index ccec10543..e34202c9a 100644 --- a/src/box/sql/build.c +++ b/src/box/sql/build.c @@ -1320,6 +1320,13 @@ sql_create_view(struct Parse *parse_context) &create_entity_def->name); if (space == NULL || parse_context->is_aborted) goto create_view_fail; + assert(view_def->select != NULL); + if (view_def->select->pWith != NULL) { + diag_set(ClientError, ER_CREATE_SPACE, space->def->name, + "can't create view as <WITH>"); + parse_context->is_aborted = true; + goto create_view_fail; + } struct space *select_res_space = sqlResultSetOfSelect(parse_context, view_def->select); if (select_res_space == NULL) diff --git a/test/sql-tap/view.test.lua b/test/sql-tap/view.test.lua index 101f4c3e7..a554c17a7 100755 --- a/test/sql-tap/view.test.lua +++ b/test/sql-tap/view.test.lua @@ -1,6 +1,6 @@ #!/usr/bin/env tarantool test = require("sqltester") -test:plan(73) +test:plan(76) --!./tcltestrunner.lua -- 2002 February 26 @@ -1233,4 +1233,39 @@ test:do_catchsql_test( -- </view-23.8> }) +-- gh-4149: Check error message for "CREATE VIEW v AS WITH ... +-- SELECT ...". +test:do_execsql_test( + "view-24.1", + [[ + CREATE TABLE ts (s1 INT PRIMARY KEY); + INSERT INTO ts VALUES (1); + ]], { + -- <view-24.1> + -- </view-24.1> + }) + +test:do_catchsql_test( + "view-24.2", + [[ + CREATE VIEW v AS WITH RECURSIVE w AS ( + SELECT s1 FROM ts + UNION ALL + SELECT s1+1 FROM w WHERE s1 < 4) + SELECT * FROM w; + ]], { + -- <view-24.2> + 1,"Failed to create space 'V': can't create view as <WITH>" + -- </view-24.2> + }) + +test:do_execsql_test( + "view-24.3", + [[ + DROP TABLE ts + ]], { + -- <view-24.3> + -- </view-24.3> + }) + test:finish_test() -- 2.20.1 (Apple Git-117)
next reply other threads:[~2019-08-02 12:52 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-02 12:52 Roman Khabibov [this message] 2019-08-09 15:15 ` [tarantool-patches] " n.pettik 2019-08-13 12:42 ` Roman Khabibov 2019-08-13 22:10 ` n.pettik 2019-08-16 19:09 ` Roman Khabibov 2019-08-19 15:39 ` Roman Khabibov 2019-08-20 19:41 ` n.pettik 2019-08-28 12:17 ` Roman Khabibov 2019-08-29 17:59 ` Nikita Pettik 2019-09-04 14:14 ` Roman Khabibov 2019-09-11 13:32 ` Nikita Pettik 2019-09-13 14:57 ` Roman Khabibov
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=20190802125252.54621-1-roman.habibov@tarantool.org \ --to=roman.habibov@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [tarantool-patches] [PATCH] sql: add check for <WITH> absence in <CREATE VIEW>' \ /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