Commit Graph

556 Commits

Author SHA1 Message Date
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
drh a9b1b91436 Extend the SQLITE_TESTCTRL_OPTIMIZATIONS option to disable DISTINCT
optimizations.

FossilOrigin-Name: 18501dd1a8aa8299c091c36e35b9a10a29d4467b
2011-07-08 13:07:02 +00:00
drh b24d83fb35 Add a testcase macro to ensure testing a boundary case in DISTINCT processing.
FossilOrigin-Name: ff9fc722dc481df1ce6a9733db1f033b88141d5d
2011-07-02 19:12:05 +00:00
dan 969e5595e8 Ensure that automatic indexes are only created in scenarios where they may be used more than once.
FossilOrigin-Name: 27c65d4d9c58bfc4ea8f9337fa15090459fb26c5
2011-07-02 15:32:57 +00:00
dan 94e08d92f9 Fix a broken assert() in where.c.
FossilOrigin-Name: 090b29177fbc9faa83b560d92ddc3710d291776e
2011-07-02 06:44:05 +00:00
dan 6f3439697e Improve use of indexes to optimize DISTINCT queries.
FossilOrigin-Name: 6c202ea0247ff509f696eee3839975a88ed26cf2
2011-07-01 18:26:40 +00:00
dan 50118cdfdb Improvements and tests for detection of redundant DISTINCT qualifiers.
FossilOrigin-Name: 7337293c87fb563604dd6ad284f2d1e30c938b4c
2011-07-01 14:21:38 +00:00
dan 38cc40c216 Experimental changes to improve optimization of DISTINCT queries.
FossilOrigin-Name: f7ba0219ef2f235543c258be736955d91ca5ecce
2011-06-30 20:17:15 +00:00
drh c2822b76b4 If the keyword "unordered" appears at the end of the SQLITE_STAT1.STAT
column for an index, then use that index for equality lookups only, never 
for range queries or sorting.  This feature is currently undocumented and
my change or be removed in a future release.

FossilOrigin-Name: 8a42e236701c8afd9ada7d4568712a21690ea087
2011-04-09 03:20:59 +00:00
drh ea6dc4458b Always make sure the left-hand side of the IS NOT NULL operator is a
smiple column, not a general expression, before applying the IS NOT NULL
query optimization.

FossilOrigin-Name: 543f75a6abe3aa4f49df43e71a462702d40b3251
2011-04-08 21:35:26 +00:00
drh 041e09f189 Change two new internal functions in where.c from global to file scope.
FossilOrigin-Name: 5bbfa17d4d6db18f8077f758d70c1bc253b58e2e
2011-04-07 19:56:21 +00:00
drh fcd71b6010 Suppress many harmless compiler warnings, mostly signed/unsigned comparisons
within asserts or unused parameters in extensions.

FossilOrigin-Name: 3eeb0ff78d04891b5fd1a3d99a9fb8cfbed77a81
2011-04-05 22:08:24 +00:00
drh ce62d93837 Fix two compiler errors associated with non-standard compile-time options.
FossilOrigin-Name: e3bf2d5ce4f87535e030a446e03d911f421805f7
2011-04-01 02:26:36 +00:00
drh d6ee353c84 If the keyword "unordered" appears at the end of the SQLITE_STAT1.STAT
column for an index, then use that index for equality lookups only, never
for range queries or sorting.

FossilOrigin-Name: 3b964155f611c437d53d44feafa22f531942b1b4
2011-03-29 15:00:17 +00:00
drh ac8eb11375 Comment enhancement to better explain the logic in the "x IS NULL"
optimization.

FossilOrigin-Name: 869f894798a65f8bc0e0b083866a784fa0189f68
2011-03-17 01:58:21 +00:00
drh 1f9c7663ce Enhances to the query planner such that "x IS NULL" constraints take the
STAT2 statistics into account, just like "x=VALUE" constraints.

FossilOrigin-Name: 2353176811f752a16c1f2351a3d3431919b062a9
2011-03-17 01:34:26 +00:00
drh 95e037ba39 Omit unnecessary OP_Next and OP_Prev operators when uniqueness constraints
guarantee that the code will only make one pass through the loop.

FossilOrigin-Name: f000c9b2b7348238fe2085140d2dd05294a19709
2011-03-09 21:02:31 +00:00
drh c126e63e4f Remove dead code identified by the clang static analyzer.
FossilOrigin-Name: 01a79d5a7af48fb7e50291c0c7c6283d3fb359d0
2011-03-06 21:28:32 +00:00
drh 92e4feb74c Do a better job of choosing the join table order when the tables having
very different numbers of rows.

FossilOrigin-Name: 952f5e8c69904c48f2decfabf8ea60a2e9f3e134
2011-03-04 00:56:58 +00:00
drh 0cf0e6c912 Remove an assert() that was made redundant by the previous checkin.
FossilOrigin-Name: 21db719156deef9fb26aff27a01e324da255c825
2011-02-17 13:52:02 +00:00
drh 6f2e6c0026 Add an ALWAYS() around a always-true test in where.c.
FossilOrigin-Name: 8123283ee1a360586a1721a56b4db15718c25ee0
2011-02-17 13:33:15 +00:00
drh 650f432e33 Fix harmless compiler warnings in the query planner.
FossilOrigin-Name: 31fc4ba66e76876b2e7b6b2b74c07f47571938ce
2011-02-16 23:32:24 +00:00