[tarantool-patches] [PATCH] sql: add check for <WITH> absence in <CREATE VIEW>
Roman Khabibov
roman.habibov at tarantool.org
Fri Aug 2 15:52:52 MSK 2019
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)
More information about the Tarantool-patches
mailing list