|
|
d22c23 |
From ff5f246e41239cc4dd33ffa73883fa07f78674e1 Mon Sep 17 00:00:00 2001
|
|
|
d22c23 |
From: Ondrej Dubaj <odubaj@redhat.com>
|
|
|
d22c23 |
Date: Fri, 7 Aug 2020 07:00:29 +0200
|
|
|
d22c23 |
Subject: [PATCH] Do not attempt to unwind the WITH stack in the Parse object
|
|
|
d22c23 |
following an error.
|
|
|
d22c23 |
|
|
|
d22c23 |
---
|
|
|
d22c23 |
src/select.c | 5 ++++-
|
|
|
d22c23 |
src/util.c | 1 +
|
|
|
d22c23 |
test/altertab2.test | 20 ++++++++++++++++++++
|
|
|
d22c23 |
test/with3.test | 10 +++++++++-
|
|
|
d22c23 |
4 files changed, 34 insertions(+), 2 deletions(-)
|
|
|
d22c23 |
|
|
|
d22c23 |
diff --git a/src/select.c b/src/select.c
|
|
|
d22c23 |
index c46f177..a6d1757 100644
|
|
|
d22c23 |
--- a/src/select.c
|
|
|
d22c23 |
+++ b/src/select.c
|
|
|
d22c23 |
@@ -4639,6 +4639,9 @@ static int withExpand(
|
|
|
d22c23 |
With *pWith; /* WITH clause that pCte belongs to */
|
|
|
d22c23 |
|
|
|
d22c23 |
assert( pFrom->pTab==0 );
|
|
|
d22c23 |
+ if( pParse->nErr ){
|
|
|
d22c23 |
+ return SQLITE_ERROR;
|
|
|
d22c23 |
+ }
|
|
|
d22c23 |
|
|
|
d22c23 |
pCte = searchWith(pParse->pWith, pFrom, &pWith);
|
|
|
d22c23 |
if( pCte ){
|
|
|
d22c23 |
@@ -4908,7 +4911,7 @@ static int selectExpander(Walker *pWalker, Select *p){
|
|
|
d22c23 |
|
|
|
d22c23 |
/* Process NATURAL keywords, and ON and USING clauses of joins.
|
|
|
d22c23 |
*/
|
|
|
d22c23 |
- if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){
|
|
|
d22c23 |
+ if( pParse->nErr || db->mallocFailed || sqliteProcessJoin(pParse, p) ){
|
|
|
d22c23 |
return WRC_Abort;
|
|
|
d22c23 |
}
|
|
|
d22c23 |
|
|
|
d22c23 |
diff --git a/src/util.c b/src/util.c
|
|
|
d22c23 |
index 54f9b93..96b0b14 100644
|
|
|
d22c23 |
--- a/src/util.c
|
|
|
d22c23 |
+++ b/src/util.c
|
|
|
d22c23 |
@@ -222,6 +222,7 @@ void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
|
|
|
d22c23 |
sqlite3DbFree(db, pParse->zErrMsg);
|
|
|
d22c23 |
pParse->zErrMsg = zMsg;
|
|
|
d22c23 |
pParse->rc = SQLITE_ERROR;
|
|
|
d22c23 |
+ pParse->pWith = 0;
|
|
|
d22c23 |
}
|
|
|
d22c23 |
}
|
|
|
d22c23 |
|
|
|
d22c23 |
diff --git a/test/altertab2.test b/test/altertab2.test
|
|
|
d22c23 |
index 2e4212c..2102e02 100644
|
|
|
d22c23 |
--- a/test/altertab2.test
|
|
|
d22c23 |
+++ b/test/altertab2.test
|
|
|
d22c23 |
@@ -85,5 +85,25 @@ do_execsql_test 2.3 {
|
|
|
d22c23 |
{CREATE TABLE c3(x, FOREIGN KEY (x) REFERENCES "p3"(a))}
|
|
|
d22c23 |
}
|
|
|
d22c23 |
|
|
|
d22c23 |
+#------------------------------------------------------------------------
|
|
|
d22c23 |
+#
|
|
|
d22c23 |
+reset_db
|
|
|
d22c23 |
+do_execsql_test 3.0 {
|
|
|
d22c23 |
+ CREATE TABLE v0 (a);
|
|
|
d22c23 |
+ CREATE VIEW v2 (v3) AS
|
|
|
d22c23 |
+ WITH x1 AS (SELECT * FROM v2)
|
|
|
d22c23 |
+ SELECT v3 AS x, v3 AS y FROM v2;
|
|
|
d22c23 |
+}
|
|
|
d22c23 |
+
|
|
|
d22c23 |
+do_catchsql_test 3.1 {
|
|
|
d22c23 |
+ SELECT * FROM v2
|
|
|
d22c23 |
+} {1 {view v2 is circularly defined}}
|
|
|
d22c23 |
+
|
|
|
d22c23 |
+db close
|
|
|
d22c23 |
+sqlite3 db test.db
|
|
|
d22c23 |
+
|
|
|
d22c23 |
+do_catchsql_test 3.2 {
|
|
|
d22c23 |
+ ALTER TABLE v0 RENAME TO t3 ;
|
|
|
d22c23 |
+} {1 {error in view v2: view v2 is circularly defined}}
|
|
|
d22c23 |
|
|
|
d22c23 |
finish_test
|
|
|
d22c23 |
diff --git a/test/with3.test b/test/with3.test
|
|
|
d22c23 |
index de150b1..4a3a5a7 100644
|
|
|
d22c23 |
--- a/test/with3.test
|
|
|
d22c23 |
+++ b/test/with3.test
|
|
|
d22c23 |
@@ -30,7 +30,15 @@ do_catchsql_test 1.0 {
|
|
|
d22c23 |
SELECT 5 FROM t0 UNION SELECT 8 FROM m
|
|
|
d22c23 |
)
|
|
|
d22c23 |
SELECT * FROM i;
|
|
|
d22c23 |
-} {1 {no such table: m}}
|
|
|
d22c23 |
+} {1 {no such table: t0}}
|
|
|
d22c23 |
+
|
|
|
d22c23 |
+# 2019-11-09 dbfuzzcheck find
|
|
|
d22c23 |
+do_catchsql_test 1.1 {
|
|
|
d22c23 |
+ CREATE VIEW v1(x,y) AS
|
|
|
d22c23 |
+ WITH t1(a,b) AS (VALUES(1,2))
|
|
|
d22c23 |
+ SELECT * FROM nosuchtable JOIN t1;
|
|
|
d22c23 |
+ SELECT * FROM v1;
|
|
|
d22c23 |
+} {1 {no such table: main.nosuchtable}}
|
|
|
d22c23 |
|
|
|
d22c23 |
# Additional test cases that came out of the work to
|
|
|
d22c23 |
# fix for Kostya's problem.
|
|
|
d22c23 |
--
|
|
|
d22c23 |
2.26.0
|
|
|
d22c23 |
|