|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/backend/catalog/pg_proc.c,v 1.174 2010/04/05 01:09:52 tgl Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/catalog/pg_proc.c,v 1.175 2010/05/11 04:52:28 itagaki Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -621,9 +621,29 @@ ProcedureCreate(const char *procedureName,
|
621 | 621 | /* Verify function body */
|
622 | 622 | if (OidIsValid(languageValidator))
|
623 | 623 | {
|
| 624 | +ArrayType*set_items; |
| 625 | +intsave_nestlevel; |
| 626 | + |
624 | 627 | /* Advance command counter so new tuple can be seen by validator */
|
625 | 628 | CommandCounterIncrement();
|
| 629 | + |
| 630 | +/* Set per-function configuration parameters */ |
| 631 | +set_items= (ArrayType*)DatumGetPointer(proconfig); |
| 632 | +if (set_items)/* Need a new GUC nesting level */ |
| 633 | +{ |
| 634 | +save_nestlevel=NewGUCNestLevel(); |
| 635 | +ProcessGUCArray(set_items, |
| 636 | +(superuser() ?PGC_SUSET :PGC_USERSET), |
| 637 | +PGC_S_SESSION, |
| 638 | +GUC_ACTION_SAVE); |
| 639 | +} |
| 640 | +else |
| 641 | +save_nestlevel=0;/* keep compiler quiet */ |
| 642 | + |
626 | 643 | OidFunctionCall1(languageValidator,ObjectIdGetDatum(retval));
|
| 644 | + |
| 645 | +if (set_items) |
| 646 | +AtEOXact_GUC(true,save_nestlevel); |
627 | 647 | }
|
628 | 648 |
|
629 | 649 | returnretval;
|
|