forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commit5810430
committed
Convert regex engine's subre tree from binary to N-ary style.
Instead of having left and right child links in subre structs,have a single child link plus a sibling link. Multiple childrenof a tree node are now reached by chasing the sibling chain.The beneficiary of this is alternation tree nodes. A regularexpression with N (>1) branches is now represented by one alternationnode with N children, rather than a tree that includes N alternationnodes as well as N children. While the old representation didn'treally cost anything extra at execution time, it was pretty horridfor compilation purposes, because each of the alternation nodes hadits own NFA, which we were too stupid not to separately optimize.(To make matters worse, all of those NFAs described the entirealternation pattern, not just the portion of it that one mightexpect from the tree structure.)We continue to require concatenation nodes to have exactly twochildren. This data structure is now prepared to support more,but the executor's logic would need some careful redesign, andit's not clear that a lot of benefit could be had.This is part of a patch series that in total reduces the regex engine'sruntime by about a factor of four on a large corpus of real-world regexes.Patch by me, reviewed by Joel JacobsonDiscussion:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us1 parentcebc1d3 commit5810430
4 files changed
+185
-165
lines changedLines changed: 2 additions & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
129 | 129 |
| |
130 | 130 |
| |
131 | 131 |
| |
132 |
| - | |
| 132 | + | |
133 | 133 |
| |
134 |
| - | |
| 134 | + | |
135 | 135 |
| |
136 | 136 |
| |
137 | 137 |
| |
|
0 commit comments
Comments
(0)