forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commit0c3405c
committed
Improve performance of regular expression back-references.
In some cases, at the time that we're doing an NFA-based precheckof whether a backref subexpression can match at a particular placein the string, we already know which substring the referencedsubexpression matched. If so, we might as well forget about the NFAand just compare the substring; this is faster and it gives an exactrather than approximate answer.In general, this optimization can help while we are prechecking withinthe second child expression of a concat node, while the capture waswithin the first child expression; then the substring was saved duringcdissect() of the first child and will be available to NFA checks donewhile cdissect() recurses into the second child. It can help quite alot if the tree looks like concat / \ capture concat / \ expensive stuff backrefas we will be able to avoid recursively dissecting the "expensivestuff" before discovering that the backref isn't satisfied with aparticular midpoint that the lower concat node is testing. Thisdoesn't help if the concat tree is left-deep, as the capture nodewon't get set soon enough (and it's hard to fix that without changingthe engine's match behavior). Fortunately, right-deep concat treesare the common case.Patch by me, reviewed by Joel JacobsonDiscussion:https://postgr.es/m/661609.1614560029@sss.pgh.pa.us1 parent4aea704 commit0c3405c
2 files changed
+138
-3
lines changedLines changed: 117 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
58 | 58 |
| |
59 | 59 |
| |
60 | 60 |
| |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
61 | 74 |
| |
62 | 75 |
| |
63 | 76 |
| |
| |||
210 | 223 |
| |
211 | 224 |
| |
212 | 225 |
| |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
213 | 240 |
| |
214 | 241 |
| |
215 | 242 |
| |
| |||
467 | 494 |
| |
468 | 495 |
| |
469 | 496 |
| |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
470 | 585 |
| |
471 | 586 |
| |
472 | 587 |
| |
| |||
563 | 678 |
| |
564 | 679 |
| |
565 | 680 |
| |
| 681 | + | |
| 682 | + | |
566 | 683 |
| |
567 | 684 |
| |
568 | 685 |
| |
|
Lines changed: 21 additions & 3 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
77 | 77 |
| |
78 | 78 |
| |
79 | 79 |
| |
| 80 | + | |
| 81 | + | |
| 82 | + | |
80 | 83 |
| |
81 | 84 |
| |
82 | 85 |
| |
| |||
154 | 157 |
| |
155 | 158 |
| |
156 | 159 |
| |
| 160 | + | |
157 | 161 |
| |
158 | 162 |
| |
159 | 163 |
| |
| |||
342 | 346 |
| |
343 | 347 |
| |
344 | 348 |
| |
345 |
| - | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
346 | 352 |
| |
347 |
| - | |
| 353 | + | |
348 | 354 |
| |
349 | 355 |
| |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
350 | 364 |
| |
351 |
| - | |
| 365 | + | |
352 | 366 |
| |
353 | 367 |
| |
354 | 368 |
| |
| |||
369 | 383 |
| |
370 | 384 |
| |
371 | 385 |
| |
| 386 | + | |
372 | 387 |
| |
373 | 388 |
| |
374 | 389 |
| |
| |||
927 | 942 |
| |
928 | 943 |
| |
929 | 944 |
| |
| 945 | + | |
| 946 | + | |
| 947 | + | |
930 | 948 |
| |
931 | 949 |
| |
932 | 950 |
| |
|
0 commit comments
Comments
(0)