From: Nikita Pettik <korablev@tarantool.org> To: tarantool-patches@freelists.org Cc: v.shpilevoy@tarantool.org, Nikita Pettik <korablev@tarantool.org> Subject: [tarantool-patches] [PATCH] sql: set name for expressions in the list in form of VALUES(...) Date: Tue, 4 Dec 2018 01:02:14 +0300 [thread overview] Message-ID: <20181203220214.81783-1-korablev@tarantool.org> (raw) If VIEW contains constant fields (e.g. CREATE VIEW v AS SELECT 1, 'k';) it uses string representation of literal as a field name. In the example above it would be '1' and 'k'. However, if VIEW is created using AS VALUES syntax, then expressions representing constant literals lack of names (since span-expression is not assigned in this case). Lets patch parser to avoid such defect. Closes #3849 --- Note that this is first variant of fixing #3849 isssue. The second one is going to be send as a separate patch as well. They are both equal and fixing problem. Branch: https://github.com/tarantool/tarantool/commits/np/gh-3849-view-constant-value-v1 Issue: https://github.com/tarantool/tarantool/issues/3849 src/box/sql/parse.y | 12 ++++++++---- test/sql/view.result | 26 ++++++++++++++++++++++++++ test/sql/view.test.lua | 12 ++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y index 6dfc81f70..bca2daf03 100644 --- a/src/box/sql/parse.y +++ b/src/box/sql/parse.y @@ -1194,10 +1194,14 @@ case_operand(A) ::= . {A = 0;} exprlist(A) ::= nexprlist(A). exprlist(A) ::= . {A = 0;} -nexprlist(A) ::= nexprlist(A) COMMA expr(Y). - {A = sql_expr_list_append(pParse->db,A,Y.pExpr);} -nexprlist(A) ::= expr(Y). - {A = sql_expr_list_append(pParse->db,NULL,Y.pExpr); /*A-overwrites-Y*/} +nexprlist(A) ::= nexprlist(A) COMMA expr(Y). { + A = sql_expr_list_append(pParse->db,A,Y.pExpr); + sqlite3ExprListSetSpan(pParse, A, &Y); +} +nexprlist(A) ::= expr(Y). { + A = sql_expr_list_append(pParse->db,NULL,Y.pExpr); + sqlite3ExprListSetSpan(pParse, A, &Y); +} /* A paren_exprlist is an optional expression list contained inside ** of parenthesis */ diff --git a/test/sql/view.result b/test/sql/view.result index b211bcb2e..818227741 100644 --- a/test/sql/view.result +++ b/test/sql/view.result @@ -148,6 +148,32 @@ box.sql.execute("DROP VIEW v2;"); box.sql.execute("DROP TABLE t2;"); --- ... +-- gh-3849: failed to create VIEW in form of AS VALUES (const); +-- +box.sql.execute("CREATE VIEW cv AS VALUES(1);") +--- +... +box.sql.execute("CREATE VIEW cv1 AS VALUES('k', 1);") +--- +... +box.sql.execute("CREATE VIEW cv2 AS VALUES((VALUES((SELECT 1))));") +--- +... +box.sql.execute("CREATE VIEW cv3 AS VALUES(1+2, 1+2);") +--- +... +box.sql.execute("DROP VIEW cv;") +--- +... +box.sql.execute("DROP VIEW cv1;") +--- +... +box.sql.execute("DROP VIEW cv2;") +--- +... +box.sql.execute("DROP VIEW cv3;") +--- +... -- Cleanup box.sql.execute("DROP VIEW v1;"); --- diff --git a/test/sql/view.test.lua b/test/sql/view.test.lua index a6269a1bf..3b6f2aebe 100644 --- a/test/sql/view.test.lua +++ b/test/sql/view.test.lua @@ -65,6 +65,18 @@ box.sql.execute("DROP TABLE t2;"); box.sql.execute("DROP VIEW v2;"); box.sql.execute("DROP TABLE t2;"); +-- gh-3849: failed to create VIEW in form of AS VALUES (const); +-- +box.sql.execute("CREATE VIEW cv AS VALUES(1);") +box.sql.execute("CREATE VIEW cv1 AS VALUES('k', 1);") +box.sql.execute("CREATE VIEW cv2 AS VALUES((VALUES((SELECT 1))));") +box.sql.execute("CREATE VIEW cv3 AS VALUES(1+2, 1+2);") + +box.sql.execute("DROP VIEW cv;") +box.sql.execute("DROP VIEW cv1;") +box.sql.execute("DROP VIEW cv2;") +box.sql.execute("DROP VIEW cv3;") + -- Cleanup box.sql.execute("DROP VIEW v1;"); box.sql.execute("DROP TABLE t1;"); -- 2.15.1
reply other threads:[~2018-12-03 22:02 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20181203220214.81783-1-korablev@tarantool.org \ --to=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [tarantool-patches] [PATCH] sql: set name for expressions in the list in form of VALUES(...)' \ /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