-C Block\sedgy\sfunctions\sused\sin\sDEFAULT\sconstraints.
-D 2020-01-08T22:22:36.071
+C Fix\sa\sproblem\sthat\srestricted\sedgy\sfunctions\sin\sTEMP\stables.\nNew\stest\scases\sadded.
+D 2020-01-09T01:20:03.116
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F src/prepare.c 6049beb71385f017af6fc320d2c75a4e50b75e280c54232442b785fbb83df057
F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
-F src/resolve.c 06abaef6272a4f0da048a1728b039a4f0beb318bda4bdc0efca89cb6af3b4f88
+F src/resolve.c 1139e3157c710c6e6f04fe726f4e0d8bdb1ae89a276d3b0ca4975af163141c9c
F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
F src/select.c fbae5d6db63959aa1ecb34efe93caf5399444ca3c78d6f1ef4620b0ee5c37707
F src/shell.c.in 43d3cfbee97d78ca5782dc53e4c1e22d3cc15c91beff20889dc60551f47eab9f
F src/sqlite.h.in 06452043348e35cf6108345a35574a2faa4d1c2829beefb1e73c73d6bfb2fa80
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 72af51aa4e912e14cd495fb6e7fac65f0940db80ed950d90911aff292cc47ce2
-F src/sqliteInt.h 0ca99e207087851fd27c6e1314fc52d273caa424ff2bafa3f1daf6d5eb63b35a
+F src/sqliteInt.h ee242902766f9a96aeaca4315dbe1e204bbb2954cd455ffa085bba84fa47956b
F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
F src/status.c 9ff2210207c6c3b4d9631a8241a7d45ab1b26a0e9c84cb07a9b5ce2de9a3b278
F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
F test/triggerE.test ede2e4bce4ba802337bd69d39447fa04a938e06d84a8bfc53c76850fc36ed86d
F test/triggerF.test 5d76f0a8c428ff87a4d5ed52da06f6096a2c787a1e21b846111dfac4123de3ad
F test/triggerG.test d5caeef6144ede2426dd13211fd72248241ff2ebc68e12a4c0bf30f5faa21499
-F test/trustschema1.test aec32a37ef8468aa6f8e5645cdd22c6ff70e0cddfff39d70de5683c67a2c0091
+F test/trustschema1.test 4e970aef0bfe0cee139703cc7209d0e0f07725d999b180ba50770f49edef1494
F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1
F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a
F test/tt3_lookaside1.c 0377e202c3c2a50d688cb65ba203afeda6fafeb9
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 30882ca80f6c51f6bb7b2692c1ac3f19a7c61a23aa8730be79aec0ae3ef08d54
-R 2d6bd4faf1a02c29990cd0df461c78ad
+P da434dc149786e4b1cd80b3b2b25f8b614d0dec62d5439f839a66b536999e398
+R 5d23da58c4e26d6a3869b8997dbb1f9d
U drh
-Z 9253d4aa29f3b6b8cb96462d5b434aa9
+Z 2a63c0c342c8804a0df9ef8a4a5f7519
source $testdir/tester.tcl
set testprefix trustschema1
-
+# edgy functions used in generated columns
+#
proc f1 {x} {return $x}
do_test 1.100 {
db function f1 -innocuous -deterministic f1
do_catchsql_test 1.140 {
SELECT a, b, c FROM t1;
} {1 {unsafe use of f2()}}
+do_catchsql_test 1.150 {
+ PRAGMA trusted_schema=ON;
+ DROP TABLE t1;
+ CREATE TABLE t1(a, b AS (f3(a+1)));
+} {1 {unsafe use of f3()}}
+do_execsql_test 1.160 {
+ PRAGMA trusted_schema=OFF;
+ CREATE TEMP TABLE temp1(a,b AS (f3(a+1)));
+ INSERT INTO temp1(a) VALUES(100),(900);
+ SELECT * FROM temp1;
+} {100 101 900 901}
+# edgy functions used in CHECK constraints
+#
do_catchsql_test 1.200 {
+ PRAGMA trusted_schema=ON;
CREATE TABLE t2(a,b,c,CHECK(f3(c)==c));
} {1 {unsafe use of f3()}}
do_catchsql_test 1.210 {
do_execsql_test 1.231 {
SELECT * FROM t2;
} {1 2 3}
+# Ok to put as many edgy functions as you want in a
+# TEMP table.
+do_execsql_test 1.240 {
+ PRAGMA trusted_schema=OFF;
+ CREATE TEMP TABLE temp2(a, b, CHECK(f3(b)==b));
+ INSERT INTO temp2(a,b) VALUES(1,2),('x','y');
+ SELECT * FROM temp2;
+} {1 2 x y}
+# edgy functions used in DEFAULT constraints
+#
do_catchsql_test 1.300 {
CREATE TABLE t3(a,b DEFAULT(f2(25)));
} {0 {}}
do_catchsql_test 1.311 {
INSERT INTO t3(a,b) VALUES(1,2);
} {0 {}}
+do_execsql_test 1.320 {
+ CREATE TEMP TABLE temp3(a, b DEFAULT(f3(31)));
+ INSERT INTO temp3(a) VALUES(22);
+ SELECT * FROM temp3;
+} {22 31}
+
+# edgy functions used in partial indexes.
+#
+do_execsql_test 1.400 {
+ CREATE TABLE t4(a,b,c);
+ INSERT INTO t4 VALUES(1,2,3),('a','b','c'),(4,'d',0);
+ SELECT * FROM t4;
+ CREATE TEMP TABLE temp4(a,b,c);
+ INSERT INTO temp4 SELECT * FROM t4;
+} {1 2 3 a b c 4 d 0}
+do_catchsql_test 1.410 {
+ CREATE INDEX t4a ON t4(a) WHERE f3(c);
+} {1 {unsafe use of f3()}}
+do_catchsql_test 1.420 {
+ PRAGMA trusted_schema=OFF;
+ CREATE INDEX t4a ON t4(a) WHERE f2(c);
+} {1 {unsafe use of f2()}}
+do_execsql_test 1.421 {
+ CREATE INDEX t4a ON t4(a) WHERE f1(c);
+ SELECT a FROM t4 WHERE f1(c) ORDER BY a;
+} {1}
+do_execsql_test 1.430 {
+ PRAGMA trusted_schema=ON;
+ CREATE INDEX t4b ON t4(b) WHERE f2(c);
+ SELECT b FROM t4 WHERE f2(c) ORDER BY b;
+} {2}
+do_execsql_test 1.440 {
+ PRAGMA trusted_schema=OFF;
+ CREATE INDEX temp4a ON temp4(a) WHERE f3(c);
+ SELECT a FROM temp4 WHERE f2(c) ORDER BY a;
+} {1}
+
+# edgy functions used in index expressions
+#
+do_execsql_test 1.500 {
+ CREATE TABLE t5(a,b,c);
+ INSERT INTO t5 VALUES(1,2,3),(4,5,6),(7,0,-3);
+ SELECT * FROM t5;
+ CREATE TEMP TABLE temp5(a,b,c);
+ INSERT INTO temp5 SELECT * FROM t5;
+} {1 2 3 4 5 6 7 0 -3}
+do_catchsql_test 1.510 {
+ CREATE INDEX t5x1 ON t5(a+f3(b));
+} {1 {unsafe use of f3()}}
+do_catchsql_test 1.520 {
+ PRAGMA trusted_schema=OFF;
+ CREATE INDEX t5x1 ON t5(a+f2(b));
+} {1 {unsafe use of f2()}}
+do_execsql_test 1.521 {
+ CREATE INDEX t5x1 ON t5(a+f1(b));
+ SELECT * FROM t5 INDEXED BY t5x1 WHERE a+f1(b)=3;
+} {1 2 3}
+do_execsql_test 1.530 {
+ PRAGMA trusted_schema=ON;
+ CREATE INDEX t5x2 ON t5(b+f2(c));
+ SELECT * FROM t5 INDEXED BY t5x2 WHERE b+f2(c)=11;
+} {4 5 6}
+do_execsql_test 1.540 {
+ PRAGMA trusted_schema=OFF;
+ CREATE INDEX temp5x1 ON temp5(a+f3(b));
+ SELECT * FROM temp5 INDEXED BY temp5x1 WHERE a+f3(b)=7;
+} {7 0 -3}
+
+# edgy functions in VIEWs
+#
+reset_db
+db function f1 -innocuous -deterministic f1
+db function f2 -deterministic f1
+db function f3 -directonly -deterministic f1
+do_execsql_test 2.100 {
+ CREATE TABLE t1(a,b,c);
+ INSERT INTO t1 VALUES(1,2,3),(100,50,75),(-11,22,-33);
+ CREATE VIEW v1a AS SELECT f3(a+b) FROM t1;
+ SELECT f3(a+b) FROM t1;
+} {3 150 11}
+do_catchsql_test 2.110 {
+ PRAGMA trusted_schema=ON;
+ SELECT * FROM v1a;
+} {1 {unsafe use of f3()}}
+do_catchsql_test 2.111 {
+ PRAGMA trusted_schema=OFF;
+ SELECT * FROM v1a;
+} {1 {unsafe use of f3()}}
+do_execsql_test 2.120 {
+ DROP VIEW v1a;
+ CREATE TEMP VIEW v1a AS SELECT f3(a+b) FROM t1;
+ SELECT * FROM v1a;
+} {3 150 11}
+do_execsql_test 2.130 {
+ CREATE VIEW v1b AS SELECT f2(b+c) FROM t1;
+ SELECT f2(b+c) FROM t1;
+} {5 125 -11}
+do_catchsql_test 2.140 {
+ PRAGMA trusted_schema=ON;
+ SELECT * FROM v1b;
+} {0 {5 125 -11}}
+do_catchsql_test 2.141 {
+ PRAGMA trusted_schema=OFF;
+ SELECT * FROM v1b;
+} {1 {unsafe use of f2()}}
+do_execsql_test 2.150 {
+ DROP VIEW v1b;
+ CREATE TEMP VIEW v1b AS SELECT f2(b+c) FROM t1;
+ SELECT * FROM v1b;
+} {5 125 -11}
+
+# edgy functions inside of triggers
+#
+do_execsql_test 3.100 {
+ DELETE FROM t1;
+ CREATE TABLE t2(x);
+ CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN
+ INSERT INTO t2(x) SELECT f3(new.a);
+ END;
+} {}
+do_catchsql_test 3.110 {
+ INSERT INTO t1 VALUES(7,6,5);
+} {1 {unsafe use of f3()}}
+do_execsql_test 3.111 {
+ SELECT * FROM t1;
+ SELECT * FROM t2;
+} {}
+
+do_execsql_test 3.120 {
+ DROP TRIGGER r1;
+ CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN
+ INSERT INTO t2(x) SELECT f2(new.a)+100;
+ END;
+ PRAGMA trusted_schema=ON;
+ INSERT INTO t1 VALUES(7,6,5);
+ SELECT * FROM t1, t2;
+} {7 6 5 107}
+do_catchsql_test 3.130 {
+ DELETE FROM t1;
+ DELETE FROM t2;
+ PRAGMA trusted_schema=OFF;
+ INSERT INTO t1 VALUES(7,6,5);
+} {1 {unsafe use of f2()}}
+do_execsql_test 3.131 {
+ SELECT * FROM t1;
+ SELECT * FROM t2;
+} {}
+
finish_test