Index: third_party/sqlite/src/test/view.test |
diff --git a/third_party/sqlite/src/test/view.test b/third_party/sqlite/src/test/view.test |
index a87d2770a06e4c567c03830a1319ff60384a9268..3ba6c0b4653e4e8d9075a358ee7dd5e321586d4d 100644 |
--- a/third_party/sqlite/src/test/view.test |
+++ b/third_party/sqlite/src/test/view.test |
@@ -458,7 +458,7 @@ do_test view-12.1 { |
ifcapable attach { |
do_test view-13.1 { |
- file delete -force test2.db |
+ forcedelete test2.db |
catchsql { |
ATTACH 'test2.db' AS two; |
CREATE TABLE two.t2(x,y); |
@@ -576,4 +576,52 @@ do_test view-20.1 { |
} |
} {} |
+# Ticket [d58ccbb3f1b]: Prevent Table.nRef overflow. |
+db close |
+sqlite3 db :memory: |
+do_test view-21.1 { |
+ catchsql { |
+ CREATE TABLE t1(x); |
+ INSERT INTO t1 VALUES(5); |
+ CREATE VIEW v1 AS SELECT x*2 FROM t1; |
+ CREATE VIEW v2 AS SELECT * FROM v1 UNION SELECT * FROM v1; |
+ CREATE VIEW v4 AS SELECT * FROM v2 UNION SELECT * FROM v2; |
+ CREATE VIEW v8 AS SELECT * FROM v4 UNION SELECT * FROM v4; |
+ CREATE VIEW v16 AS SELECT * FROM v8 UNION SELECT * FROM v8; |
+ CREATE VIEW v32 AS SELECT * FROM v16 UNION SELECT * FROM v16; |
+ CREATE VIEW v64 AS SELECT * FROM v32 UNION SELECT * FROM v32; |
+ CREATE VIEW v128 AS SELECT * FROM v64 UNION SELECT * FROM v64; |
+ CREATE VIEW v256 AS SELECT * FROM v128 UNION SELECT * FROM v128; |
+ CREATE VIEW v512 AS SELECT * FROM v256 UNION SELECT * FROM v256; |
+ CREATE VIEW v1024 AS SELECT * FROM v512 UNION SELECT * FROM v512; |
+ CREATE VIEW v2048 AS SELECT * FROM v1024 UNION SELECT * FROM v1024; |
+ CREATE VIEW v4096 AS SELECT * FROM v2048 UNION SELECT * FROM v2048; |
+ CREATE VIEW v8192 AS SELECT * FROM v4096 UNION SELECT * FROM v4096; |
+ CREATE VIEW v16384 AS SELECT * FROM v8192 UNION SELECT * FROM v8192; |
+ CREATE VIEW v32768 AS SELECT * FROM v16384 UNION SELECT * FROM v16384; |
+ CREATE VIEW vx AS SELECT * FROM v32768 UNION SELECT * FROM v32768; |
+ } |
+} {1 {too many references to "v1": max 65535}} |
+ifcapable progress { |
+ do_test view-21.2 { |
+ db progress 1000 {expr 1} |
+ catchsql { |
+ SELECT * FROM v32768; |
+ } |
+ } {1 interrupted} |
+} |
+ |
+db close |
+sqlite3 db :memory: |
+do_execsql_test view-22.1 { |
+ CREATE VIEW x1 AS SELECT 123 AS '', 234 AS '', 345 AS ''; |
+ SELECT * FROM x1; |
+} {123 234 345} |
+do_test view-22.2 { |
+ unset -nocomplain x |
+ db eval {SELECT * FROM x1} x break |
+ lsort [array names x] |
+} {{} * :1 :2} |
+ |
+ |
finish_test |