Skip to content

Commit 277607d

Browse files
committed
Eliminate pg_rewrite.ev_attr column and related dead code.
Commit 95ef6a3 removed the ability to create rules on an individual column as of 7.3, but left some residual code which has since been useless. This cleans up that dead code without any change in behavior other than dropping the useless column from the catalog.
1 parent 20cb18d commit 277607d

File tree

11 files changed

+9
-125
lines changed

11 files changed

+9
-125
lines changed

doc/src/sgml/catalogs.sgml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5038,14 +5038,6 @@
50385038
<entry>The table this rule is for</entry>
50395039
</row>
50405040

5041-
<row>
5042-
<entry><structfield>ev_attr</structfield></entry>
5043-
<entry><type>int2</type></entry>
5044-
<entry></entry>
5045-
<entry>The column this rule is for (currently, always -1 to
5046-
indicate the whole table)</entry>
5047-
</row>
5048-
50495041
<row>
50505042
<entry><structfield>ev_type</structfield></entry>
50515043
<entry><type>char</type></entry>

src/backend/rewrite/rewriteDefine.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ static Oid
5858
InsertRule(char *rulname,
5959
int evtype,
6060
Oid eventrel_oid,
61-
AttrNumber evslot_index,
6261
bool evinstead,
6362
Node *event_qual,
6463
List *action,
@@ -86,7 +85,6 @@ InsertRule(char *rulname,
8685
namestrcpy(&rname, rulname);
8786
values[Anum_pg_rewrite_rulename - 1] = NameGetDatum(&rname);
8887
values[Anum_pg_rewrite_ev_class - 1] = ObjectIdGetDatum(eventrel_oid);
89-
values[Anum_pg_rewrite_ev_attr - 1] = Int16GetDatum(evslot_index);
9088
values[Anum_pg_rewrite_ev_type - 1] = CharGetDatum(evtype + '0');
9189
values[Anum_pg_rewrite_ev_enabled - 1] = CharGetDatum(RULE_FIRES_ON_ORIGIN);
9290
values[Anum_pg_rewrite_is_instead - 1] = BoolGetDatum(evinstead);
@@ -117,7 +115,6 @@ InsertRule(char *rulname,
117115
* When replacing, we don't need to replace every attribute
118116
*/
119117
MemSet(replaces, false, sizeof(replaces));
120-
replaces[Anum_pg_rewrite_ev_attr - 1] = true;
121118
replaces[Anum_pg_rewrite_ev_type - 1] = true;
122119
replaces[Anum_pg_rewrite_is_instead - 1] = true;
123120
replaces[Anum_pg_rewrite_ev_qual - 1] = true;
@@ -238,7 +235,6 @@ DefineQueryRewrite(char *rulename,
238235
List *action)
239236
{
240237
Relation event_relation;
241-
int event_attno;
242238
ListCell *l;
243239
Query *query;
244240
bool RelisBecomingView = false;
@@ -495,15 +491,13 @@ DefineQueryRewrite(char *rulename,
495491
/*
496492
* This rule is allowed - prepare to install it.
497493
*/
498-
event_attno = -1;
499494

500495
/* discard rule if it's null action and not INSTEAD; it's a no-op */
501496
if (action != NIL || is_instead)
502497
{
503498
ruleId = InsertRule(rulename,
504499
event_type,
505500
event_relid,
506-
event_attno,
507501
is_instead,
508502
event_qual,
509503
action,

src/backend/rewrite/rewriteHandler.c

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,10 +1276,7 @@ matchLocks(CmdType event,
12761276
if (oneLock->event == event)
12771277
{
12781278
if (parsetree->commandType != CMD_SELECT ||
1279-
(oneLock->attrno == -1 ?
1280-
rangeTableEntry_used((Node *) parsetree, varno, 0) :
1281-
attribute_used((Node *) parsetree,
1282-
varno, oneLock->attrno, 0)))
1279+
rangeTableEntry_used((Node *) parsetree, varno, 0))
12831280
matching_locks = lappend(matching_locks, oneLock);
12841281
}
12851282
}
@@ -1295,7 +1292,6 @@ static Query *
12951292
ApplyRetrieveRule(Query *parsetree,
12961293
RewriteRule *rule,
12971294
int rt_index,
1298-
bool relation_level,
12991295
Relation relation,
13001296
List *activeRIRs,
13011297
bool forUpdatePushedDown)
@@ -1309,8 +1305,6 @@ ApplyRetrieveRule(Query *parsetree,
13091305
elog(ERROR, "expected just one rule action");
13101306
if (rule->qual != NULL)
13111307
elog(ERROR, "cannot handle qualified ON SELECT rule");
1312-
if (!relation_level)
1313-
elog(ERROR, "cannot handle per-attribute ON SELECT rule");
13141308

13151309
if (rt_index == parsetree->resultRelation)
13161310
{
@@ -1632,14 +1626,6 @@ fireRIRrules(Query *parsetree, List *activeRIRs, bool forUpdatePushedDown)
16321626
if (rule->event != CMD_SELECT)
16331627
continue;
16341628

1635-
if (rule->attrno > 0)
1636-
{
1637-
/* per-attr rule; do we need it? */
1638-
if (!attribute_used((Node *) parsetree, rt_index,
1639-
rule->attrno, 0))
1640-
continue;
1641-
}
1642-
16431629
locks = lappend(locks, rule);
16441630
}
16451631

@@ -1664,7 +1650,6 @@ fireRIRrules(Query *parsetree, List *activeRIRs, bool forUpdatePushedDown)
16641650
parsetree = ApplyRetrieveRule(parsetree,
16651651
rule,
16661652
rt_index,
1667-
rule->attrno == -1,
16681653
rel,
16691654
activeRIRs,
16701655
forUpdatePushedDown);

src/backend/rewrite/rewriteManip.c

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -857,70 +857,6 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up)
857857
}
858858

859859

860-
/*
861-
* attribute_used -
862-
* Check if a specific attribute number of a RTE is used
863-
* somewhere in the query or expression.
864-
*/
865-
866-
typedef struct
867-
{
868-
int rt_index;
869-
int attno;
870-
int sublevels_up;
871-
} attribute_used_context;
872-
873-
static bool
874-
attribute_used_walker(Node *node,
875-
attribute_used_context *context)
876-
{
877-
if (node == NULL)
878-
return false;
879-
if (IsA(node, Var))
880-
{
881-
Var *var = (Var *) node;
882-
883-
if (var->varlevelsup == context->sublevels_up &&
884-
var->varno == context->rt_index &&
885-
var->varattno == context->attno)
886-
return true;
887-
return false;
888-
}
889-
if (IsA(node, Query))
890-
{
891-
/* Recurse into subselects */
892-
bool result;
893-
894-
context->sublevels_up++;
895-
result = query_tree_walker((Query *) node, attribute_used_walker,
896-
(void *) context, 0);
897-
context->sublevels_up--;
898-
return result;
899-
}
900-
return expression_tree_walker(node, attribute_used_walker,
901-
(void *) context);
902-
}
903-
904-
bool
905-
attribute_used(Node *node, int rt_index, int attno, int sublevels_up)
906-
{
907-
attribute_used_context context;
908-
909-
context.rt_index = rt_index;
910-
context.attno = attno;
911-
context.sublevels_up = sublevels_up;
912-
913-
/*
914-
* Must be prepared to start with a Query or a bare expression tree; if
915-
* it's a Query, we don't want to increment sublevels_up.
916-
*/
917-
return query_or_expression_tree_walker(node,
918-
attribute_used_walker,
919-
(void *) &context,
920-
0);
921-
}
922-
923-
924860
/*
925861
* If the given Query is an INSERT ... SELECT construct, extract and
926862
* return the sub-Query node that represents the SELECT part. Otherwise

src/backend/utils/adt/ruleutils.c

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3734,7 +3734,6 @@ make_ruledef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
37343734
char *rulename;
37353735
char ev_type;
37363736
Oid ev_class;
3737-
int16 ev_attr;
37383737
bool is_instead;
37393738
char *ev_qual;
37403739
char *ev_action;
@@ -3761,11 +3760,6 @@ make_ruledef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
37613760
Assert(!isnull);
37623761
ev_class = DatumGetObjectId(dat);
37633762

3764-
fno = SPI_fnumber(rulettc, "ev_attr");
3765-
dat = SPI_getbinval(ruletup, rulettc, fno, &isnull);
3766-
Assert(!isnull);
3767-
ev_attr = DatumGetInt16(dat);
3768-
37693763
fno = SPI_fnumber(rulettc, "is_instead");
37703764
dat = SPI_getbinval(ruletup, rulettc, fno, &isnull);
37713765
Assert(!isnull);
@@ -3820,10 +3814,6 @@ make_ruledef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
38203814

38213815
/* The relation the rule is fired on */
38223816
appendStringInfo(buf, " TO %s", generate_relation_name(ev_class, NIL));
3823-
if (ev_attr > 0)
3824-
appendStringInfo(buf, ".%s",
3825-
quote_identifier(get_relid_attribute_name(ev_class,
3826-
ev_attr)));
38273817

38283818
/* If the rule has an event qualification, add it */
38293819
if (ev_qual == NULL)
@@ -3925,7 +3915,6 @@ make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
39253915
Query *query;
39263916
char ev_type;
39273917
Oid ev_class;
3928-
int16 ev_attr;
39293918
bool is_instead;
39303919
char *ev_qual;
39313920
char *ev_action;
@@ -3943,9 +3932,6 @@ make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
39433932
fno = SPI_fnumber(rulettc, "ev_class");
39443933
ev_class = (Oid) SPI_getbinval(ruletup, rulettc, fno, &isnull);
39453934

3946-
fno = SPI_fnumber(rulettc, "ev_attr");
3947-
ev_attr = (int16) SPI_getbinval(ruletup, rulettc, fno, &isnull);
3948-
39493935
fno = SPI_fnumber(rulettc, "is_instead");
39503936
is_instead = (bool) SPI_getbinval(ruletup, rulettc, fno, &isnull);
39513937

@@ -3965,7 +3951,7 @@ make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
39653951

39663952
query = (Query *) linitial(actions);
39673953

3968-
if (ev_type != '1' || ev_attr >= 0 || !is_instead ||
3954+
if (ev_type != '1' || !is_instead ||
39693955
strcmp(ev_qual, "<>") != 0 || query->commandType != CMD_SELECT)
39703956
{
39713957
appendStringInfo(buf, "Not a view");

src/backend/utils/cache/relcache.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,6 @@ RelationBuildRuleLock(Relation relation)
682682
rule->ruleId = HeapTupleGetOid(rewrite_tuple);
683683

684684
rule->event = rewrite_form->ev_type - '0';
685-
rule->attrno = rewrite_form->ev_attr;
686685
rule->enabled = rewrite_form->ev_enabled;
687686
rule->isInstead = rewrite_form->is_instead;
688687

@@ -798,8 +797,6 @@ equalRuleLocks(RuleLock *rlock1, RuleLock *rlock2)
798797
return false;
799798
if (rule1->event != rule2->event)
800799
return false;
801-
if (rule1->attrno != rule2->attrno)
802-
return false;
803800
if (rule1->enabled != rule2->enabled)
804801
return false;
805802
if (rule1->isInstead != rule2->isInstead)

src/include/catalog/catversion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@
5353
*/
5454

5555
/* yyyymmddN */
56-
#define CATALOG_VERSION_NO 201309031
56+
#define CATALOG_VERSION_NO 201309051
5757

5858
#endif

src/include/catalog/pg_rewrite.h

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ CATALOG(pg_rewrite,2618)
3535
{
3636
NameData rulename;
3737
Oid ev_class;
38-
int16 ev_attr;
3938
char ev_type;
4039
char ev_enabled;
4140
bool is_instead;
@@ -57,14 +56,13 @@ typedef FormData_pg_rewrite *Form_pg_rewrite;
5756
* compiler constants for pg_rewrite
5857
* ----------------
5958
*/
60-
#define Natts_pg_rewrite 8
59+
#define Natts_pg_rewrite 7
6160
#define Anum_pg_rewrite_rulename 1
6261
#define Anum_pg_rewrite_ev_class 2
63-
#define Anum_pg_rewrite_ev_attr 3
64-
#define Anum_pg_rewrite_ev_type 4
65-
#define Anum_pg_rewrite_ev_enabled 5
66-
#define Anum_pg_rewrite_is_instead 6
67-
#define Anum_pg_rewrite_ev_qual 7
68-
#define Anum_pg_rewrite_ev_action 8
62+
#define Anum_pg_rewrite_ev_type 3
63+
#define Anum_pg_rewrite_ev_enabled 4
64+
#define Anum_pg_rewrite_is_instead 5
65+
#define Anum_pg_rewrite_ev_qual 6
66+
#define Anum_pg_rewrite_ev_action 7
6967

7068
#endif /* PG_REWRITE_H */

src/include/rewrite/prs2lock.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ typedef struct RewriteRule
2525
{
2626
Oid ruleId;
2727
CmdType event;
28-
AttrNumber attrno;
2928
Node *qual;
3029
List *actions;
3130
char enabled;

src/include/rewrite/rewriteManip.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ extern void IncrementVarSublevelsUp_rtable(List *rtable,
4949

5050
extern bool rangeTableEntry_used(Node *node, int rt_index,
5151
int sublevels_up);
52-
extern bool attribute_used(Node *node, int rt_index, int attno,
53-
int sublevels_up);
5452

5553
extern Query *getInsertSelectQuery(Query *parsetree, Query ***subquery_ptr);
5654

src/tools/pgindent/typedefs.list

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1955,7 +1955,6 @@ adjust_appendrel_attrs_context
19551955
allocfunc
19561956
array_unnest_fctx
19571957
assign_collations_context
1958-
attribute_used_context
19591958
autovac_table
19601959
av_relation
19611960
avl_dbase

0 commit comments

Comments
 (0)