-C Ensure\sthe\scolumns\sof\sviews\sand\ssub-selects\sin\sthe\sFROM\sclause\sof\sa\sselect\sare\salways\sassigned\simplicit\scollation\ssequences,\sjust\sas\stable\scolumns\sare.\sFix\sfor\s[a7debbe0].
-D 2019-09-09T20:17:24.283
+C Ensure\sthe\scolumns\sof\sviews\sand\ssub-queries\smaintain\stheir\simplicit\scollation\ssequences\swhen\sthe\s"push-down"\soptimization\sis\sapplied.\sFix\sfor\s[18458b1a].
+D 2019-09-10T15:33:52.829
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
F src/resolve.c 9891cf5fd155bb199f8b1ff5d1429b9f70484487f4c455bba94348d4cb6f829f
F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
-F src/select.c 8685adae94dffa6e4542e2194e491d69e27d5b79fe72b219e9255b08e56eaf76
+F src/select.c e2c870548541d33d090a066e89ab2e7943299006e2827c1abfae39561041fc0b
F src/shell.c.in e5fb91505f29ae9458cabf1a63bbd1faf6b4b34eabca33d0f75a06aacecca21b
F src/sqlite.h.in 50fc0914ccd347437db9a0278a47d7541df3a45eb6e641e9680750c6f98dad27
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
F src/tclsqlite.c 50c93be3e1c03b4e6cf6756e5197afcfe7f5cd0497d83a7ac317cde09e19b290
-F src/test1.c 8ce455da8dcec886a0e1e608da0fee7de67c8195b14517a8824a2a40c2d11fbf
+F src/test1.c 07d774ae3fcd3aed48248483d550cef55cfb417bddab54f4c616b3ac8faa8e32
F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
F src/test4.c 405834f6a93ec395cc4c9bb8ecebf7c3d8079e7ca16ae65e82d01afd229694bb
F test/threadtest4.c c1e67136ceb6c7ec8184e56ac61db28f96bd2925
F test/time-wordcount.sh 8e0b0f8109367827ad5d58f5cc849705731e4b90
F test/tkt-02a8e81d44.test 6c80d9c7514e2a42d4918bf87bf6bc54f379110c
+F test/tkt-18458b1a.test c543c4b8e8c7c2200579a635e72c15bc374a92d44eddb1d588d4fdeca9cca532
F test/tkt-26ff0c2d1e.test c15bec890c4d226c0da2f35ff30f9e84c169cfef90e73a8cb5cec11d723dfa96
F test/tkt-2a5629202f.test 0521bd25658428baa26665aa53ffed9367d33af2
F test/tkt-2d1a5c67d.test be1326f3061caec85085f4c9ee4490561ca037c0
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P cb3e2be674316e1d39968eb6567f1fe1b72f9d89af49640a9e83f944979c4cf0 1863b7bf12521bdd2b51c5b8d3a4634bff3e15d3713e0b5343952df7da02f794
-R 9270371da6f28852caf725eea0dfbe33
-T +closed 1863b7bf12521bdd2b51c5b8d3a4634bff3e15d3713e0b5343952df7da02f794
+P b9ec72203c19c2b95e648ac1dfad74eec98d4ff82581cdc10dc4221ba551728f
+R cd3dfdd19ee61439a8f3dafd644637dd
U dan
-Z e9dd23bc0c9ea40830f2a6e0c2945039
+Z 5c236b65c054109c04d341f131258a9f
-b9ec72203c19c2b95e648ac1dfad74eec98d4ff82581cdc10dc4221ba551728f
\ No newline at end of file
+36997c4ade2ef3a274cd1ac52b44118fb3a05325adb650b7b338ecb43d060575
\ No newline at end of file
int iNewTable; /* New table number */
int isLeftJoin; /* Add TK_IF_NULL_ROW opcodes on each replacement */
ExprList *pEList; /* Replacement expressions */
- int bFlattener; /* True for query-flattener, false otherwise */
} SubstContext;
/* Forward Declarations */
sqlite3ExprDelete(db, pExpr);
pExpr = pNew;
- /* If this call is part of query-flattening, ensure that the
- ** new expression has an implicit collation sequence. */
- if( pSubst->bFlattener && pExpr ){
+ /* Ensure that the expression now has an implicit collation sequence,
+ ** just as it did when it was a column of a view or sub-query. */
+ if( pExpr ){
if( pExpr->op!=TK_COLUMN && pExpr->op!=TK_COLLATE ){
CollSeq *pColl = sqlite3ExprCollSeq(pSubst->pParse, pExpr);
pExpr = sqlite3ExprAddCollateString(pSubst->pParse, pExpr,
x.iNewTable = iNewParent;
x.isLeftJoin = isLeftJoin;
x.pEList = pSub->pEList;
- x.bFlattener = 1;
substSelect(&x, pParent, 0);
}
x.iNewTable = iCursor;
x.isLeftJoin = 0;
x.pEList = pSubq->pEList;
- x.bFlattener = 0;
pNew = substExpr(&x, pNew);
if( pSubq->selFlags & SF_Aggregate ){
pSubq->pHaving = sqlite3ExprAnd(pParse, pSubq->pHaving, pNew);
{ "omit-noop-join", SQLITE_OmitNoopJoin },
{ "stat4", SQLITE_Stat4 },
{ "skip-scan", SQLITE_SkipScan },
+ { "push-down", SQLITE_PushDown },
};
if( objc!=4 ){
--- /dev/null
+# 2019 September 10
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. In particular,
+# that problems related to ticket [18458b1a] have been fixed.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix tkt-18458b1a
+
+foreach tn {1 2} {
+ reset_db
+ if {$tn==1} {
+ # Disable the flattener and push-down optimizations
+ optimization_control db query-flattener 0
+ optimization_control db push-down 0
+ } else {
+ # Enable them
+ optimization_control db query-flattener 1
+ optimization_control db push-down 1
+ }
+
+ db cache size 0
+
+ do_execsql_test $tn.1.1 {
+ CREATE TABLE t0(c0 COLLATE NOCASE);
+ INSERT INTO t0(c0) VALUES ('B');
+ CREATE VIEW v0(c0, c1) AS SELECT DISTINCT t0.c0, 'a' FROM t0;
+ }
+
+ do_execsql_test $tn.1.2 {
+ SELECT count(*) FROM v0 WHERE c1 >= c0;
+ } 1
+
+ do_execsql_test $tn.1.3 {
+ SELECT count(*) FROM v0 WHERE NOT NOT (c1 >= c0);
+ } 1
+
+ do_execsql_test $tn.1.4 {
+ SELECT count(*) FROM v0 WHERE ((c1 >= c0) OR 0+0);
+ } 1
+}
+
+finish_test
+