From: drh Date: Thu, 31 Oct 2019 17:13:17 +0000 (+0000) Subject: Add a few simple TCL test cases for generated columns. (Full test coverage X-Git-Tag: version-3.31.0~360 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=29974f7b91417afa9eb237ac5dd37f2219cd5a0f;p=thirdparty%2Fsqlite.git Add a few simple TCL test cases for generated columns. (Full test coverage of the generated column logic is provided separately by TH3.) FossilOrigin-Name: acedb5c7f7dc1d68bef62098d42ca59e1be7a5083bb03dc07c03b9f9d817158b --- diff --git a/manifest b/manifest index 7280981d19..7dd006225a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ignore\sdifferences\sin\sExpr.op2\sin\ssqlite3ExprCompare()\sin\scases\swhere\sit\ndoes\smatter.\s\sTicket\s[1d2a8efc6c3a595a]. -D 2019-10-31T13:16:26.169 +C Add\sa\sfew\ssimple\sTCL\stest\scases\sfor\sgenerated\scolumns.\s\s(Full\stest\scoverage\nof\sthe\sgenerated\scolumn\slogic\sis\sprovided\sseparately\sby\sTH3.) +D 2019-10-31T17:13:17.010 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1021,7 +1021,7 @@ F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 F test/gcfault.test dd28c228a38976d6336a3fc42d7e5f1ad060cb8c -F test/gencol1.test 27f80efa9047c8db10794d689e086d2d3ecbb0e1dfe8b8293e8c250e6015add3 +F test/gencol1.test 6dd63ec525059f2235e494148bfa8c1ab506eb46e403a8d5bf13004f3b165631 F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98 F test/having.test e4098a4b8962f9596035c3b87a8928a10648acc509f1bb8d6f96413bbf79a1b3 F test/hexlit.test 4a6a5f46e3c65c4bf1fa06f5dd5a9507a5627751 @@ -1849,7 +1849,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 aceeaf9e28767a0880a16872867a1f57bff163acd0f10d19d5688068077590fa -R 4e0fef27b2755ee02a88ef863369c111 +P 329820673a12ff6a6c8759f40989d4ccf272441064b0366a5f491695b55ad0e9 +R e7170d3b73879549c652c7bfb423787f U drh -Z 4d89f413d1dc6ce2106075b4c9bb6a03 +Z b826a93b8f760fe88872664a0ccdde39 diff --git a/manifest.uuid b/manifest.uuid index c379184ac2..e59896f02e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -329820673a12ff6a6c8759f40989d4ccf272441064b0366a5f491695b55ad0e9 \ No newline at end of file +acedb5c7f7dc1d68bef62098d42ca59e1be7a5083bb03dc07c03b9f9d817158b \ No newline at end of file diff --git a/test/gencol1.test b/test/gencol1.test index 4902b5abf4..63e397b218 100644 --- a/test/gencol1.test +++ b/test/gencol1.test @@ -24,4 +24,125 @@ do_execsql_test gencol1-100 { SELECT * FROM t1; } {integer 0} +foreach {tn schema} { +1 { + CREATE TABLE t1( + a INT, + b TEXT, + c ANY, + w INT GENERATED ALWAYS AS (a*10), + x TEXT AS (typeof(c)), + y TEXT AS (substr(b,a,a+2)) + ); + } +2 { + CREATE TABLE t1( + w INT GENERATED ALWAYS AS (a*10), + x TEXT AS (typeof(c)), + y TEXT AS (substr(b,a,a+2)), + a INT, + b TEXT, + c ANY + ); + } +3 { + CREATE TABLE t1( + w INT GENERATED ALWAYS AS (a*10), + a INT, + x TEXT AS (typeof(c)) STORED, + b TEXT, + y TEXT AS (substr(b,a,a+2)), + c ANY + ); + } +4 { + CREATE TABLE t1( + a INTEGER PRIMARY KEY, + w INT GENERATED ALWAYS AS (a*10), + b TEXT, + x TEXT AS (typeof(c)), + y TEXT AS (substr(b,a,a+2)) STORED, + c ANY + ); + } +5 { + CREATE TABLE t1( + w INT GENERATED ALWAYS AS (a*10), + a INT, + x TEXT AS (typeof(c)), + b TEXT, + y TEXT AS (substr(b,a,a+2)) STORED, + c ANY, + PRIMARY KEY(a,b) + ) WITHOUT ROWID; + } +6 { + CREATE TABLE t1( + w INT GENERATED ALWAYS AS (m*5), + m INT AS (a*2) STORED, + a INT, + x TEXT AS (typeof(c)), + b TEXT, + y TEXT AS (substr(b,m/2,m/2+2)) STORED, + c ANY, + PRIMARY KEY(a,b) + ); + } +7 { + CREATE TABLE t1( + w INT GENERATED ALWAYS AS (m*5), + m INT AS (a*2) NOT NULL, + a INT, + x TEXT AS (typeof(c)) CHECK (x<>'blank'), + b TEXT, + y TEXT AS (substr(b,m/2,m/2+2)) STORED, + c ANY, + PRIMARY KEY(b,a) + ) WITHOUT ROWID; + } +} { + catch {db close} + sqlite3 db :memory: + db eval $schema + do_execsql_test gencol1-2.$tn.100 { + INSERT INTO t1(a,b,c) VALUES(1,'abcdef',5.5),(3,'cantaloupe',NULL); + SELECT w, x, y, '|' FROM t1 ORDER BY a; + } {10 real abc | 30 null ntalo |} + do_execsql_test gencol1-2.$tn.101 { + SELECT w, x, y, '|' FROM t1 ORDER BY w; + } {10 real abc | 30 null ntalo |} + do_execsql_test gencol1-2.$tn.102 { + SELECT a FROM t1 WHERE w=30; + } {3} + do_execsql_test gencol1-2.$tn.103 { + SELECT a FROM t1 WHERE x='real'; + } {1} + do_execsql_test gencol1-2.$tn.104 { + SELECT a FROM t1 WHERE y LIKE '%tal%' OR x='real' ORDER BY b; + } {1 3} + do_execsql_test gencol1-2.$tn.110 { + CREATE INDEX t1w ON t1(w); + SELECT a FROM t1 WHERE w=10; + } {1} + do_execsql_test gencol1-2.$tn.120 { + CREATE INDEX t1x ON t1(x) WHERE w BETWEEN 20 AND 40; + SELECT a FROM t1 WHERE x='null' AND w BETWEEN 20 AND 40; + } {3} + do_execsql_test gencol1-2.$tn.121 { + SELECT a FROM t1 WHERE x='real'; + } {1} + do_execsql_test gencol1-2.$tn.130 { + VACUUM; + PRAGMA integrity_check; + } {ok} + do_execsql_test gencol1-2.$tn.140 { + UPDATE t1 SET a=a+100 WHERE w<20; + SELECT a, w, '|' FROM t1 ORDER BY w; + } {3 30 | 101 1010 |} + do_execsql_test gencol1-2.$tn.150 { + INSERT INTO t1 VALUES(4,'jambalaya','Chef John'),(15,87719874135,0); + SELECT w, x, y, '|' FROM t1 ORDER BY w; + } {30 null ntalo | 40 text balaya | 150 integer {} | 1010 real {} |} +} + finish_test