aboutsummaryrefslogtreecommitdiff
path: root/src/wherecode.c
Commit message (Collapse)AuthorAge
...
* Do not allow early evaluation of Bloom filters that use the IN operator asdrh2021-12-11
| | | | | | the machinery to deal with the IN operator is not available. dbsqlfuzz 5b51c247518278f79a45cea978702e86e86cd4f9. FossilOrigin-Name: 799db7cb2e0d73031182d26a0e5919368f9f9823df81cb2863bfe79eca344f5c
* Rename the internal routine constructBloomFilter() todrh2021-12-10
| | | | | | | | sqlite3ConstructBloomFilter(). OSSFuzz is reporting a crash with a garbled stack that we cannot reproduce. Perhaps the original "constructBloomFilter()" name is colliding with some internal name used by OSSFuzz. We'll see if this rename clears the problem. FossilOrigin-Name: 403e7312dd9a3fe493a21aceb82e387d6f152622d66c1b403c881597713e8cc3
* Remove unused code and fix comments. Final cleanup before merging.drh2021-12-09
| | | FossilOrigin-Name: ce42039f5647b1f276acf5d9911528ecb47df1544a587def72c8cd6b2f664289
* Enable bloom filters for the right table of a LEFT JOIN. Fix unreachabledrh2021-12-09
| | | | | branches. FossilOrigin-Name: d342ab722de1fc3f34219c9755253db9d88eb50a6fa5cc257207008b00e7fc03
* Add SQLITE_TESTCTRL_LOGEST and enhance the LogEst utility program.drh2021-12-09
| | | | | Improvements to testability of bloom filters. FossilOrigin-Name: 88b43d798cc5aa59855e92d3e658aee9f0a5def6ffbc5db77af048d75ecdf8cc
* Merge the WhereClause fix from trunkdrh2021-12-08
|\ | | | | FossilOrigin-Name: d3250256772e3348abe887c0ca3550a6647cce3804c9456a9d0112aea7ee1c46
| * In the WhereClause object, do not assume that all TERM_VIRTUAL terms appeardrh2021-12-08
| | | | | | | | | | | | | | | | at the end of the list, because that is no longer true. Instead, keep a separate nBase count that is the size of the list excluding the tail of virtual terms. Use nBase instead of nTerm when scanning terms that are not virtual. Add assert()s to validate correctness of WhereClause. FossilOrigin-Name: 6024682ca467fa4fe49608772b0bbfa2f8a419b32cebfa715941073c8b29da49
* | Improved EXPLAIN QUERY PLAN output for Bloom filters.drh2021-12-06
| | | | | | FossilOrigin-Name: 00070e1fff6aec3d7c7b121f2b02bbca38a1664aca9afc3fb7e293f07fd1704f
* | Run as many Bloom filters as possible before index lookups.drh2021-12-05
| | | | | | FossilOrigin-Name: 06f6fefd67086896bc49272c6319545ff6c6792f18babe23aced27b60b032119
* | Try to run all Bloom filters before any Seeks. This gives a small performancedrh2021-12-05
| | | | | | | | | | gain on the Star-Schema Benchmark. FossilOrigin-Name: 5be2470f8755ef454f813c880e659bdbf82f2396be9320cf3079cd4ca8e81a19
* | 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