forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commitc366d2b
committed
Allow extension functions to participate in in-place updates.
Commit1dc5ebc allowed PL/pgSQL to perform in-place updatesof expanded-object variables that are being updated withassignments like "x := f(x, ...)". However this was allowedonly for a hard-wired list of functions f(), since we need tobe sure that f() will not modify the variable if it fails.It was always envisioned that we should make that extensible,but at the time we didn't have a good way to do so. Sincethen we've invented the idea of "support functions" to allowattaching specialized optimization knowledge to functions,and that is a perfect mechanism for doing this.Hence, adjust PL/pgSQL to use a support function request insteadof hard-wired logic to decide if in-place update is safe.Preserve the previous optimizations by creating support functionsfor the three functions that were previously hard-wired.Author: Tom Lane <tgl@sss.pgh.pa.us>Reviewed-by: Andrey Borodin <x4mmm@yandex-team.ru>Reviewed-by: Pavel Borisov <pashkin.elfe@gmail.com>Discussion:https://postgr.es/m/CACxu=vJaKFNsYxooSnW1wEgsAO5u_v1XYBacfVJ14wgJV_PYeg@mail.gmail.com1 parent6c7251d commitc366d2b
File tree
9 files changed
+203
-60
lines changed- src
- backend/utils/adt
- include
- catalog
- nodes
- pl/plpgsql/src
- expected
- sql
- tools/pgindent
9 files changed
+203
-60
lines changedLines changed: 61 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
16 | 16 |
| |
17 | 17 |
| |
18 | 18 |
| |
| 19 | + | |
19 | 20 |
| |
20 | 21 |
| |
21 | 22 |
| |
| |||
167 | 168 |
| |
168 | 169 |
| |
169 | 170 |
| |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
170 | 201 |
| |
171 | 202 |
| |
172 | 203 |
| |
| |||
230 | 261 |
| |
231 | 262 |
| |
232 | 263 |
| |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
233 | 294 |
| |
234 | 295 |
| |
235 | 296 |
| |
|
Lines changed: 34 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
18 | 18 |
| |
19 | 19 |
| |
20 | 20 |
| |
| 21 | + | |
21 | 22 |
| |
22 | 23 |
| |
23 | 24 |
| |
| |||
575 | 576 |
| |
576 | 577 |
| |
577 | 578 |
| |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + |
Lines changed: 1 addition & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
57 | 57 |
| |
58 | 58 |
| |
59 | 59 |
| |
60 |
| - | |
| 60 | + | |
61 | 61 |
| |
62 | 62 |
|
Lines changed: 15 additions & 5 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1598 | 1598 |
| |
1599 | 1599 |
| |
1600 | 1600 |
| |
1601 |
| - | |
1602 |
| - | |
| 1601 | + | |
| 1602 | + | |
1603 | 1603 |
| |
| 1604 | + | |
| 1605 | + | |
| 1606 | + | |
1604 | 1607 |
| |
1605 |
| - | |
1606 |
| - | |
| 1608 | + | |
| 1609 | + | |
1607 | 1610 |
| |
1608 | 1611 |
| |
| 1612 | + | |
| 1613 | + | |
| 1614 | + | |
1609 | 1615 |
| |
1610 | 1616 |
| |
1611 | 1617 |
| |
| |||
12207 | 12213 |
| |
12208 | 12214 |
| |
12209 | 12215 |
| |
12210 |
| - | |
| 12216 | + | |
| 12217 | + | |
12211 | 12218 |
| |
| 12219 | + | |
| 12220 | + | |
| 12221 | + | |
12212 | 12222 |
| |
12213 | 12223 |
| |
12214 | 12224 |
| |
|
Lines changed: 51 additions & 4 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
6 | 6 |
| |
7 | 7 |
| |
8 | 8 |
| |
9 |
| - | |
10 |
| - | |
11 |
| - | |
12 |
| - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
13 | 13 |
| |
14 | 14 |
| |
15 | 15 |
| |
| |||
343 | 343 |
| |
344 | 344 |
| |
345 | 345 |
| |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
346 | 393 |
|
Lines changed: 2 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
57 | 57 |
| |
58 | 58 |
| |
59 | 59 |
| |
| 60 | + | |
60 | 61 |
| |
61 | 62 |
| |
62 | 63 |
| |
63 |
| - | |
| 64 | + | |
64 | 65 |
| |
65 | 66 |
| |
66 | 67 |
| |
|
Lines changed: 37 additions & 49 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
29 | 29 |
| |
30 | 30 |
| |
31 | 31 |
| |
| 32 | + | |
32 | 33 |
| |
33 | 34 |
| |
34 | 35 |
| |
| |||
8411 | 8412 |
| |
8412 | 8413 |
| |
8413 | 8414 |
| |
8414 |
| - | |
| 8415 | + | |
8415 | 8416 |
| |
8416 | 8417 |
| |
8417 | 8418 |
| |
| |||
8480 | 8481 |
| |
8481 | 8482 |
| |
8482 | 8483 |
| |
8483 |
| - | |
8484 |
| - | |
8485 |
| - | |
8486 |
| - | |
8487 |
| - | |
8488 |
| - | |
8489 |
| - | |
8490 |
| - | |
8491 |
| - | |
8492 |
| - | |
| 8484 | + | |
8493 | 8485 |
| |
8494 |
| - | |
8495 |
| - | |
8496 |
| - | |
8497 |
| - | |
8498 |
| - | |
8499 |
| - | |
8500 |
| - | |
8501 |
| - | |
8502 |
| - | |
8503 |
| - | |
8504 |
| - | |
| 8486 | + | |
| 8487 | + | |
| 8488 | + | |
| 8489 | + | |
| 8490 | + | |
| 8491 | + | |
| 8492 | + | |
8505 | 8493 |
| |
8506 | 8494 |
| |
8507 | 8495 |
| |
8508 | 8496 |
| |
8509 | 8497 |
| |
8510 |
| - | |
8511 |
| - | |
8512 |
| - | |
| 8498 | + | |
| 8499 | + | |
| 8500 | + | |
8513 | 8501 |
| |
8514 |
| - | |
8515 |
| - | |
8516 |
| - | |
8517 |
| - | |
8518 |
| - | |
8519 |
| - | |
8520 |
| - | |
8521 |
| - | |
8522 |
| - | |
8523 |
| - | |
8524 |
| - | |
| 8502 | + | |
| 8503 | + | |
8525 | 8504 |
| |
8526 |
| - | |
| 8505 | + | |
| 8506 | + | |
8527 | 8507 |
| |
8528 |
| - | |
8529 |
| - | |
8530 |
| - | |
| 8508 | + | |
| 8509 | + | |
| 8510 | + | |
| 8511 | + | |
8531 | 8512 |
| |
8532 |
| - | |
8533 |
| - | |
8534 |
| - | |
8535 |
| - | |
8536 |
| - | |
8537 |
| - | |
8538 |
| - | |
8539 |
| - | |
8540 |
| - | |
| 8513 | + | |
| 8514 | + | |
| 8515 | + | |
| 8516 | + | |
| 8517 | + | |
| 8518 | + | |
| 8519 | + | |
| 8520 | + | |
| 8521 | + | |
| 8522 | + | |
| 8523 | + | |
| 8524 | + | |
| 8525 | + | |
| 8526 | + | |
| 8527 | + | |
| 8528 | + | |
8541 | 8529 |
| |
8542 | 8530 |
| |
8543 | 8531 |
| |
|
Lines changed: 1 addition & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
53 | 53 |
| |
54 | 54 |
| |
55 | 55 |
| |
| 56 | + | |
56 | 57 |
| |
57 | 58 |
| |
58 | 59 |
| |
|
Lines changed: 1 addition & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
2804 | 2804 |
| |
2805 | 2805 |
| |
2806 | 2806 |
| |
| 2807 | + | |
2807 | 2808 |
| |
2808 | 2809 |
| |
2809 | 2810 |
| |
|
0 commit comments
Comments
(0)