]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add test cases to test/unionvtab.test.
authordan <dan@noemail.net>
Mon, 17 Jul 2017 21:03:13 +0000 (21:03 +0000)
committerdan <dan@noemail.net>
Mon, 17 Jul 2017 21:03:13 +0000 (21:03 +0000)
FossilOrigin-Name: f2c4a584e83ffcc1cedd39460eb06d6f231a1a87f269bb3e75055232a866067e

ext/misc/unionvtab.c
manifest
manifest.uuid
test/unionvtab.test

index 8fb0c966cb506dbd3299d2c4786205e91651594b..23b66f81250723f78a03d8f71fb34f1768cd10dc 100644 (file)
@@ -653,7 +653,9 @@ static int unionFilter(
     }
   }
 
+
   if( rc==SQLITE_OK ){
+    if( zSql==0 ) return SQLITE_OK;
     pCsr->pStmt = unionPrepare(&rc, pTab->db, zSql, &pTab->base.zErrMsg);
   }
   sqlite3_free(zSql);
index cb797c6b831589a7ff6e750ee51e62cccdcae134..b7bfbbc7dd7754cf6268eab6264c4ad82cb9f24e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enhance\serror\sdetection\sand\sfix\sother\sissues\sin\sunionvtab\scode.
-D 2017-07-17T20:25:21.632
+C Add\stest\scases\sto\stest/unionvtab.test.
+D 2017-07-17T21:03:13.376
 F Makefile.in d9873c9925917cca9990ee24be17eb9613a668012c85a343aef7e5536ae266e8
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 20850e3e8d4d4791e0531955852d768eb06f24138214870d543abb1a47346fba
@@ -281,7 +281,7 @@ F ext/misc/showauth.c 732578f0fe4ce42d577e1c86dc89dd14a006ab52
 F ext/misc/spellfix.c a4723b6aff748a417b5091b68a46443265c40f0d
 F ext/misc/stmt.c 6f16443abb3551e3f5813bb13ba19a30e7032830015b0f92fe0c0453045c0a11
 F ext/misc/totype.c 4a167594e791abeed95e0a8db028822b5e8fe512
-F ext/misc/unionvtab.c e5b0f62563839da45952be404b80ba592a1183fae8c6976036177edc6c713ef7
+F ext/misc/unionvtab.c cd5fbb09581e4d750c70b338cf9b68cd43889fc40419895ba59887b717c11933
 F ext/misc/vfslog.c fe40fab5c077a40477f7e5eba994309ecac6cc95
 F ext/misc/vfsstat.c bf10ef0bc51e1ad6756629e1edb142f7a8db1178
 F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd
@@ -1432,7 +1432,7 @@ F test/tt3_vacuum.c 1753f45917699c9c1f66b64c717a717c9379f776
 F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff
 F test/types2.test 1aeb81976841a91eef292723649b5c4fe3bc3cac
 F test/types3.test 99e009491a54f4dc02c06bdbc0c5eea56ae3e25a
-F test/unionvtab.test 41b5d8c843ed4968aa20ec5f25ab501256a81515952846ed6e1d48e4ece09f7e
+F test/unionvtab.test a7d30e5900cf563f3f05a3ec929b19bd8da22e7af3c00169a8972685c5d273b2
 F test/unique.test 93f8b2ef5ea51b9495f8d6493429b1fd0f465264
 F test/unique2.test 3674e9f2a3f1fbbfd4772ac74b7a97090d0f77d2
 F test/unixexcl.test d936ba2b06794018e136418addd59a2354eeae97
@@ -1635,7 +1635,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 62a86aa6c0519cf1fa232169122d3d6ae8d2f66b20530fb934a82a15712bd2f0
-R 84247a701b2728604bb146e760fbf4dd
+P 9c3f1b9a82e500e015deb0cc669fbb32e7f0cdc69f926ceff383ab946f8d8d18
+R 6402ecef7e1ef347a2198f92e57df782
 U dan
-Z fe159fd3b9fb252212619f29108c42d6
+Z 341cfe880d68a3cd0fd3e9a065c71b11
index 5a6f337c5f967124d51d55a3d3a57daa83c9cb3c..1cd063335322f92c527072f9ea6ad78e9fc36691 100644 (file)
@@ -1 +1 @@
-9c3f1b9a82e500e015deb0cc669fbb32e7f0cdc69f926ceff383ab946f8d8d18
\ No newline at end of file
+f2c4a584e83ffcc1cedd39460eb06d6f231a1a87f269bb3e75055232a866067e
\ No newline at end of file
index c72b8e6e4c3d826084c173f925dabeeab78d5d8b..804c89b553f017db22034547c0fe840a228dc30c 100644 (file)
@@ -83,7 +83,7 @@ do_execsql_test 1.7 {
 #
 #   2.1.*: Attempt to create a unionvtab table outside of the TEMP schema.
 #   2.2.*: Tables that do not exist.
-#   2.3.*: Non WITHOUT ROWID tables.
+#   2.3.*: Non rowid tables.
 #   2.4.*: Tables with mismatched schemas.
 #
 do_catchsql_test 2.1.1 {
@@ -106,6 +106,21 @@ do_catchsql_test 2.2.3 {
   CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES('xua', 't555', 1, 100)");
 } {1 {no such rowid table: xua.t555}}
 
+do_execsql_test 2.3.0 {
+  CREATE TABLE wr1(a, b, c PRIMARY KEY) WITHOUT ROWID;
+  CREATE VIEW v1 AS SELECT * FROM t1;
+  CREATE VIEW v2 AS SELECT _rowid_, * FROM t1;
+}
+do_catchsql_test 2.3.1 {
+  CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES('main', 'wr1', 1, 2)");
+} {1 {no such rowid table: main.wr1}}
+do_catchsql_test 2.3.2 {
+  CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES(NULL, 'v1', 1, 2)");
+} {1 {no such rowid table: v1}}
+do_catchsql_test 2.3.3 {
+  CREATE VIRTUAL TABLE temp.u1 USING unionvtab("VALUES(NULL, 'v2', 1, 2)");
+} {1 {no such rowid table: v2}}
+
 do_execsql_test 2.4.0 {
   CREATE TABLE x1(a BLOB, b);
   CREATE TABLE x2(a BLOB, b);
@@ -142,6 +157,86 @@ foreach {tn dbs res} {
   " $res
 }
 
+#-------------------------------------------------------------------------
+#
+reset_db
+load_static_extension db unionvtab
+do_execsql_test 3.0 {
+  CREATE TABLE tbl1(a INTEGER PRIMARY KEY, b);
+  CREATE TABLE tbl2(a INTEGER PRIMARY KEY, b);
+  CREATE TABLE tbl3(a INTEGER PRIMARY KEY, b);
+
+  WITH ss(ii) AS ( SELECT 1 UNION ALL SELECT ii+1 FROM ss WHERE ii<100 )
+  INSERT INTO tbl1 SELECT ii, '1.' || ii FROM ss;
+
+  WITH ss(ii) AS ( SELECT 1 UNION ALL SELECT ii+1 FROM ss WHERE ii<100 )
+  INSERT INTO tbl2 SELECT ii, '2.' || ii FROM ss;
+
+  WITH ss(ii) AS ( SELECT 1 UNION ALL SELECT ii+1 FROM ss WHERE ii<100 )
+  INSERT INTO tbl3 SELECT ii, '3.' || ii FROM ss;
+
+  CREATE VIRTUAL TABLE temp.uu USING unionvtab(
+    "VALUES(NULL,'tbl2', 26, 74), (NULL,'tbl3', 75, 100), (NULL,'tbl1', 1, 25)"
+  );
+}
+
+do_execsql_test 3.1 {
+  SELECT * FROM uu WHERE rowid = 10;
+} {10 {1.10}}
+do_execsql_test 3.2 {
+  SELECT * FROM uu WHERE rowid = 25;
+} {25 {1.25}}
+
+do_execsql_test 3.3 { SELECT count(*) FROM uu WHERE rowid <= 24 } {24}
+
+# The following queries get the "wrong" answers. This is because the
+# module assumes that each source table contains rowids from only within
+# the range specified. For example, (rowid <= 25) matches 100 rows. This
+# is because the module implements (rowid <= 25) as a full table scan
+# of tbl1 only.
+do_execsql_test 3.4.1 { SELECT count(*) FROM uu WHERE rowid <= 25 } {100}
+do_execsql_test 3.4.2 { SELECT count(*) FROM uu WHERE rowid <= 26 } {126}
+do_execsql_test 3.4.3 { SELECT count(*) FROM uu WHERE rowid <= 73 } {173}
+do_execsql_test 3.4.4 { SELECT count(*) FROM uu WHERE rowid <= 74 } {200}
+do_execsql_test 3.4.5 { SELECT count(*) FROM uu WHERE rowid <= 75 } {275}
+do_execsql_test 3.4.6 { SELECT count(*) FROM uu WHERE rowid <= 99 } {299}
+do_execsql_test 3.4.7 { SELECT count(*) FROM uu WHERE rowid <= 100 } {300}
+do_execsql_test 3.4.8 { SELECT count(*) FROM uu WHERE rowid <= 101 } {300}
+
+do_execsql_test 3.5.1 { SELECT count(*) FROM uu WHERE rowid < 25 } {24}
+do_execsql_test 3.5.2 { SELECT count(*) FROM uu WHERE rowid < 26 } {100}
+do_execsql_test 3.5.3 { SELECT count(*) FROM uu WHERE rowid < 27 } {126}
+do_execsql_test 3.5.4 { SELECT count(*) FROM uu WHERE rowid < 73 } {172}
+do_execsql_test 3.5.5 { SELECT count(*) FROM uu WHERE rowid < 74 } {173}
+do_execsql_test 3.5.6 { SELECT count(*) FROM uu WHERE rowid < 75 } {200}
+do_execsql_test 3.5.7 { SELECT count(*) FROM uu WHERE rowid < 76 } {275}
+do_execsql_test 3.5.8 { SELECT count(*) FROM uu WHERE rowid < 99 } {298}
+do_execsql_test 3.5.9 { SELECT count(*) FROM uu WHERE rowid < 100 } {299}
+do_execsql_test 3.5.10 { SELECT count(*) FROM uu WHERE rowid < 101 } {300}
+
+do_execsql_test 3.6.1 { SELECT count(*) FROM uu WHERE rowid > 24 } {276}
+do_execsql_test 3.6.1 { SELECT count(*) FROM uu WHERE rowid > 25 } {200}
+do_execsql_test 3.6.2 { SELECT count(*) FROM uu WHERE rowid > 26 } {174}
+do_execsql_test 3.6.3 { SELECT count(*) FROM uu WHERE rowid > 27 } {173}
+do_execsql_test 3.6.4 { SELECT count(*) FROM uu WHERE rowid > 73 } {127}
+do_execsql_test 3.6.5 { SELECT count(*) FROM uu WHERE rowid > 74 } {100}
+do_execsql_test 3.6.6 { SELECT count(*) FROM uu WHERE rowid > 75 } {25}
+do_execsql_test 3.6.7 { SELECT count(*) FROM uu WHERE rowid > 76 } {24}
+do_execsql_test 3.6.8 { SELECT count(*) FROM uu WHERE rowid > 99 } {1}
+do_execsql_test 3.6.9 { SELECT count(*) FROM uu WHERE rowid > 100 } {0}
+do_execsql_test 3.6.10 { SELECT count(*) FROM uu WHERE rowid > 101 } {0}
+
+do_execsql_test 3.7.1 { SELECT count(*) FROM uu WHERE rowid >= 24 } {277}
+do_execsql_test 3.7.1 { SELECT count(*) FROM uu WHERE rowid >= 25 } {276}
+do_execsql_test 3.7.2 { SELECT count(*) FROM uu WHERE rowid >= 26 } {200}
+do_execsql_test 3.7.3 { SELECT count(*) FROM uu WHERE rowid >= 27 } {174}
+do_execsql_test 3.7.4 { SELECT count(*) FROM uu WHERE rowid >= 73 } {128}
+do_execsql_test 3.7.5 { SELECT count(*) FROM uu WHERE rowid >= 74 } {127}
+do_execsql_test 3.7.6 { SELECT count(*) FROM uu WHERE rowid >= 75 } {100}
+do_execsql_test 3.7.7 { SELECT count(*) FROM uu WHERE rowid >= 76 } {25}
+do_execsql_test 3.7.8 { SELECT count(*) FROM uu WHERE rowid >= 99 } {2}
+do_execsql_test 3.7.9 { SELECT count(*) FROM uu WHERE rowid >= 100 } {1}
+do_execsql_test 3.7.10 { SELECT count(*) FROM uu WHERE rowid >= 101 } {0}
 
 finish_test