Commit Graph

637 Commits

Author SHA1 Message Date
drh 459f63e7ed Fix a bug (ticket [fc7bd6358f59]) that caused incorrect query results in
three way queries that involved comparing INTEGER and TEXT columns for
equality.

FossilOrigin-Name: 7097241c1220ada318f8eda938c3e3430b94a606
2013-03-06 01:55:27 +00:00
drh 5edf8435d3 Fix a potential NULL-pointer dereference following an OOM error
in the query planner logic for virtual tables with OR-connected terms.

FossilOrigin-Name: 71b6c26053fdf2a5a84116e005bad1f2ca873a66
2013-02-08 23:18:18 +00:00
drh 3667033bfc Make sure the virtual tables that take advantage of IN operators sort the
RHS of the IN operator in the correct order according to the ORDER BY
clause.

FossilOrigin-Name: b016b7546d6fbfba06019398b9ac239b0cbe9086
2013-02-08 20:39:02 +00:00
drh 2d96b934c8 Loop through the elements on the RHS of an IN operator in reverse order when
the ORDER BY clauses specifies DESC.

FossilOrigin-Name: f78395c8896666bb1359b83fbcd58d5e3dbc39d3
2013-02-08 18:48:23 +00:00
drh c3e552ff5c Allow the "a=?1 OR a=?2" to "a IN (?1,?2)" transformation to work on virtual
tables again.  This was formerly restricted because virtual tables could not
optimize IN terms.  (See check-in [fad88e71cf195e].)  But IN terms are now
used by virtual tables (as of check-in [3d65c70343]) so the restriction can
now be removed.

FossilOrigin-Name: a917c1f09254b54e03e31b119cc49c551269d82e
2013-02-08 16:04:19 +00:00
drh 1b8fc65b92 Allow an index to be used for sorting even if prior terms of the index
are constrained by IN operators.

FossilOrigin-Name: 98bf668ab1a8683b46ee8c94cb60f8215aabc517
2013-02-07 21:15:14 +00:00
drh 928d9c6209 Fix harmless compiler warnings.
FossilOrigin-Name: 4a7b4ee011fea911b981206c242e3d5553303b52
2013-02-07 09:33:56 +00:00
drh eb5bc9261c Add the ability to disable transitive constraints using the
sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS) interface.

FossilOrigin-Name: 593d67c8b0908daf7a70b2a310ed85515d384cbf
2013-01-17 16:43:33 +00:00
drh 63db0392ae Avoid unnecessary collating sequence and affinity restrictions on the use
of transitivity.  Add test cases to show that the restrictions are not 
needed.

FossilOrigin-Name: 56549f45666b53876012df5c2bdf813474e10925
2013-01-17 16:18:55 +00:00
drh 738fc79dcf Make more aggressive use of transitivity in optimizing queries. Add a test
case.

FossilOrigin-Name: d96762841a461e192fb2f317d684d000376350dd
2013-01-17 15:05:17 +00:00
drh 58eb1c0af1 Improved comments explaining the operation of the findTerm() utility routine
in where.c.  Increase the maximum number of levels of transitivity from 4
to 11.

FossilOrigin-Name: fe152f8b048c9a18f99fa6096ff0e68dd630c318
2013-01-17 00:08:42 +00:00
drh 7a5bcc0f08 Enhance the query planner to exploit transitivity of join constraints in
a multi-way join.

FossilOrigin-Name: 13171eb5dc19733276fbfd5515d75b70a9f5f5d7
2013-01-16 17:08:58 +00:00
drh 3bd5ab8638 Improvements to query planning for joins: Avoid unnecessary calls to
"optimal scan" checks in cases where table reordering is not possible.
Make sure optimal scan checks are carried out for CROSS JOINs and LEFT
JOINs.

FossilOrigin-Name: d5ebb7877885839e93eee3b322624d4c4215c1c4
2013-01-16 00:46:09 +00:00
drh ea84a65e4e Fix a missing word in a comment. Enhance the "wheretrace" debugging output
to show the estimated cost of each table option while planning the join order.

FossilOrigin-Name: ac4e119a87497f2e422ff1cb711112ed8594bfa9
2013-01-15 18:49:07 +00:00
drh 5d5cf01ee0 Clarification to a comment in where.c. No code changes.
FossilOrigin-Name: 04507c176330a06b09dcafa35ec0ca7498f5ace7
2013-01-15 16:15:28 +00:00
drh 29a8bf8e94 Fix an over-aggressive optimization of ORDER BY on a three-way join where the
second table is UNIQUE and the ORDER BY occurs on the third table.
Ticket [598f5f7596b0557].

FossilOrigin-Name: 5774f2175ce621dfc4b6b93f7ee13fd66f3ec2b9
2013-01-09 11:31:17 +00:00
drh 7ee751d241 Proposed fix for ticket [a7b7803e8d1e8699cd8a].
FossilOrigin-Name: 3d0e00c731c39af91bad74c6d74853375bac356e
2012-12-19 15:53:51 +00:00
drh d03025327e Remove an unreachable branch. Improvements to comments.
FossilOrigin-Name: d2fb7619b063b329b6d7ba9a16a7290e5d868f23
2012-12-14 17:48:08 +00:00
drh 03597ef6e2 Merge in all the trunk changes that have occurred since this branch was
opened.

FossilOrigin-Name: 6d507e4de924e2f4556ea4a03ee0fa7d647bf8bb
2012-12-14 15:54:05 +00:00
drh e40ed78c1c Fix the virtual table IN optimizer so that it work even if the virtual table
implementation leaves the sqlite3_index_info.aConstraintUsage[].omit flag
clear for an equality constraint that it intends to use.

FossilOrigin-Name: d6e045f89c5a4b500b1da7ea1224b132909bafc6
2012-12-14 15:36:17 +00:00
drh 04229acebc Factor some work out of the index loop of the bestBtreeIndex() routine for
a small performance increase.

FossilOrigin-Name: 92c9ab56b1c67b9468bec57ab1d2c483a69a2810
2012-12-08 22:14:29 +00:00
drh 261d8a51e2 Adjustments to the collating-sequence refactoring to facilitate full-coverage
testing and to fix some minor issues found by TH3.

FossilOrigin-Name: cdbfa664839a409589ec7cebfc9111235d2f3b38
2012-12-08 21:36:26 +00:00
drh fb76f5a00c Make sure WHERE clause constraints A=B and B=A work the same even with
COLLATE clauses.

FossilOrigin-Name: b3f53668115f0a12a01167c2a75eecc735416024
2012-12-08 14:16:47 +00:00
drh 580c8c1816 Veryquick passes all tests now.
FossilOrigin-Name: 7b96115e81deab0aa0472839cf787ba3f2fc64a7
2012-12-08 03:34:04 +00:00
drh 7a66da1395 Many more tests are passing. Only about 100 failures remain in veryquick.
FossilOrigin-Name: f9fa7581c0371fe0feb4e97487741ade18595810
2012-12-07 20:31:11 +00:00
drh 0a8a406e9b Some errors in veryquick resolved. Many more to go.
FossilOrigin-Name: 972443b4eb282d45507da06c75e2cd46dd72326b
2012-12-07 18:38:16 +00:00
drh 4b17cf5855 Veryquick now row to completion without segfaulting or asserting. But there
are still lots of errors.

FossilOrigin-Name: 7fafab12e4c0c832c421975f8329c3214403d281
2012-12-07 14:02:14 +00:00
drh ae80ddea9f Remove the Expr.pColl field and compute the collating sequence as it is needed.
This fixes the test script "shared9.test", though there is still a memory leak.
And there are other problems.  Consider this a work-in-progress.

FossilOrigin-Name: fd011cb22f2d899d94ec7ce22641d7a8f5e19972
2012-12-06 21:16:43 +00:00
drh fc5e546641 Make sure that the optimization that set the maximum column that will be used
on a particular query does not mistakenly change an opcode other than
OP_OpenRead or OP_OpenWrite.  In particular, make sure it does not overwrite
the P4 field of an OP_SorterOpen.

FossilOrigin-Name: b0c1ba655d69c0c46c16ea2aef4e6c9a3e6ce3fb
2012-12-03 17:04:40 +00:00
drh ada796bbaa Disable the table selection rule that tried to prevent full table scans from
migrating to the outer loop unless they were optimal.  The new scaling of 
outer-loop costs by cost of inner loops obviates the need for that step.  And,
in fact, that step causes problems with the new inner-loop cost accounting.

FossilOrigin-Name: 51bfd63b7f9fe53831570ad124c932cb3582b104
2012-11-09 18:22:26 +00:00
drh 782d68a4cd Try to take into account the cost of inner loops when selecting which table
of a join to use for the outer loop.

FossilOrigin-Name: 942556342a332b04a11169bb04f387d741ef9488
2012-11-09 17:59:26 +00:00
drh da998c8ec0 Make sure that the optimizer never tries to create an automatic
index on a coroutine subquery.

FossilOrigin-Name: f83aa0de8470748b3cd0bff232aeea3baf8dae53
2012-10-30 15:31:31 +00:00
drh 21172c4cc0 Add an optimization that attempts to run a subquery as a coroutine rather
than manifesting it into a temporary table.

FossilOrigin-Name: 7af3acbbd49a2114fcdada9ec907c68ba9b053bd
2012-10-30 00:29:07 +00:00
drh 447b289ec8 Make sure the automatic index optimization is checked even if the
covering index scan optimization was previously selected.

FossilOrigin-Name: ac1d5d8a553d8ba76a332eed9d563ce7f04a7a37
2012-10-26 18:40:01 +00:00
drh 281bbe2a95 Enable optimization of IN operators on constraints to virtual tables.
FossilOrigin-Name: aa650746b19e4a6a373f7e47effff3ab2f48e78c
2012-10-16 23:17:14 +00:00
drh 90abfd086f Merge the fix for ticket [d02e1406a58ea02] into trunk.
FossilOrigin-Name: dd34bec389359845b86f4cc4906ab440f92dcab9
2012-10-09 21:07:23 +00:00
drh 2f546ee914 Bring some comments up to date in the query planner, and especially the
ORDER BY optimizer.  Also add testcase() macros.

FossilOrigin-Name: bb5c0f1c92b48631d4a12cd4f321b53cd07885c8
2012-10-09 09:26:28 +00:00
drh 86257fff87 Remove an unused variable. Fix code that occurs before a variable
declaration.

FossilOrigin-Name: 01dc032b5bbd9c9ebb1965f176ca5d732cda85ea
2012-10-09 01:39:25 +00:00
drh 69a76bad73 Replace an always-false conditional with an assert().
FossilOrigin-Name: 981b9943e4b2b660690ec1ac145abdd3c74f8dd2
2012-10-09 01:23:25 +00:00
drh 3a17ea7ab6 Merge ORDER BY optimization refactoring and repair into trunk.
FossilOrigin-Name: c027a9af9137f3346dbb5c5e100a087c2e89797b
2012-10-08 21:51:58 +00:00
drh 2fad815c52 All test cases (veryquick.tcl and min.rc) pass. A few branch operations in
ORDER BY optimization logic are untested by min.rc.

FossilOrigin-Name: 8314fd6078a3a71aea9d6386ff277cfeb592b4ba
2012-10-08 21:01:15 +00:00
drh 6b9e565e54 Further tweaks to the ORDER BY optimizer, to fix a bug and to get the
optimizer to recognize some additional cases.

FossilOrigin-Name: bcb4f262476193cfb17818d8c62bab528dddeef9
2012-10-08 20:27:35 +00:00
drh 0a4c741cab Bug fixes in the ORDER BY optimizer.
FossilOrigin-Name: 301bbee4045aa169e29fb4fb75743b71eb4760a1
2012-10-08 19:41:38 +00:00
drh 8e4af1b997 Continued refactoring of the ORDER BY optimization logic. This check-in
is close to working, but it still has issues.  A few test cases fail.

FossilOrigin-Name: adbdc663f3d22ff03f21040a811d585cf2218626
2012-10-08 18:23:51 +00:00
drh 79e72a50aa Consolidate all occurrences of the "no such collation sequence" error message
into a single spot.

FossilOrigin-Name: 8ea67522fb03134f355ecb776b70c6917241cab2
2012-10-05 14:43:40 +00:00
drh 4f68d6c8c0 Yet another refactoring of ORDER BY logic in the query planner. This
particular check-in works mostly, but still has a few minor issues.

FossilOrigin-Name: 8f4487450be1a2b0371f8251a967cbe341b2dea1
2012-10-04 12:10:25 +00:00
drh 613a53a029 Fix an out-of-order memset() that occurs before all variable declarations
are finished.  Also fix a line that exceeds the 80-character line length
limit.

FossilOrigin-Name: ba2f492f957ab5556cd540e21a76ebb75efea725
2012-10-03 18:09:32 +00:00
drh 6f0e400cba Fix a query planner problem that only occurs when covering-index-scan is
disabled.  Fix to tests whose output changed due to the new and more
aggressive ORDER BY optimization.

FossilOrigin-Name: 0f9bb90100aa304a7f28023ca4173e68b445e8bd
2012-10-03 12:38:19 +00:00
drh d663b5bdef Further attempts to optimize out unnecessary ORDER BY clauses.
FossilOrigin-Name: 6744d9a37faffed59b4d5cb96c8671ec46a87ea7
2012-10-03 00:25:54 +00:00
drh afcd522af8 More lenient handling of ORDER BY optimization in joins with mixed ASC/DESC.
This is a better and less restrictive fix for the problem addressed by
the previous check-in.

FossilOrigin-Name: abcf6a5d054559ee5a093ba39180c47b4958d9cd
2012-10-02 15:19:19 +00:00