Commit Graph

1312 Commits

Author SHA1 Message Date
drh a3f108e93d Reduce the size of the WhereScan object by 24 bytes while also clarifying its
operation.

FossilOrigin-Name: cbc3c9a8bf169ae0b21f26855038502c6cc25cfe
2015-08-26 21:08:04 +00:00
drh 567cc1e407 Move sqlite3IndexColumnAffinity() inside of SQLITE_ENABLE_STAT3_OR_STAT4.
FossilOrigin-Name: b3732a4e1b42a86675d89766cb8089914e2fab9a
2015-08-25 19:42:28 +00:00
drh e910769817 Use the sqlite3IndexColumnAffinity() routine to quickly and correctly find the
affinity of an index column.

FossilOrigin-Name: 1ee089a72d789002a0a377347fc51e08ab32fb14
2015-08-25 19:20:04 +00:00
drh c1bd84124b Merge recent enhancements from trunk, including table-valued expressions.
FossilOrigin-Name: b9927c876c1d4e146cb6a603d82cd2489594084d
2015-08-20 23:45:59 +00:00
drh 01d230ce05 A list of arguments following a table name translates into equality
constraints against hidden columns in that table.

FossilOrigin-Name: 40e12cfe4c29475417ba89fb637b4c763cf74016
2015-08-19 17:11:37 +00:00
drh 8a48b9c0b1 Minor refactor of the SrcList object so that it is able to hold the argument
list to a table-valued-function in the FROM clause.

FossilOrigin-Name: b919376147597c4b73421abe5788f893baf1560b
2015-08-19 15:20:00 +00:00
drh 2f2b02785a Fix the cursor hint mechanism so that it does the right thing for indexed
lookups.

FossilOrigin-Name: 581e3d4988e98975fea5daaeb9f854c54a4976b7
2015-08-14 18:50:04 +00:00
drh cf599b6ade Enhance the query planner so that it is able to use partial indexes that use
AND-connected terms in the WHERE clause.

FossilOrigin-Name: 065765902d2774d7432b9c00ea2efed26e0aaa5e
2015-08-07 20:57:00 +00:00
drh 36b80349b7 Add the OP_ColumnsUsed opcode (when compiled with
SQLITE_ENABLE_COLUMN_USED_MASK) as a hint to the b-tree layer as to which
columns of a btree cursor will be used.

FossilOrigin-Name: 711a176cbfad5dde6defa9648fba6d0d663af134
2015-06-12 12:54:15 +00:00
dan 4430b40934 Remove some repeated lines of source code. Probably introduced by careless cut'n'pasting.
FossilOrigin-Name: a34cd71c8aafaece04a2332a127e9b8e99c1403c
2015-06-09 10:58:51 +00:00
dan 35175bf7ab If a query contains "FROM t1 LEFT JOIN t2, t3, t4", ensure that tables t3 and t4 are not scanned before t2. The trunk already does this.
FossilOrigin-Name: 0d9edfab9fb61322620f188b48ae2a1798a07581
2015-06-08 18:48:29 +00:00
dan 4f20cd402b Avoid passing constraints that are unusable due to LEFT or CROSS joins to virtual table xBestIndex() methods.
FossilOrigin-Name: 80ee56dda7db3860f8be5f6968c8745138f8453f
2015-06-08 18:05:54 +00:00
drh 6c1f4ef217 Split more subfunctions of where.c out into a new whereexpr.c source file,
for improved maintainability.

FossilOrigin-Name: 46ef95c108ad8961f2bf3d2dc839d4fb1fddd770
2015-06-08 14:23:15 +00:00
drh 6f82e85a80 Split out the bulk of the actual VDBE code generation logic from where.c
into a new file, leaving behind the analysis logic.  This makes the original
where.c smaller and hopefully easier to edit.

FossilOrigin-Name: faa0e420e93a2bc1c84df9eb9fef4748d29ce339
2015-06-06 20:12:09 +00:00
drh b121dd14ac Code simplifications in select.c and where.c.
FossilOrigin-Name: 4f20ac90bce8bd7ba43ef59af5cc4ef7aa282fe8
2015-06-06 18:30:17 +00:00
drh 97bae794c2 Add a new opcode to the VDBE that gives the b-tree a hint about the set
of columns in a table or index that are actually used by the query.

FossilOrigin-Name: f167bba446b78dd7538d0b2bae3e6678f3b1ba28
2015-06-05 15:59:57 +00:00
drh d62fbb50e6 Change the name of SrcList.a[].zIndex to the more descriptive
SrcList.a[0].zIndexedBy.

FossilOrigin-Name: 6a9cf063379118dbb95c6cdc6d60af50e9867177
2015-06-04 12:08:53 +00:00
drh 05883a3409 Rename SQLITE_AFF_NONE to SQLITE_AFF_BLOB.
FossilOrigin-Name: bce3f04186cd2d69414a5a98b5b77dc8f060554a
2015-06-02 15:32:08 +00:00
drh d092ed4355 Add some extra source-code comments and a test case.
FossilOrigin-Name: 6d410442fb532e2cf0ad1859bc9e843651f8ff4d
2015-05-29 14:36:30 +00:00
drh 7b3aa08e22 An attempt to allow automatic index creation on subqueries accessed via
co-routine.

FossilOrigin-Name: 521345add67e9dfd7df1446eb942aa0d84b9e6eb
2015-05-29 13:55:33 +00:00
drh c4d56dd74b Use an ALWAY() on conditionals in the transitive constraint logic that are
always true as far as we know.

FossilOrigin-Name: 204e567f68e4b3e069f04ca0643c6e5db781d39f
2015-05-18 12:18:37 +00:00
drh 69c15fee98 Refinements to the determination of when an A==B term is an equivalence.
Add test cases.

FossilOrigin-Name: 6bfaf525cac2e0c0a4a3bd3a1fc7bf5bd3234303
2015-05-18 11:34:52 +00:00
drh 5820118da5 Further restrictions on the use of the transitive property in WHERE clauses.
FossilOrigin-Name: 8c886c43ff0bd5953d289534791d2c6b9dc25445
2015-05-16 20:51:25 +00:00
drh ea19cc10f5 Fix the transitive constraint processing to only allow transitivity if the
operands of the == or IS operator have compatible affinities.

FossilOrigin-Name: a46a247fbcfe6e63b12cef31353835295a650c9b
2015-05-16 19:17:17 +00:00
drh e655a0e34e Fix a typo in a comment. No changes to code.
FossilOrigin-Name: ee4b74250ad7a4061421d44b490cb79f649b3720
2015-05-16 18:31:44 +00:00
mistachkin 4e5bef8c00 Minor coding style change, adjust new local variable casing for consistency.
FossilOrigin-Name: 1a4628c66c632d2aff02bf134ddf7adceb04fb84
2015-05-15 20:14:00 +00:00
dan 3072b537f5 Do not assume that "col IS ?" matches at most a single row of a UNIQUE column unless the column is also NOT NULL.
FossilOrigin-Name: e038ce8955e785afcc07bb22499955bbd22a7af4
2015-05-15 19:59:23 +00:00
drh 4a00b33c02 More test cases. Remove some invalid testcase() macros. Rearrange some code
for improved testability.

FossilOrigin-Name: b3676377b257bd8bb7fefe9c365d76cdc9e44856
2015-05-14 13:41:22 +00:00
drh ee14587c39 Add testcase() macros. Get transitive WHERE clause constraints on IS operators
working again.

FossilOrigin-Name: d195d4a65d7184e34a2a08c3ac3db7f6c8c1c21c
2015-05-14 13:18:47 +00:00
drh e8d0c61f0a A new implementation of indexing with the IS operator that works correctly
when the IS operator is in the WHERE clause and the operands are from 
opposite sides of a LEFT JOIN.

FossilOrigin-Name: 4541688b3f56f5cd3d5b299594b58c577ad633bb
2015-05-14 01:05:25 +00:00
drh 9be1870994 Simplified implementation of indexing with the IS operator.
FossilOrigin-Name: 95b1f9bf14e490c6c6bba9ea78aeab712a44aab5
2015-05-13 19:33:41 +00:00
drh e0cc3c296c Add testcase() macros and comments and a few test-cases.
FossilOrigin-Name: 24263d08b11c88416d270013bdaf5ff45125cb4d
2015-05-13 17:54:08 +00:00
drh fcd49531c9 An early attempt to get indexes to work with the IS operator. This code
passes tests, but much more testing is needed to verify that it works on
all corner cases.

FossilOrigin-Name: 6f7f1673d00d216a5aa456acb44793a14f3b3d91
2015-05-13 15:24:07 +00:00
drh c049057242 Cleanup of the sqlite3StrAccumInit() function. No functionality changes.
FossilOrigin-Name: 7952c32268aa650d9ee946d5bfe190f712e3bbe6
2015-05-02 11:45:53 +00:00
dan f89aa47f80 Fix an obscure memory leak that could follow an OOM in where.c.
FossilOrigin-Name: 08ec9f2f5a446774bb8e9b9b0ef463dd5458d28e
2015-04-25 12:20:24 +00:00
drh 0f517ea8d4 Make sure the whereSplit() routine in the query planner is not confused
by the likely() operator.

FossilOrigin-Name: 588db14ffb4b0e8e76d511b7b1541db3ec78836a
2015-04-21 02:12:13 +00:00
mistachkin 19b887e4ec Fix another harmless compiler warning.
FossilOrigin-Name: 5ae853aaebaee76c9265061984185f74c10c4c8b
2015-04-19 23:48:10 +00:00
drh 29031837c1 Remove an incorrect ALWAYS() from the automatic index generator.
FossilOrigin-Name: eeb4bd06bf69e411736cc6077d1d64af6bd8fb09
2015-04-15 07:34:25 +00:00
drh 65df68e8c5 Correctly deal with an unknown collating sequence on an indexed DISTINCT query.
FossilOrigin-Name: a0b6e2fed3e95cf78ed0515c6e4da7510af4e86a
2015-04-15 05:31:02 +00:00
drh 11b0481778 Avoid problems when a query has a GROUP BY and an ORDER BY but no FROM clause.
FossilOrigin-Name: e527d96a1e098ade4e9d124b630a8c2ea2ac9b36
2015-04-12 01:22:04 +00:00
dan 2813bde028 Do not assume an index contains unique entries unless it is declared UNIQUE and NOT NULL is specified for all columns. Fix for [7b4fee9f6c].
FossilOrigin-Name: e3b1f625518edc0e925116668dca5d25c3232b59
2015-04-11 11:44:27 +00:00
drh e0997b341b Provide the BTREE_SEEK_EQ hint to the b-tree layer.
FossilOrigin-Name: e750830f1e61160c0c67e35b13e50b35a95b50e1
2015-03-20 14:57:50 +00:00
dan 80103fc614 Fix a problem causing collation sequence names to be dequoted multiple times under some circumstances.
FossilOrigin-Name: eddc05e7bb31fae74daa86e0504a3478b99fa0f2
2015-03-20 08:43:59 +00:00
dan f104abba84 Make SQLite slightly more likely to use an auto-index within a sub-query.
FossilOrigin-Name: ab832336f4a28193c4d2b61e833564822a7b86a8
2015-03-16 20:40:00 +00:00
drh 29894b6d2b When the WHERE clause contains two OR-connected terms with identical
operands but different operators, try to combine them into a single term.
Example:  (X=A OR X>A) becomes (X>=A).

FossilOrigin-Name: 8bdda827a3d268009297a0216e3d94bf0eceeb2e
2015-03-16 17:48:12 +00:00
drh c03acf2ea7 Improved comments. No code changes.
FossilOrigin-Name: 23f71a26386ff2aff9800fe96cec1dc9c805b5b6
2015-03-16 13:12:34 +00:00
drh 8426636cdc When a WHERE clause contains disjuncts with the same operands, try to
combine them into a single operator.  Example:  (x=A OR x>A) becomes
(x>=A).

FossilOrigin-Name: 7a3097689d17625fb0dfc4372712f375f3bdb9a1
2015-03-16 12:13:31 +00:00
dan a3d0c13654 When estimating the number of rows visited by a range scan for which the keys consist of more than one field, consider prefixes of stat4 samples as well as the full samples.
FossilOrigin-Name: e1caf93c9ad0ee15d42030af95619f212d3fcf9d
2015-03-14 18:59:58 +00:00
drh 8031462939 Fix the LIKE optimization so that it works even if there are additional
range contraints on the column that is subject to the LIKE or GLOB.

FossilOrigin-Name: 984c3fd5261619fb542a5a95dab37707b5d79dbf
2015-03-09 13:01:02 +00:00
drh a40da62dd4 Always use LIKE optimization range constraints in pairs.
FossilOrigin-Name: 0e02dc94fd1bb891d0edd1e34b57e923b17712a7
2015-03-09 12:11:56 +00:00