|
8 | 8 | * |
9 | 9 | * |
10 | 10 | * IDENTIFICATION |
11 | | - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.61 2001/03/23 04:49:54 momjian Exp $ |
| 11 | + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.62 2001/05/03 21:16:48 tgl Exp $ |
12 | 12 | * |
13 | 13 | *------------------------------------------------------------------------- |
14 | 14 | */ |
@@ -377,7 +377,7 @@ DefineQueryRewrite(RuleStmt *stmt) |
377 | 377 | * We want the rule's table references to be checked as though by the |
378 | 378 | * rule owner, not the user referencing the rule. Therefore, scan |
379 | 379 | * through the rule's rtables and set the checkAsUser field on all |
380 | | - * rtable entries (except *OLD* and *NEW*). |
| 380 | + * rtable entries. |
381 | 381 | */ |
382 | 382 | foreach(l,action) |
383 | 383 | { |
@@ -426,29 +426,28 @@ DefineQueryRewrite(RuleStmt *stmt) |
426 | 426 | /* |
427 | 427 | * setRuleCheckAsUser |
428 | 428 | *Recursively scan a query and set the checkAsUser field to the |
429 | | - *given userid in all rtable entries except *OLD* and *NEW*. |
| 429 | + *given userid in all rtable entries. |
| 430 | + * |
| 431 | + * Note: for a view (ON SELECT rule), the checkAsUser field of the *OLD* |
| 432 | + * RTE entry will be overridden when the view rule is expanded, and the |
| 433 | + * checkAsUser field of the *NEW* entry is irrelevant because that entry's |
| 434 | + * checkFor bits will never be set. However, for other types of rules it's |
| 435 | + * important to set these fields to match the rule owner. So we just set |
| 436 | + * them always. |
430 | 437 | */ |
431 | 438 | staticvoid |
432 | 439 | setRuleCheckAsUser(Query*qry,Oiduserid) |
433 | 440 | { |
434 | 441 | List*l; |
435 | 442 |
|
436 | | -/* Set all the RTEs in this query node, except OLD and NEW */ |
| 443 | +/* Set all the RTEs in this query node */ |
437 | 444 | foreach(l,qry->rtable) |
438 | 445 | { |
439 | 446 | RangeTblEntry*rte= (RangeTblEntry*)lfirst(l); |
440 | 447 |
|
441 | | -if (strcmp(rte->eref->relname,"*NEW*")==0) |
442 | | -continue; |
443 | | -if (strcmp(rte->eref->relname,"*OLD*")==0) |
444 | | -continue; |
445 | | - |
446 | 448 | if (rte->subquery) |
447 | 449 | { |
448 | | - |
449 | | -/* |
450 | | - * Recurse into subquery in FROM |
451 | | - */ |
| 450 | +/* Recurse into subquery in FROM */ |
452 | 451 | setRuleCheckAsUser(rte->subquery,userid); |
453 | 452 | } |
454 | 453 | else |
|