diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-04-18 20:01:11 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-04-18 20:01:11 +0000 |
commit | b3120804ad1692322a6d905b352df7fa0d7cdd80 (patch) | |
tree | 93aaf632df82db20e63c952be8a6fd1e4ec15629 /src/backend/utils/cache/relcache.c | |
parent | 4e08a625b006ba3992be881b516773adba5863e4 (diff) | |
download | postgresql-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.c | 26 |
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, |