aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/cache/relcache.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-04-18 20:01:11 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-04-18 20:01:11 +0000
commitb3120804ad1692322a6d905b352df7fa0d7cdd80 (patch)
tree93aaf632df82db20e63c952be8a6fd1e4ec15629 /src/backend/utils/cache/relcache.c
parent4e08a625b006ba3992be881b516773adba5863e4 (diff)
downloadpostgresql-b3120804ad1692322a6d905b352df7fa0d7cdd80.tar.gz
postgresql-b3120804ad1692322a6d905b352df7fa0d7cdd80.zip
Rule names are now unique per-relation, rather than unique globally.
DROP RULE and COMMENT ON RULE syntax adds an 'ON tablename' clause, similar to TRIGGER syntaxes. To allow loading of existing pg_dump files containing COMMENT ON RULE, the COMMENT code will still accept the old syntax --- but only if the target rulename is unique across the whole database.
Diffstat (limited to 'src/backend/utils/cache/relcache.c')
-rw-r--r--src/backend/utils/cache/relcache.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 9a8e76f4926..686fcc8416b 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.160 2002/04/12 20:38:29 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.161 2002/04/18 20:01:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -675,17 +675,18 @@ RelationBuildRuleLock(Relation relation)
/*
* open pg_rewrite and begin a scan
- *
- * XXX: there is no suitable index for this scan. FIXME.
*/
pg_rewrite_desc = heap_openr(RewriteRelationName, AccessShareLock);
pg_rewrite_tupdesc = RelationGetDescr(pg_rewrite_desc);
- pg_rewrite_scan = systable_beginscan(pg_rewrite_desc, NULL, false,
+ pg_rewrite_scan = systable_beginscan(pg_rewrite_desc,
+ RewriteRelRulenameIndex,
+ criticalRelcachesBuilt,
SnapshotNow,
1, &key);
while (HeapTupleIsValid(pg_rewrite_tuple = systable_getnext(pg_rewrite_scan)))
{
+ Form_pg_rewrite rewrite_form = (Form_pg_rewrite) GETSTRUCT(pg_rewrite_tuple);
bool isnull;
Datum ruleaction;
Datum rule_evqual;
@@ -698,18 +699,11 @@ RelationBuildRuleLock(Relation relation)
rule->ruleId = pg_rewrite_tuple->t_data->t_oid;
- rule->event = DatumGetInt32(heap_getattr(pg_rewrite_tuple,
- Anum_pg_rewrite_ev_type,
- pg_rewrite_tupdesc,
- &isnull)) - 48;
- rule->attrno = DatumGetInt16(heap_getattr(pg_rewrite_tuple,
- Anum_pg_rewrite_ev_attr,
- pg_rewrite_tupdesc,
- &isnull));
- rule->isInstead = DatumGetBool(heap_getattr(pg_rewrite_tuple,
- Anum_pg_rewrite_is_instead,
- pg_rewrite_tupdesc,
- &isnull));
+ rule->event = rewrite_form->ev_type - '0';
+ rule->attrno = rewrite_form->ev_attr;
+ rule->isInstead = rewrite_form->is_instead;
+
+ /* Must use heap_getattr to fetch ev_qual and ev_action */
ruleaction = heap_getattr(pg_rewrite_tuple,
Anum_pg_rewrite_ev_action,