diff options
Diffstat (limited to 'src/backend/rewrite')
| -rw-r--r-- | src/backend/rewrite/rewriteDefine.c | 6 | ||||
| -rw-r--r-- | src/backend/rewrite/rewriteHandler.c | 17 | ||||
| -rw-r--r-- | src/backend/rewrite/rewriteManip.c | 64 |
3 files changed, 1 insertions, 86 deletions
diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 0e9f515a09..9c4a5d47e2 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -58,7 +58,6 @@ static Oid InsertRule(char *rulname, int evtype, Oid eventrel_oid, - AttrNumber evslot_index, bool evinstead, Node *event_qual, List *action, @@ -86,7 +85,6 @@ InsertRule(char *rulname, namestrcpy(&rname, rulname); values[Anum_pg_rewrite_rulename - 1] = NameGetDatum(&rname); values[Anum_pg_rewrite_ev_class - 1] = ObjectIdGetDatum(eventrel_oid); - values[Anum_pg_rewrite_ev_attr - 1] = Int16GetDatum(evslot_index); values[Anum_pg_rewrite_ev_type - 1] = CharGetDatum(evtype + '0'); values[Anum_pg_rewrite_ev_enabled - 1] = CharGetDatum(RULE_FIRES_ON_ORIGIN); values[Anum_pg_rewrite_is_instead - 1] = BoolGetDatum(evinstead); @@ -117,7 +115,6 @@ InsertRule(char *rulname, * When replacing, we don't need to replace every attribute */ MemSet(replaces, false, sizeof(replaces)); - replaces[Anum_pg_rewrite_ev_attr - 1] = true; replaces[Anum_pg_rewrite_ev_type - 1] = true; replaces[Anum_pg_rewrite_is_instead - 1] = true; replaces[Anum_pg_rewrite_ev_qual - 1] = true; @@ -238,7 +235,6 @@ DefineQueryRewrite(char *rulename, List *action) { Relation event_relation; - int event_attno; ListCell *l; Query *query; bool RelisBecomingView = false; @@ -495,7 +491,6 @@ DefineQueryRewrite(char *rulename, /* * This rule is allowed - prepare to install it. */ - event_attno = -1; /* discard rule if it's null action and not INSTEAD; it's a no-op */ if (action != NIL || is_instead) @@ -503,7 +498,6 @@ DefineQueryRewrite(char *rulename, ruleId = InsertRule(rulename, event_type, event_relid, - event_attno, is_instead, event_qual, action, diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index c55fb14e08..8a9a703c12 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -1276,10 +1276,7 @@ matchLocks(CmdType event, if (oneLock->event == event) { if (parsetree->commandType != CMD_SELECT || - (oneLock->attrno == -1 ? - rangeTableEntry_used((Node *) parsetree, varno, 0) : - attribute_used((Node *) parsetree, - varno, oneLock->attrno, 0))) + rangeTableEntry_used((Node *) parsetree, varno, 0)) matching_locks = lappend(matching_locks, oneLock); } } @@ -1295,7 +1292,6 @@ static Query * ApplyRetrieveRule(Query *parsetree, RewriteRule *rule, int rt_index, - bool relation_level, Relation relation, List *activeRIRs, bool forUpdatePushedDown) @@ -1309,8 +1305,6 @@ ApplyRetrieveRule(Query *parsetree, elog(ERROR, "expected just one rule action"); if (rule->qual != NULL) elog(ERROR, "cannot handle qualified ON SELECT rule"); - if (!relation_level) - elog(ERROR, "cannot handle per-attribute ON SELECT rule"); if (rt_index == parsetree->resultRelation) { @@ -1632,14 +1626,6 @@ fireRIRrules(Query *parsetree, List *activeRIRs, bool forUpdatePushedDown) if (rule->event != CMD_SELECT) continue; - if (rule->attrno > 0) - { - /* per-attr rule; do we need it? */ - if (!attribute_used((Node *) parsetree, rt_index, - rule->attrno, 0)) - continue; - } - locks = lappend(locks, rule); } @@ -1664,7 +1650,6 @@ fireRIRrules(Query *parsetree, List *activeRIRs, bool forUpdatePushedDown) parsetree = ApplyRetrieveRule(parsetree, rule, rt_index, - rule->attrno == -1, rel, activeRIRs, forUpdatePushedDown); diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 6ea91f5b21..b2626f1f44 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -858,70 +858,6 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) /* - * attribute_used - - * Check if a specific attribute number of a RTE is used - * somewhere in the query or expression. - */ - -typedef struct -{ - int rt_index; - int attno; - int sublevels_up; -} attribute_used_context; - -static bool -attribute_used_walker(Node *node, - attribute_used_context *context) -{ - if (node == NULL) - return false; - if (IsA(node, Var)) - { - Var *var = (Var *) node; - - if (var->varlevelsup == context->sublevels_up && - var->varno == context->rt_index && - var->varattno == context->attno) - return true; - return false; - } - if (IsA(node, Query)) - { - /* Recurse into subselects */ - bool result; - - context->sublevels_up++; - result = query_tree_walker((Query *) node, attribute_used_walker, - (void *) context, 0); - context->sublevels_up--; - return result; - } - return expression_tree_walker(node, attribute_used_walker, - (void *) context); -} - -bool -attribute_used(Node *node, int rt_index, int attno, int sublevels_up) -{ - attribute_used_context context; - - context.rt_index = rt_index; - context.attno = attno; - context.sublevels_up = sublevels_up; - - /* - * Must be prepared to start with a Query or a bare expression tree; if - * it's a Query, we don't want to increment sublevels_up. - */ - return query_or_expression_tree_walker(node, - attribute_used_walker, - (void *) &context, - 0); -} - - -/* * If the given Query is an INSERT ... SELECT construct, extract and * return the sub-Query node that represents the SELECT part. Otherwise * return the given Query. |
