|
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; |
|