aboutsummaryrefslogtreecommitdiff
path: root/src/wherecode.c
Commit message (Collapse)AuthorAge
...
* | Add VdbeCoverage() macros. Adjust the Bloom-filter hash function so that itdrh2021-12-04
| | | | | | | | | | correctly deals with zero-blobs. FossilOrigin-Name: 629ee2e3e3125bfd2af435c6713d49e46691213ad15db0a5e93a63a77f1130c2
* | Apply the Bloom filter only on those terms of an index that have equalitydrh2021-12-04
| | | | | | | | | | constraints. FossilOrigin-Name: a70429596a3c6a413b03118b0d800521b3526d99dcf88a48acc3189b51518d82
* | Add the "WITH BLOOM FILTER" clause to the EXPLAIN QUERY PLAN output fordrh2021-12-04
| | | | | | | | | | cases were a Bloom filter is used. FossilOrigin-Name: 8e078c0e404fe4b3661dd4a11a992a8914c99e2a144cecc417421cbd68fa08cc
* | Add a Bloom filter to the automatic-index mechanism.drh2021-12-01
|/ | | FossilOrigin-Name: 50ac4de1d7cbb586ea7969e1ae80ea8b021e194edc2fa7db19374b4ee9369bee
* Proposed fix for a problem associated with OP_SeekScan that results in andrh2021-11-02
| | | | | incorrect answer. See ticket [5981a8c041a3c2f3]. FossilOrigin-Name: 266e9cbada531716c908c21d60a6038109722e3dd040237679ac0240fb5020ea
* Protect the WhereTerm.u union using nearby assert()s and/or branches.drh2021-10-15
| | | FossilOrigin-Name: 8a56de5b9c6f4522000f8d991373490b67b9e9d97f03c1ca2cf32816d84789ef
* Protect access to the WhereLoop.u union using nearby assert()s anddrh2021-10-14
| | | | | branches. FossilOrigin-Name: bdd840216cc4c5293c112f182a189f7562b3cc0f6270e3c4af5eb2e8bd61ccc9
* Protect access to the Expr.y union using nearby assert()s and branches.drh2021-10-07
| | | FossilOrigin-Name: 87e2f5eb436fc448427b0e24fb70f29688796b513b8c7b12f1a21540dae1e56d
* Protect all accesses to the Expr.x union using nearby assert()s and branches.drh2021-10-07
| | | FossilOrigin-Name: 8eaa1d4a98b24adf245bbd2fe9212aa6a924a0f09c445906d7f87574f36a7423
* Fix harmless static-analyzer warnings.drh2021-10-04
| | | FossilOrigin-Name: 32f33f356931242b59c01b5df7e180941231e3d9c91577ad33aa4a01e9d59092
* Do not disable a rowid=? term used to drive an IPK index if it is a ↵dan2021-08-30
| | | | | transitive constraint. FossilOrigin-Name: 46e28cbcf6044b36aa4ddcda09adb49a46c6c6a8d41d558467ede3091304aa8c
* Store the collating sequence name for each column of a table as andrh2021-08-05
| | | | | | extension to the column name, for an additional savings in the heap space needed to hold the schema. FossilOrigin-Name: 832ac4c1ee384be0de72a4bdd55ed87e0f8294e7df5eefcf6b4942db3d85a69e
* Refactor field names in the Column object, zCnName and zCnColl, to make themdrh2021-08-02
| | | | | unique and thus easier to find amid all the other code. FossilOrigin-Name: 8b781dcaf68e0cf12a844708c82eee00193e340195cbca915d077e4846983bf3
* Make a deep copy of the result of a subquery in case the subquery isdrh2021-05-28
| | | | | | | | | reused. Fix for the problem reported by [forum:/forumpost/28216b36ac|forum post 28216b36ac] and introduced by check-in [f30fb19ff763a7cb]. Further changes to try to optimize the new OP_Copy opcode back into either OP_SCopy or OP_Move will be attempted separately. A test case will be in TH3. FossilOrigin-Name: c9f0b9cb0aef107265435e22c164dd3c974eadfd00abf7cfd4fc7ec95c0dd7d0
* Update an assert() in wherecode.c that might fail following an unrelated SQL ↵dan2021-05-26
| | | | | error. FossilOrigin-Name: 3e2c36a8272ab3c1777638c0ed8222e7ff04657fe1c40f74a63b99a5a90258cc
* Do not invoke sqlite3ExprAffinity() after a syntax error that might havedrh2021-05-22
| | | | | | left the tree in an inconsistent state. See also [e8a1515b44380cc5] and [forum:/forumpost/7e484e225c|forum post 7e484e225c]. FossilOrigin-Name: b986600520696b0c91c4ccc6aff1b698391b4bcaf8a3ea436be1967883faa2fe
* In the MULTI-INDEX OR query plan, code for sub-expressions can sometimes bedrh2021-05-18
| | | | | | | | generated twice. But for some subqueries, generating code off of the same tree twice causes problems. So now MULTI-INDEX OR makes a copy of the sub-expressions it uses to avoid code-generating them more than once. dbsqlfuzz 9ebd2140e7206ff724e665f172faea28af801635. FossilOrigin-Name: 4a55f72542c8bcc80253aa77043314cecb29d73cb4f51aa80f7811e86cc8ef68
* Further simplification of the reverse-order scan logic of the previousdrh2021-05-12
| | | | | check-in. FossilOrigin-Name: b2b0e23ba885f22c88b03492e42c3cd1cbd59289e452263951bb757a871699f0
* Fix the query plan for an indexed lookup on a WITHOUT ROWID table withdrh2021-05-12
| | | | | | a DESC primary key when the primary key is constrained by an inequality. See [forum:/forumpost/8988341615|forum post 8988341615]. Test cases in TH3. FossilOrigin-Name: f65c929bf189cf5ca5f1cacdbbb8eec014c9960f767b135023bd2323cd26f279
* When applying the optimization that disables WHERE clause terms that drivedrh2021-05-04
| | | | | | | indexes, make sure not to do so if the term being disabled is a transitive constraint. Fix for the problem identified by [forum:forumpost/eb8613976a|forum post eb8613976a]. FossilOrigin-Name: f1f9b5de3c59489b94963685660b3ddc45eece5535b02fec399b6ece0e38563d
* Also for the 0x20000 bit of ".wheretrace", show when WHERE clause terms aredrh2021-05-04
| | | | | disabled. FossilOrigin-Name: 625fb253eecd6c10fce5d0127d516361df0c1d1661502b396fc418dcdb4ae999
* The new OP_Null opcode from check-in [8b54102a00852b72] was not codeddrh2021-04-21
| | | | | correctly. This check-in attempts to fix that. FossilOrigin-Name: 02af30aab24878c4382a8863512b816889400104549b51df6a632767fee48d04
* Initialize the key registers in the skip-scan optimization to NULL, in casedrh2021-04-21
| | | | | | | the query is run on a corrupt database that causes the initialization of the key to be bypassed. dbsqlfuzz 62fdf2bece00d24cac8a4edf2cf562e6eeac779d FossilOrigin-Name: 8b54102a00852b72783b5b2f336c7a093adbdc8e1b94d46b7d315ae6e5d9476b
* Do not invoke sqlite3ExprAffinity() if there is a possibility that the Exprdrh2021-04-16
| | | | | | is incomplete due to a prior OOM. dbsqlfuzz b8a824706914488bd236da51118eb9174ceb870f FossilOrigin-Name: e8a1515b44380cc52aca1838814ca398012e4e9cf5728d40b404546e812a39b7
* Avoid coding unindexed WHERE constraints if an equivalent transitive term ↵dan2021-04-05
| | | | | has already been coded by an outer loop. FossilOrigin-Name: 644bb77f8bb2c3499db7c280440c92fd2649a98ce714ae0d5d690eabfdc04326
* Use the canonical name, not the AS name, when showing the MATERIALIZE ordrh2021-03-20
| | | | | CO-ROUTINE lines for a CTE. FossilOrigin-Name: 1b83e232c490fe6e9f999d30399faebfac6094bf940dc21dc459ed2c97657cb2
* Improved labeling of EXPLAIN QUERY PLAN output. Many test failures due todrh2021-03-19
| | | | | the different output format. FossilOrigin-Name: 6f8faec0222a7ca07cc1a5ed16cc08d92c6e20bbcb34851b4eff9e624de53601
* Rename the "struct SrcList_item" object to the more succinct "SrcItem".drh2021-02-21
| | | | | This is a symbolic change only. The logic is unmodified. FossilOrigin-Name: bfd5bf2c73110fcb36db9ba2a949ff516131fbd3e89325f88fe9f5c2b4ed87b2
* Ensure a cursor used by the SeekScan operator does not point to a valid row ↵dan2021-01-27
| | | | | on the first iteration of the loop. Possible fix for [2d6e8400]. FossilOrigin-Name: 390cf60a286b13f454429f4652a133f95a7891a75c1ec6d16cd39990590fd3fb
* Additional corner-case fixes for the in-scan-vs-index or OP_SeekScandrh2020-10-02
| | | | | optimization. FossilOrigin-Name: ad5ab24ebd557e7af1d92ab3fbcb3747c04da5ad4ed779fb6391dc94042687dd
* For the OP_SeekScan optimization, the OP_IdxGT does not necessarily comedrh2020-10-02
| | | | | | right after the OP_SeekGE. So use the P2 operand of OP_SeekScan to point to the first instruction after OP_IdxGT. Problem found by dbsqlfuzz. FossilOrigin-Name: 091d71939411bf2079098f09ddc0525f11f380119fd27114e2b3eec9a8ac0db4
* Disable the OP_SeekScan opcode of the in-scan-vs-index optimization whendrh2020-10-02
| | | | | | | in PRAGMA reverse_unordered_selects mode, as the OP_SeekScan only works with forwards scans. Thanks to OSSFuzz for pointing out the problem to us. FossilOrigin-Name: c75c3a3b756635bfdab44e4b56a337e4a88af3a8803cd3e9a67abf3d0d3450dc
* Remove a debugging printf() accidentally left in the previous check-in.drh2020-10-01
| | | FossilOrigin-Name: e9d1efa597fb073dc4bc4286e03059a350ed05d3e6476cd3247e6cde626f458b
* The IN-early-out optimization does not work for virtual tables. Dodrh2020-10-01
| | | | | | not try to use it there. Fix for ticket [2d5a3163563d559f]. Test cases in TH3. FossilOrigin-Name: dbec6910d9648f4907373c818a5cb347a2e487784208751ccecfacca752ff99d
* Improved query optimization for multi-column indexes where the second ordrh2020-09-30
|\ | | | | | | | | | | | | | | | | | | later columns are constrained by an IN operator and the earlier index columns limit the search to a small number of rows. Use the new OP_SeekScan opcode which does scanning of the relevant range of the index but gives up and falls back to doing a seek if the number of rows scanned grows to large, in order to guard against pathological cases where the estimated number of rows to be scanned is far too small. FossilOrigin-Name: 4a43430fd23f88352c33b29c4c105b72f6dc821f94bf362040c41a1648c402e5
| * For the OP_SeekScan opcode, adjust the number of steps run before givingdrh2020-09-30
| | | | | | | | | | up based on the estimated number of comparisons needed to perform a seek. FossilOrigin-Name: dc4172e6b8e1f62dc7329a3adb2223f290bc4c8055c265e88182ef432f4bcf10
| * Coverage testing of the OP_SeekScan opcode. Fix a problem that comes up whendrh2020-09-29
| | | | | | | | | | OP_SeekScan reaches the end of the table. FossilOrigin-Name: 9e57e758a6a33f54d28a546b4eebfb5cfacef30dc4e0207e43bb9d2c06fc3439
| * Typo fix to repair the early-out optimization. Also avoid unnecessarydrh2020-09-29
| | | | | | | | | | OP_SeekHit opcodes. FossilOrigin-Name: 8fd7d8dfcd515aa6b65d6eb27b033d3b3a31db467b9100cc13c62bc60113019e
| * The OP_SeekScan opcode works, but using it requires disabling thedrh2020-09-29
| | | | | | | | | | | | IN-earlyout optimization because the OP_IfNoHope opcode might move the cursor. FossilOrigin-Name: f3c36b840c9a29c0add28039db216f4207a308e5057fc76e3f0004024a8267ac
| * Revisiting the IN-scan optimization to try to fix it for the corner casedrh2020-09-28
| | | | | | | | | | | | | | | | | | | | where the statistics deceive the query planner into using a scan when an indexed lookup would be better. This check-in changes the code generation to do the IN-scan using a new OP_SeekScan opcode. That new opcode is designed to abandon the scan and fall back to a seek if it doesn't find a match quickly enough. For this work-in-progress check-in, OP_SeekScan is still a no-op and OP_SeekGE still ends up doing all the work. FossilOrigin-Name: d720b6981eeb0ffdb14494ca63eca298ee724ae4ad4863c7c7cbfdad7fa52519
* | Back out the incorrect optimization of check-in [e51ecadcbdef5ce6] asdrh2020-09-30
|/ | | | | | ticket [5c4e7aa793943803] reports a case where the optimization does not work. FossilOrigin-Name: 7395e96b8cc370c8ac2657fb805915b0992a15d80f8bf256d277b423fec64675
* Small performance improvement and size reduction by reducing the size ofdrh2020-09-28
| | | | | the WhereTerm object. FossilOrigin-Name: 43f7ddad800acf40917c5cc3d926640dbec17c34d5f1cbbb74bd80f44eeed0a5
* Prevent use-after-free of the u.vtab.idxStr string following an OOMdrh2020-09-17
| | | | | while generating the OP_VFilter opcode. FossilOrigin-Name: 751fe4edb2d4602e652523c2759de3f4fffd29d5c66cae68caf45b30fd8b750a
* Improvements to the IN-early-out optimization so that it works moredrh2020-09-01
| | | | | efficiently when there are two or more indexed IN clauses on a single table. FossilOrigin-Name: 35505c68c1945c35babd2496e02bc4907a15c8e7b8d77f05f230bd0e9d4891d7
* Omit the unnecessary not-NULL check on the upper bound of a forward indexdrh2020-08-15
| | | | | | | range scan. The subsequent OP_IdxGT will always catch the NULL. Similarly, omit the not-NULL check on the lower bound of a reverse index range scan, as the SeekLE opcode will disallow the NULL. FossilOrigin-Name: e51ecadcbdef5ce6e41d68412aee70aa4a1416c850358a6fa7e9a1ab443e719d
* For UPDATE and DELETE, use OP_DeferredSeek always. If the seek must laterdrh2020-08-14
| | | | | | | | | be resolved, add the OP_FinishSeek opcode after all WHERE clause terms have been processed. This obviates the need for the WHERE_SEEK_TABLE and WHERE_SEEK_UNIQ_TABLE flags to sqlite3WhereBegin() and the ensuing complication, and it allows the covering index optimization to be used further into WHERE clause processing. FossilOrigin-Name: a495f60d315e34b1a1bc5fb1336e05047add52c8fb2710b577c97b10a5e734f6
* Continuing work toward supporting unsigned 32-bit page numbers.drh2020-07-22
| | | FossilOrigin-Name: 9ce1710aad43cebe5ad50859c7685fb83e40cdd4a60913bd2b7e659bc59942fd
* Ensure that the NULL-scan pass counter is initialized when a ORDER BY NULLS LASTdrh2020-03-02
| | | | | is used on the right table of a LEFT JOIN. Ticket [e12a0ae526bb51c7]. FossilOrigin-Name: 704bb9a39acbee420c1d6ac9eb1466a02dd77d3334b938bfddf235973129b5fe
* Fix a problem with the processing of IN(...) constraints handled by virtual ↵dan2020-01-29
| | | | | table implementations that do not set the "omit" flag when the virtual table column contains at least one NULL value. FossilOrigin-Name: dcb4838757ca49cf149a6e883b3eb0ac8a075147387a078280dfabe39b1a3e8d
* Better than removing the incorrect assert() is to change it into adrh2020-01-12
| | | | | | | testcase() together with a comment indicating where an appropriate test case can be found, and the ticket that provoked the change. Ticket [614b25314c766238] FossilOrigin-Name: 3e3c60d8124672ff72a57dfa2e51276316bcac8c8ae8a5739da358f26924b0fb