From dd52d0e37fe2f9a207f98abaf21108a6af8d5d3b Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Fri, 24 Mar 2023 00:46:22 +0000 Subject: gentoo auto-resync : 24:03:2023 - 00:46:21 --- .../files/sqlite-3.41.2-perf-regression.patch | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 dev-db/sqlite/files/sqlite-3.41.2-perf-regression.patch (limited to 'dev-db/sqlite/files') diff --git a/dev-db/sqlite/files/sqlite-3.41.2-perf-regression.patch b/dev-db/sqlite/files/sqlite-3.41.2-perf-regression.patch new file mode 100644 index 000000000000..0bf5c41513af --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.41.2-perf-regression.patch @@ -0,0 +1,101 @@ +https://sqlite.org/forum/forumpost/3a180ba0d4 and https://sqlite.org/forum/forumpost/f9346b11a6 +https://sqlite.org/src/info/aa6bd6dff751223e +(-> https://sqlite.org/src/vpatch?from=71215599cd8ebb97&to=aa6bd6dff751223e) + +--- a/src/select.c ++++ b/src/select.c +@@ -4236,12 +4236,11 @@ + ** (17f) the subquery must not be the RHS of a LEFT JOIN. + ** (17g) either the subquery is the first element of the outer + ** query or there are no RIGHT or FULL JOINs in any arm + ** of the subquery. (This is a duplicate of condition (27b).) + ** (17h) The corresponding result set expressions in all arms of the +-** compound must have the same affinity. (See restriction (9) +-** on the push-down optimization.) ++** compound must have the same affinity. + ** + ** The parent and sub-query may contain WHERE clauses. Subject to + ** rules (11), (13) and (14), they may also contain ORDER BY, + ** LIMIT and OFFSET clauses. The subquery cannot use any compound + ** operator other than UNION ALL because all the other compound +@@ -5105,14 +5104,10 @@ + ** + ** (8) If the subquery is a compound that uses UNION, INTERSECT, + ** or EXCEPT, then all of the result set columns for all arms of + ** the compound must use the BINARY collating sequence. + ** +-** (9) If the subquery is a compound, then all arms of the compound must +-** have the same affinity. (This is the same as restriction (17h) +-** for query flattening.) +-** + ** + ** Return 0 if no changes are made and non-zero if one or more WHERE clause + ** terms are duplicated into the subquery. + */ + static int pushDownWhereTerms( +@@ -5139,13 +5134,10 @@ + } + #ifndef SQLITE_OMIT_WINDOWFUNC + if( pSel->pWin ) return 0; /* restriction (6b) */ + #endif + } +- if( compoundHasDifferentAffinities(pSubq) ){ +- return 0; /* restriction (9) */ +- } + if( notUnionAll ){ + /* If any of the compound arms are connected using UNION, INTERSECT, + ** or EXCEPT, then we must ensure that none of the columns use a + ** non-BINARY collating sequence. */ + for(pSel=pSubq; pSel; pSel=pSel->pPrior){ + +--- a/test/pushdown.test ++++ b/test/pushdown.test +@@ -120,7 +120,47 @@ + SELECT v1.a, v1.b, t0.c0 AS cd FROM t0 LEFT JOIN v0 ON v0.c0!=0, v1 + ) WHERE a=2 AND b=0 AND cd=0; + } { + 2 0 0 + } +- ++ ++# 2023-02-22 https://sqlite.org/forum/forumpost/bcc4375032 ++# Performance regression caused by check-in [1ad41840c5e0fa70] from 2022-11-25. ++# That check-in added a new restriction on push-down. The new restriction is ++# no longer necessary after check-in [27655c9353620aa5] from 2022-12-14. ++# ++do_execsql_test 3.5 { ++ DROP TABLE IF EXISTS t1; ++ CREATE TABLE t1(a INT, b INT, c TEXT, PRIMARY KEY(a,b)) WITHOUT ROWID; ++ INSERT INTO t1(a,b,c) VALUES ++ (1,100,'abc'), ++ (2,200,'def'), ++ (3,300,'abc'); ++ DROP TABLE IF EXISTS t2; ++ CREATE TABLE t2(a INT, b INT, c TEXT, PRIMARY KEY(a,b)) WITHOUT ROWID; ++ INSERT INTO t2(a,b,c) VALUES ++ (1,110,'efg'), ++ (2,200,'hij'), ++ (3,330,'klm'); ++ CREATE VIEW v3 AS ++ SELECT a, b, c FROM t1 ++ UNION ALL ++ SELECT a, b, 'xyz' FROM t2; ++ SELECT * FROM v3 WHERE a=2 AND b=200; ++} {2 200 def 2 200 xyz} ++do_eqp_test 3.6 { ++ SELECT * FROM v3 WHERE a=2 AND b=200; ++} { ++ QUERY PLAN ++ |--CO-ROUTINE v3 ++ | `--COMPOUND QUERY ++ | |--LEFT-MOST SUBQUERY ++ | | `--SEARCH t1 USING PRIMARY KEY (a=? AND b=?) ++ | `--UNION ALL ++ | `--SEARCH t2 USING PRIMARY KEY (a=? AND b=?) ++ `--SCAN v3 ++} ++# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ++# We want both arms of the compound subquery to use the ++# primary key. ++ + finish_test -- cgit v1.2.3