Tarantool development patches archive
 help / color / mirror / Atom feed
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)

             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