1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-22 20:22:44 +03:00
Commit Graph

1577 Commits

Author SHA1 Message Date
drh
32634d270c Enable ORDER BY clauses that span joins to be optimized out.
FossilOrigin-Name: c29538f9b1ee4d4869999570604c9618ca0d08ac
2012-09-27 14:11:36 +00:00
drh
ff2d52117b Further tweaks to the query planner logic in preparation for adding
ORDER BY opt-out for joins.

FossilOrigin-Name: 53efc10af990d3f293551f3cd8ef2f8be2d9d716
2012-09-27 12:05:09 +00:00
drh
46c35f9b20 Further refactoring of the ORDER BY related query-planning logic in order
to make it easier to extend to support optimizing out ORDER BY on joins.
No actual behavior changes, yet.

FossilOrigin-Name: 96496ddae12a239b30a1fc997fbea43e3a75bfe7
2012-09-26 23:17:01 +00:00
drh
9cd1c99fe1 Augment the WhereBestIdx structure to pass down into the query planner
information that might be used to better detect ORDER BY and DISTINCT
optimizations spanning multiple tables of a join.

FossilOrigin-Name: 4226e51ff837f0ffe16355491a655d919d13488e
2012-09-25 20:43:35 +00:00
drh
56f1b99d4d Pass information around between the major routines of the query planner
using a single pointer to a structure rather than a long list of parameters.

FossilOrigin-Name: 1104d42e104d561ce60d05d158acfe499ee9fd50
2012-09-25 14:29:39 +00:00
drh
4d85fa760f Remove an unused subfunction parameter and an obsolete comment from the
query planner logic in where.c.

FossilOrigin-Name: 349a55cd8ba9ce65ebfd987ecfebd1204f7d0a85
2012-09-24 19:50:00 +00:00
drh
46ec5b63e2 Change the internal sqlite3WhereBegin() to report that the ORDER BY clause
is satisfied by indices using the WhereInfo.nOBSat field of the returned
structure.

FossilOrigin-Name: 22989f3588531efd555cc29d6c576e7a34b7edc4
2012-09-24 15:30:54 +00:00
drh
cef4fc89c4 Enable query planner tracing using the new (and undocumented) ".wheretrace 1"
command in the command-line shell if both the shell and the core are
compiled with SQLITE_DEBUG and SQLITE_ENABLE_WHERETRACE.  This is not a 
supported API. Use for testing and debugging only.

FossilOrigin-Name: 1be4b16b9e900181ae6848f2920ea646f407c9dc
2012-09-21 22:50:45 +00:00
drh
d2e2bf9ff7 Make sure the WHERE_IDX_ONLY flag is not set on query plans that will not
be using an index.

FossilOrigin-Name: 698b2a28004a9a2f0eabaadf36d833da4400b2bf
2012-09-17 21:24:01 +00:00
drh
de9a7b8a94 Add the ability to disable the covering-index-scan optimization at compile-time,
start-time, or at run-time.  Add test cases to check this configurability.

FossilOrigin-Name: ccb8ecc30c8e6c7760131250297c2e452bbac43b
2012-09-17 20:44:46 +00:00
drh
3f4d1d1b02 Attempt to use a covering index even on a full table scan, under the theory
that the index will be smaller and require less disk I/O and thus be faster.

FossilOrigin-Name: cfaa7bc12847a7006ccc93815f2395ad5259744a
2012-09-15 18:45:54 +00:00
drh
b0367fb8b0 Fix a harmless compiler warning.
FossilOrigin-Name: 929b51840b83ee1ca5add8fe430913e7c4e2a3d6
2012-08-25 02:11:13 +00:00
drh
d40e208726 Move field WhereLevel.pCovidx inside the union to WhereLevel.u.pCovidx.
FossilOrigin-Name: b722143d075979ba3d92b7b29e576ce2307187d1
2012-08-24 23:24:15 +00:00
drh
7b36ba3da3 Remove a NEVER() that is in fact reachable on an OOM. This probably
has nothing to do with the multi-or-covering-index change but just happened
to be found while testing that change.

FossilOrigin-Name: 5499af53ebcdc21ae288aa2347aa21f6891d79ef
2012-08-24 21:54:11 +00:00
dan
0efb72c969 Fix a problem to do with multi-or queries and automatic indexes.
FossilOrigin-Name: a3e26038a1d9f3331239f777c67d1920d904aab0
2012-08-24 18:44:56 +00:00
dan
bfca6a4066 Experimental change to support the covering index optimization for queries with OR terms in the WHERE clause that search a single index more than once.
FossilOrigin-Name: 1dc8c7c741a82bb98a07f3fdb8142d8bc8d8a98b
2012-08-24 10:52:35 +00:00
drh
dd9819c4c1 Fix a harmless compiler warning.
FossilOrigin-Name: 2b77301b9613c7caa02147095d728fd5b65dd120
2012-05-11 11:28:40 +00:00
dan
6a36f43586 Do not consider a DISTINCT clause redundant unless a subset of the result-set is collectively subject to a UNIQUE constraint and it can be guaranteed that all columns of the subset are NOT NULL (either due to NOT NULL constraints WHERE clause terms). Fix for [385a5b56b9].
FossilOrigin-Name: 7b8548b1872cc1225355ba8311e93dd08d6526e2
2012-04-20 16:59:24 +00:00
dan
99f8fb66a4 Fix for 2a5629202f. When considering whether or not a UNIQUE index may be used to optimize an ORDER BY clause, do not assume that all index entries are distinct unless there is some reason to believe that the index contains no NULL values.
FossilOrigin-Name: 9870e4c4fef10112c987c40cb1b95255a7214202
2012-04-20 15:24:53 +00:00
dan
c68939ef3e Disable the LIKE optimization if the column on the left-hand-side of the LIKE operator belongs to a virtual table.
FossilOrigin-Name: 0bacb879e18026f2a8e22fe3e4bc8d27de5c4416
2012-03-29 14:29:07 +00:00
drh
a748fdcc43 Evaluate typeof(X) and length(Y) where X is any column and Y is a blob column
without actually loading X and Y from disk.

FossilOrigin-Name: b899dbeb60752843287e2c6ad3577e1d00f0d587
2012-03-28 01:34:47 +00:00
drh
7a48480d07 Fix harmless compiler warnings.
FossilOrigin-Name: 74eadeec34c4b19cf5f8b7f648db3b7ad601a00e
2012-03-16 00:28:11 +00:00
drh
331b67c151 Candidate fix for the optimizer problem described in ticket
[b7c8682cc17f3] which can causes a LEFT JOIN to be changed
into a INNER JOIN if there are OR terms in the WHERE clause.

FossilOrigin-Name: 0dc4cb935514131c99172175d57feec3a1743aa9
2012-03-09 22:02:08 +00:00
drh
7f67d94cfe Fix a bug [3557ad65a07] that causes incorrect DISTINCT processing on
an indexed query involving the IN operator.

FossilOrigin-Name: dec9a995d7012a1f85be4edb71240b9d4f07c60e
2012-03-03 00:34:47 +00:00
dan
1d8cb21fdb Modify the OP_Once opcode so that it works correctly in trigger sub-programs. This is a candidate fix for [7bbfb7d442].
FossilOrigin-Name: 557c69055a300b4082830b5f4803091dca1c3140
2011-12-09 13:24:16 +00:00
dan
0c733f67d8 Where possible, take advantage of the rowid at the end of index records to optimize range constraints (<, >, <=, >=) on the rowid column.
FossilOrigin-Name: 3b58f5f06648205a47e5cace0201269c406e476a
2011-11-16 15:27:09 +00:00
drh
74e7c8f51f Purge lingering references to SQLITE_STAT2 from the code and test scripts.
FossilOrigin-Name: aed2bf7a3c828a7191389b3f8235a9387977b476
2011-10-21 19:06:32 +00:00
drh
f9b22ca416 Remove stale requirements marks from the query planner.
FossilOrigin-Name: 76de9914bed11abda3898928633ad09d5a284f84
2011-10-21 16:47:31 +00:00
drh
a2153f75c3 Fix an uninitialized variable in OR-clause processing.
FossilOrigin-Name: 54aecd929867606d14a062b501abbfb6f5f05e37
2011-10-18 19:14:33 +00:00
drh
30ddce6ff4 Added the tool/warnings-clang.sh script. Changes so that there are no
warnings with either gcc or clang even including FTS4 and RTREE and
both with and without SQLITE_THREADSAFE=0.

FossilOrigin-Name: 39408702a989f907261c298bf0947f3e68bd10fe
2011-10-15 00:16:30 +00:00
drh
b07028f71c Add assert() statements and eliminate needless variable assignments in order
to get the clang scan-build utility to report zero problems against the
SQLite core.  Clang's static analysis did find one real problem - but it was
in the command-line shell, not in the SQLite core.

FossilOrigin-Name: 60fee9574b0125705787e33c16f116cf188c8323
2011-10-14 21:49:18 +00:00
drh
67855877ff Fix requirements marks associate with STAT3.
FossilOrigin-Name: 9325c1a8c413dfbf0381190d8347f0a446ae5f5b
2011-10-11 12:39:19 +00:00
drh
0a61df670e Add testcase() macros to ensure good test coverage.
FossilOrigin-Name: 5c132592820e9dc2355e26ea14e155c797c335b3
2011-10-07 17:45:58 +00:00
drh
9ef61f4f4e Prevent infinite recursion of in the query planner for some pathological
test cases by disabling OR-clause processing upon first recursion.

FossilOrigin-Name: 9fca05eac503d712886a05d03794f76c61fb39ed
2011-10-07 14:40:59 +00:00
drh
8871ef5afd Begin an effort to enhance the query planner to do a better job with OR terms
in the WHERE clause.  This change allows ANDs outside of the OR to be factored
into the OR terms if that is helpful in finding better indices.

FossilOrigin-Name: 876bd21aaac444c7e056730e35696a74e9a1af0a
2011-10-07 13:33:10 +00:00
drh
567211ed0e Testability enhancements.
FossilOrigin-Name: be44928cf2a3c063c8228b769d90947acbfad1ef
2011-09-23 13:59:33 +00:00
drh
5c62486cd8 Fix an issue in ANALYZE when STAT3 is disabled but both sqlite_stat2 and
sqlite_stat3 tables exist.  Also add testability tweaks to the STAT3 code.

FossilOrigin-Name: 3ca7e449e2e20d95e516cf7fe87bfa0b51c07086
2011-09-22 18:46:34 +00:00
drh
93c6384ca6 Fix an uninitialized variable and a misuse of memcpy().
FossilOrigin-Name: ee110d5a4a6f29400bb632a9a18c7dcd04638657
2011-09-22 00:28:55 +00:00
drh
d3ed73406c Pull in the latest changes from trunk. Update the STAT3 documentation.
FossilOrigin-Name: 63fc3e4bea6a7f5dc34b2af83f30458eb10b8fe0
2011-09-21 00:09:41 +00:00
drh
5c4e5e53fe Merge all the latest trunk changes into the experimental STAT3 branch.
FossilOrigin-Name: 51908c8f2bc6c086570f7493a29b096f0a40ce34
2011-09-16 19:29:58 +00:00
drh
a464c23429 Remove unreachable branches from the previous change. Add additional
test cases.

FossilOrigin-Name: cf51ef8ab8a610ddf64f66970dd689fe1df405b8
2011-09-16 19:04:03 +00:00
drh
8850177924 When analyzing the right-hand side of IN operators to see if the IN operator
can work with an index, be sure to decend into nested subqueries.
Fix for ticket [1a1308d2538d7]

FossilOrigin-Name: 0156f10e23daca0e2504cd293a67ed0233d254d0
2011-09-16 17:43:06 +00:00
drh
48f2d3b10a Add the new OP_Once opcode. Use it to clean up and simplify various
one-time initialization sections in the code, including the fix for
ticket [002caede898ae].

FossilOrigin-Name: 7f00552b739fad79517b042a6ed61abe743a917b
2011-09-16 01:34:43 +00:00
drh
6825719667 Fix a few harmless compiler warnings. Add SQLITE_ENABLE_STAT3 to the
standard compiler warning script.

FossilOrigin-Name: 3d68f9afee02f95103eb1682b8f2362f8d249437
2011-08-16 17:06:21 +00:00
drh
4e50c5ec48 Further testing and bug fixing for sqlite_stat3. Added the Index.avgEq
field to index statistics.  Fixed several problems in the query planner
associated with stat3.

FossilOrigin-Name: 89b2f70884cad0abdf4c66cb64ecddb2820ded74
2011-08-13 19:35:19 +00:00
drh
faacf17cc1 Begin a branch that experimentally replaces sqlite_stat2 with a new table
called sqlite_stat3 that will hopefully facilitate better query
planning decisions.

FossilOrigin-Name: 52e1d7e8ddd4bb5ef3a9d00fd2d719a8a784f807
2011-08-12 01:51:45 +00:00
drh
b4256996c4 Make sure IS NOT NULL constraints work on virtual tables.
Fix for ticket [6c14288a473ceff].

FossilOrigin-Name: a55f4ab99952a731e4cd8f6ef17389062e5ed4c5
2011-08-02 01:57:39 +00:00
drh
bf4ec555fa Do not try to use STAT2 to refine the row estimate of a query that
uses a unique or nearly-unique index.

FossilOrigin-Name: efffc49baf38698ed3de05d16b4261bf405d42d7
2011-07-13 18:31:10 +00:00
drh
f1d3e32909 In where.c::findIndexCol - make sure that the Expr.op is TK_COLUMN before
accessing the Expr.iColumn and Expr.iTable fields.  Also fix a couple of
unreachable branches.

FossilOrigin-Name: 418a4da2a96cf33055f18c9a667754fad2111cf3
2011-07-09 13:00:41 +00:00
dan
da79cf0cc9 Fix for [54844eea3f]: Do not create automatic indexes on correlated sub-queries.
FossilOrigin-Name: 9f14fa56ba31afe3de8b0cf26ed09573a2cc2283
2011-07-08 16:10:54 +00:00