mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
pgindent run over code.
This commit is contained in:
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.28 1999/05/12 17:04:46 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.29 1999/05/25 16:10:48 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -238,12 +238,12 @@ DefineQueryRewrite(RuleStmt *stmt)
|
||||
*/
|
||||
if (event_type == CMD_SELECT)
|
||||
{
|
||||
TargetEntry *tle;
|
||||
Resdom *resdom;
|
||||
Form_pg_attribute attr;
|
||||
char *attname;
|
||||
TargetEntry *tle;
|
||||
Resdom *resdom;
|
||||
Form_pg_attribute attr;
|
||||
char *attname;
|
||||
int i;
|
||||
char expected_name[NAMEDATALEN + 5];
|
||||
char expected_name[NAMEDATALEN + 5];
|
||||
|
||||
/*
|
||||
* So there cannot be INSTEAD NOTHING, ...
|
||||
@ -259,6 +259,7 @@ DefineQueryRewrite(RuleStmt *stmt)
|
||||
*/
|
||||
if (length(action) > 1)
|
||||
elog(ERROR, "multiple action rules on select currently not supported");
|
||||
|
||||
/*
|
||||
* ... the one action must be a SELECT, ...
|
||||
*/
|
||||
@ -269,8 +270,8 @@ DefineQueryRewrite(RuleStmt *stmt)
|
||||
elog(ERROR, "event qualifications not supported for rules on select");
|
||||
|
||||
/*
|
||||
* ... the targetlist of the SELECT action must
|
||||
* exactly match the event relation, ...
|
||||
* ... the targetlist of the SELECT action must exactly match the
|
||||
* event relation, ...
|
||||
*/
|
||||
event_relation = heap_openr(event_obj->relname);
|
||||
if (event_relation == NULL)
|
||||
@ -279,8 +280,9 @@ DefineQueryRewrite(RuleStmt *stmt)
|
||||
if (event_relation->rd_att->natts != length(query->targetList))
|
||||
elog(ERROR, "select rules target list must match event relations structure");
|
||||
|
||||
for (i = 1; i <= event_relation->rd_att->natts; i++) {
|
||||
tle = (TargetEntry *)nth(i - 1, query->targetList);
|
||||
for (i = 1; i <= event_relation->rd_att->natts; i++)
|
||||
{
|
||||
tle = (TargetEntry *) nth(i - 1, query->targetList);
|
||||
resdom = tle->resdom;
|
||||
attr = event_relation->rd_att->attrs[i - 1];
|
||||
attname = nameout(&(attr->attname));
|
||||
@ -289,19 +291,20 @@ DefineQueryRewrite(RuleStmt *stmt)
|
||||
elog(ERROR, "select rules target entry %d has different column name from %s", i, attname);
|
||||
|
||||
if (attr->atttypid != resdom->restype)
|
||||
elog(ERROR, "select rules target entry %d has different type from attribute %s", i, attname);
|
||||
elog(ERROR, "select rules target entry %d has different type from attribute %s", i, attname);
|
||||
|
||||
if (attr->atttypmod != resdom->restypmod)
|
||||
elog(ERROR, "select rules target entry %d has different size from attribute %s", i, attname);
|
||||
elog(ERROR, "select rules target entry %d has different size from attribute %s", i, attname);
|
||||
}
|
||||
|
||||
/*
|
||||
* ... there must not be another ON SELECT
|
||||
* rule already ...
|
||||
* ... there must not be another ON SELECT rule already ...
|
||||
*/
|
||||
if (event_relation->rd_rules != NULL) {
|
||||
for (i = 0; i < event_relation->rd_rules->numLocks; i++) {
|
||||
RewriteRule *rule;
|
||||
if (event_relation->rd_rules != NULL)
|
||||
{
|
||||
for (i = 0; i < event_relation->rd_rules->numLocks; i++)
|
||||
{
|
||||
RewriteRule *rule;
|
||||
|
||||
rule = event_relation->rd_rules->rules[i];
|
||||
if (rule->event == CMD_SELECT)
|
||||
@ -333,9 +336,10 @@ DefineQueryRewrite(RuleStmt *stmt)
|
||||
* ... and finally the rule must be named _RETviewname.
|
||||
*/
|
||||
sprintf(expected_name, "_RET%s", event_obj->relname);
|
||||
if (strcmp(expected_name, stmt->rulename) != 0) {
|
||||
if (strcmp(expected_name, stmt->rulename) != 0)
|
||||
{
|
||||
elog(ERROR, "view rule for %s must be named %s",
|
||||
event_obj->relname, expected_name);
|
||||
event_obj->relname, expected_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.30 1999/05/12 15:01:55 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.31 1999/05/25 16:10:52 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -41,26 +41,27 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up)
|
||||
if (node == NULL)
|
||||
return;
|
||||
|
||||
switch(nodeTag(node)) {
|
||||
switch (nodeTag(node))
|
||||
{
|
||||
case T_TargetEntry:
|
||||
{
|
||||
TargetEntry *tle = (TargetEntry *)node;
|
||||
TargetEntry *tle = (TargetEntry *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(tle->expr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (tle->expr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Aggref:
|
||||
{
|
||||
Aggref *aggref = (Aggref *)node;
|
||||
Aggref *aggref = (Aggref *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(aggref->target),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (aggref->target),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -69,54 +70,55 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up)
|
||||
|
||||
case T_Expr:
|
||||
{
|
||||
Expr *exp = (Expr *)node;
|
||||
Expr *exp = (Expr *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(exp->args),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (exp->args),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Iter:
|
||||
{
|
||||
Iter *iter = (Iter *)node;
|
||||
Iter *iter = (Iter *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(iter->iterexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (iter->iterexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_ArrayRef:
|
||||
{
|
||||
ArrayRef *ref = (ArrayRef *)node;
|
||||
ArrayRef *ref = (ArrayRef *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(ref->refupperindexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (ref->refupperindexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
OffsetVarNodes(
|
||||
(Node *)(ref->reflowerindexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (ref->reflowerindexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
OffsetVarNodes(
|
||||
(Node *)(ref->refexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (ref->refexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
OffsetVarNodes(
|
||||
(Node *)(ref->refassgnexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (ref->refassgnexpr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Var:
|
||||
{
|
||||
Var *var = (Var *)node;
|
||||
Var *var = (Var *) node;
|
||||
|
||||
if (var->varlevelsup == sublevels_up) {
|
||||
if (var->varlevelsup == sublevels_up)
|
||||
{
|
||||
var->varno += offset;
|
||||
var->varnoold += offset;
|
||||
}
|
||||
@ -131,98 +133,104 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up)
|
||||
|
||||
case T_List:
|
||||
{
|
||||
List *l;
|
||||
List *l;
|
||||
|
||||
foreach (l, (List *)node)
|
||||
foreach(l, (List *) node)
|
||||
OffsetVarNodes(
|
||||
(Node *)lfirst(l),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) lfirst(l),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_SubLink:
|
||||
{
|
||||
SubLink *sub = (SubLink *)node;
|
||||
List *tmp_oper, *tmp_lefthand;
|
||||
SubLink *sub = (SubLink *) node;
|
||||
List *tmp_oper,
|
||||
*tmp_lefthand;
|
||||
|
||||
/* We also have to adapt the variables used in sub->lefthand
|
||||
* and sub->oper */
|
||||
/*
|
||||
* We also have to adapt the variables used in
|
||||
* sub->lefthand and sub->oper
|
||||
*/
|
||||
OffsetVarNodes(
|
||||
(Node *)(sub->lefthand),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (sub->lefthand),
|
||||
offset,
|
||||
sublevels_up);
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(sub->subselect),
|
||||
offset,
|
||||
sublevels_up + 1);
|
||||
(Node *) (sub->subselect),
|
||||
offset,
|
||||
sublevels_up + 1);
|
||||
|
||||
/***S*I***/
|
||||
/* Make sure the first argument of sub->oper points to the
|
||||
* same var as sub->lefthand does otherwise we will
|
||||
* run into troubles using aggregates (aggno will not be
|
||||
* set correctly) */
|
||||
tmp_lefthand = sub->lefthand;
|
||||
|
||||
/*
|
||||
* Make sure the first argument of sub->oper points to the
|
||||
* same var as sub->lefthand does otherwise we will run
|
||||
* into troubles using aggregates (aggno will not be set
|
||||
* correctly)
|
||||
*/
|
||||
tmp_lefthand = sub->lefthand;
|
||||
foreach(tmp_oper, sub->oper)
|
||||
{
|
||||
lfirst(((Expr *) lfirst(tmp_oper))->args) =
|
||||
lfirst(tmp_lefthand);
|
||||
tmp_lefthand = lnext(tmp_lefthand);
|
||||
}
|
||||
{
|
||||
lfirst(((Expr *) lfirst(tmp_oper))->args) =
|
||||
lfirst(tmp_lefthand);
|
||||
tmp_lefthand = lnext(tmp_lefthand);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Query:
|
||||
{
|
||||
Query *qry = (Query *)node;
|
||||
Query *qry = (Query *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(qry->targetList),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (qry->targetList),
|
||||
offset,
|
||||
sublevels_up);
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(qry->qual),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (qry->qual),
|
||||
offset,
|
||||
sublevels_up);
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(qry->havingQual),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (qry->havingQual),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_CaseExpr:
|
||||
{
|
||||
CaseExpr *exp = (CaseExpr *)node;
|
||||
CaseExpr *exp = (CaseExpr *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(exp->args),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (exp->args),
|
||||
offset,
|
||||
sublevels_up);
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(exp->defresult),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (exp->defresult),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_CaseWhen:
|
||||
{
|
||||
CaseWhen *exp = (CaseWhen *)node;
|
||||
CaseWhen *exp = (CaseWhen *) node;
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(exp->expr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (exp->expr),
|
||||
offset,
|
||||
sublevels_up);
|
||||
|
||||
OffsetVarNodes(
|
||||
(Node *)(exp->result),
|
||||
offset,
|
||||
sublevels_up);
|
||||
(Node *) (exp->result),
|
||||
offset,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -245,28 +253,29 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up)
|
||||
if (node == NULL)
|
||||
return;
|
||||
|
||||
switch(nodeTag(node)) {
|
||||
switch (nodeTag(node))
|
||||
{
|
||||
case T_TargetEntry:
|
||||
{
|
||||
TargetEntry *tle = (TargetEntry *)node;
|
||||
TargetEntry *tle = (TargetEntry *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(tle->expr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (tle->expr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Aggref:
|
||||
{
|
||||
Aggref *aggref = (Aggref *)node;
|
||||
Aggref *aggref = (Aggref *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(aggref->target),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (aggref->target),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -275,61 +284,62 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up)
|
||||
|
||||
case T_Expr:
|
||||
{
|
||||
Expr *exp = (Expr *)node;
|
||||
Expr *exp = (Expr *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(exp->args),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (exp->args),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Iter:
|
||||
{
|
||||
Iter *iter = (Iter *)node;
|
||||
Iter *iter = (Iter *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(iter->iterexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (iter->iterexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_ArrayRef:
|
||||
{
|
||||
ArrayRef *ref = (ArrayRef *)node;
|
||||
ArrayRef *ref = (ArrayRef *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(ref->refupperindexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (ref->refupperindexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
ChangeVarNodes(
|
||||
(Node *)(ref->reflowerindexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (ref->reflowerindexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
ChangeVarNodes(
|
||||
(Node *)(ref->refexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (ref->refexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
ChangeVarNodes(
|
||||
(Node *)(ref->refassgnexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (ref->refassgnexpr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Var:
|
||||
{
|
||||
Var *var = (Var *)node;
|
||||
Var *var = (Var *) node;
|
||||
|
||||
if (var->varlevelsup == sublevels_up &&
|
||||
var->varno == rt_index) {
|
||||
var->varno == rt_index)
|
||||
{
|
||||
var->varno = new_index;
|
||||
var->varnoold = new_index;
|
||||
}
|
||||
@ -344,106 +354,110 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up)
|
||||
|
||||
case T_List:
|
||||
{
|
||||
List *l;
|
||||
List *l;
|
||||
|
||||
foreach (l, (List *)node)
|
||||
foreach(l, (List *) node)
|
||||
ChangeVarNodes(
|
||||
(Node *)lfirst(l),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) lfirst(l),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_SubLink:
|
||||
{
|
||||
SubLink *sub = (SubLink *)node;
|
||||
List *tmp_oper, *tmp_lefthand;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(sub->lefthand),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
SubLink *sub = (SubLink *) node;
|
||||
List *tmp_oper,
|
||||
*tmp_lefthand;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(sub->subselect),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up + 1);
|
||||
|
||||
(Node *) (sub->lefthand),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *) (sub->subselect),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up + 1);
|
||||
|
||||
/***S*I***/
|
||||
/* Make sure the first argument of sub->oper points to the
|
||||
* same var as sub->lefthand does otherwise we will
|
||||
* run into troubles using aggregates (aggno will not be
|
||||
* set correctly) */
|
||||
|
||||
/*
|
||||
* Make sure the first argument of sub->oper points to the
|
||||
* same var as sub->lefthand does otherwise we will run
|
||||
* into troubles using aggregates (aggno will not be set
|
||||
* correctly)
|
||||
*/
|
||||
tmp_lefthand = sub->lefthand;
|
||||
foreach(tmp_oper, sub->oper)
|
||||
{
|
||||
lfirst(((Expr *) lfirst(tmp_oper))->args) =
|
||||
lfirst(tmp_lefthand);
|
||||
tmp_lefthand = lnext(tmp_lefthand);
|
||||
}
|
||||
{
|
||||
lfirst(((Expr *) lfirst(tmp_oper))->args) =
|
||||
lfirst(tmp_lefthand);
|
||||
tmp_lefthand = lnext(tmp_lefthand);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Query:
|
||||
{
|
||||
Query *qry = (Query *)node;
|
||||
Query *qry = (Query *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(qry->targetList),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (qry->targetList),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(qry->qual),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (qry->qual),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(qry->havingQual),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (qry->havingQual),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_CaseExpr:
|
||||
{
|
||||
CaseExpr *exp = (CaseExpr *)node;
|
||||
CaseExpr *exp = (CaseExpr *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(exp->args),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (exp->args),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(exp->defresult),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (exp->defresult),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_CaseWhen:
|
||||
{
|
||||
CaseWhen *exp = (CaseWhen *)node;
|
||||
CaseWhen *exp = (CaseWhen *) node;
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(exp->expr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (exp->expr),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
|
||||
ChangeVarNodes(
|
||||
(Node *)(exp->result),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
(Node *) (exp->result),
|
||||
rt_index,
|
||||
new_index,
|
||||
sublevels_up);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -513,7 +527,7 @@ AddNotHavingQual(Query *parsetree, Node *havingQual)
|
||||
/***S*I***/
|
||||
/* INTERSECT want's the original, but we need to copy - Jan */
|
||||
/* copy = (Node *) make_notclause((Expr *)havingQual); */
|
||||
copy = (Node *)make_notclause( (Expr *)copyObject(havingQual));
|
||||
copy = (Node *) make_notclause((Expr *) copyObject(havingQual));
|
||||
|
||||
AddHavingQual(parsetree, copy);
|
||||
}
|
||||
@ -529,7 +543,7 @@ AddNotQual(Query *parsetree, Node *qual)
|
||||
/***S*I***/
|
||||
/* INTERSECT want's the original, but we need to copy - Jan */
|
||||
/* copy = (Node *) make_notclause((Expr *)qual); */
|
||||
copy = (Node *) make_notclause((Expr *)copyObject(qual));
|
||||
copy = (Node *) make_notclause((Expr *) copyObject(qual));
|
||||
|
||||
AddQual(parsetree, copy);
|
||||
}
|
||||
@ -538,24 +552,24 @@ AddNotQual(Query *parsetree, Node *qual)
|
||||
void
|
||||
AddGroupClause(Query *parsetree, List *group_by, List *tlist)
|
||||
{
|
||||
List *l;
|
||||
List *tl;
|
||||
GroupClause *groupclause;
|
||||
TargetEntry *tle;
|
||||
int new_resno;
|
||||
List *l;
|
||||
List *tl;
|
||||
GroupClause *groupclause;
|
||||
TargetEntry *tle;
|
||||
int new_resno;
|
||||
|
||||
new_resno = length(parsetree->targetList);
|
||||
|
||||
foreach (l, group_by)
|
||||
foreach(l, group_by)
|
||||
{
|
||||
groupclause = (GroupClause *)copyObject(lfirst(l));
|
||||
groupclause = (GroupClause *) copyObject(lfirst(l));
|
||||
tle = NULL;
|
||||
foreach(tl, tlist)
|
||||
{
|
||||
if (((TargetEntry *)lfirst(tl))->resdom->resgroupref ==
|
||||
groupclause->tleGroupref)
|
||||
if (((TargetEntry *) lfirst(tl))->resdom->resgroupref ==
|
||||
groupclause->tleGroupref)
|
||||
{
|
||||
tle = (TargetEntry *)copyObject(lfirst(tl));
|
||||
tle = (TargetEntry *) copyObject(lfirst(tl));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -567,7 +581,7 @@ AddGroupClause(Query *parsetree, List *group_by, List *tlist)
|
||||
tle->resdom->resgroupref = length(parsetree->groupClause) + 1;
|
||||
groupclause->tleGroupref = tle->resdom->resgroupref;
|
||||
|
||||
parsetree->targetList = lappend(parsetree->targetList, tle);
|
||||
parsetree->targetList = lappend(parsetree->targetList, tle);
|
||||
parsetree->groupClause = lappend(parsetree->groupClause, groupclause);
|
||||
}
|
||||
}
|
||||
@ -604,6 +618,7 @@ FixResdomTypes(List *tlist)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static Node *
|
||||
@ -735,10 +750,10 @@ FixNew(RewriteInfo *info, Query *parsetree)
|
||||
{
|
||||
ResolveNew(info, parsetree->targetList,
|
||||
(Node **) &(info->rule_action->targetList), 0);
|
||||
ResolveNew(info, parsetree->targetList,
|
||||
(Node **) &info->rule_action->qual, 0);
|
||||
ResolveNew(info, parsetree->targetList,
|
||||
(Node **) &(info->rule_action->groupClause), 0);
|
||||
ResolveNew(info, parsetree->targetList,
|
||||
(Node **) &info->rule_action->qual, 0);
|
||||
ResolveNew(info, parsetree->targetList,
|
||||
(Node **) &(info->rule_action->groupClause), 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -797,7 +812,7 @@ nodeHandleRIRAttributeRule(Node **nodePtr,
|
||||
break;
|
||||
case T_ArrayRef:
|
||||
{
|
||||
ArrayRef *ref = (ArrayRef *) node;
|
||||
ArrayRef *ref = (ArrayRef *) node;
|
||||
|
||||
nodeHandleRIRAttributeRule((Node **) (&(ref->refupperindexpr)), rtable,
|
||||
targetlist, rt_index, attr_num,
|
||||
@ -972,7 +987,7 @@ nodeHandleViewRule(Node **nodePtr,
|
||||
break;
|
||||
case T_ArrayRef:
|
||||
{
|
||||
ArrayRef *ref = (ArrayRef *) node;
|
||||
ArrayRef *ref = (ArrayRef *) node;
|
||||
|
||||
nodeHandleViewRule((Node **) (&(ref->refupperindexpr)),
|
||||
rtable, targetlist,
|
||||
@ -1006,6 +1021,7 @@ nodeHandleViewRule(Node **nodePtr,
|
||||
*nodePtr = make_null(((Var *) node)->vartype);
|
||||
else
|
||||
{
|
||||
|
||||
/*
|
||||
* This is a hack: The varlevelsup of the orignal
|
||||
* variable and the new one should be the same.
|
||||
@ -1026,7 +1042,7 @@ nodeHandleViewRule(Node **nodePtr,
|
||||
((Var *) *nodePtr)->varlevelsup = this_varlevelsup;
|
||||
else
|
||||
nodeHandleViewRule(&n, rtable, targetlist,
|
||||
rt_index, modified, sublevels_up);
|
||||
rt_index, modified, sublevels_up);
|
||||
}
|
||||
*modified = TRUE;
|
||||
}
|
||||
@ -1048,17 +1064,18 @@ nodeHandleViewRule(Node **nodePtr,
|
||||
{
|
||||
SubLink *sublink = (SubLink *) node;
|
||||
Query *query = (Query *) sublink->subselect;
|
||||
List *tmp_lefthand, *tmp_oper;
|
||||
|
||||
List *tmp_lefthand,
|
||||
*tmp_oper;
|
||||
|
||||
|
||||
nodeHandleViewRule((Node **) &(query->qual), rtable, targetlist,
|
||||
rt_index, modified, sublevels_up + 1);
|
||||
|
||||
/***S*H*D***/
|
||||
nodeHandleViewRule((Node **) &(query->havingQual), rtable, targetlist,
|
||||
rt_index, modified, sublevels_up + 1);
|
||||
rt_index, modified, sublevels_up + 1);
|
||||
nodeHandleViewRule((Node **) &(query->targetList), rtable, targetlist,
|
||||
rt_index, modified, sublevels_up + 1);
|
||||
rt_index, modified, sublevels_up + 1);
|
||||
|
||||
|
||||
/*
|
||||
@ -1076,21 +1093,19 @@ nodeHandleViewRule(Node **nodePtr,
|
||||
*/
|
||||
pfree(lfirst(((Expr *) lfirst(sublink->oper))->args));
|
||||
lfirst(((Expr *) lfirst(sublink->oper))->args) =
|
||||
lfirst(sublink->lefthand);
|
||||
lfirst(sublink->lefthand);
|
||||
|
||||
|
||||
/***S*I***/
|
||||
/* INTERSECT want's this - Jan */
|
||||
|
||||
/*
|
||||
tmp_lefthand = sublink->lefthand;
|
||||
foreach(tmp_oper, sublink->oper)
|
||||
{
|
||||
lfirst(((Expr *) lfirst(tmp_oper))->args) =
|
||||
lfirst(tmp_lefthand);
|
||||
tmp_lefthand = lnext(tmp_lefthand);
|
||||
}
|
||||
*/
|
||||
}
|
||||
* tmp_lefthand = sublink->lefthand; foreach(tmp_oper,
|
||||
* sublink->oper) { lfirst(((Expr *)
|
||||
* lfirst(tmp_oper))->args) = lfirst(tmp_lefthand);
|
||||
* tmp_lefthand = lnext(tmp_lefthand); }
|
||||
*/
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* ignore the others */
|
||||
@ -1119,5 +1134,5 @@ HandleViewRule(Query *parsetree,
|
||||
nodeHandleViewRule((Node **) (&(parsetree->groupClause)), rtable, targetlist, rt_index,
|
||||
modified, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.23 1999/05/10 00:45:32 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.24 1999/05/25 16:10:54 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -42,7 +42,7 @@ RewriteGetRuleEventRel(char *rulename)
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(htup))
|
||||
elog(ERROR, "Rule or view '%s' not found",
|
||||
((!strncmp(rulename, "_RET", 4))? (rulename+4): rulename));
|
||||
((!strncmp(rulename, "_RET", 4)) ? (rulename + 4) : rulename));
|
||||
eventrel = ((Form_pg_rewrite) GETSTRUCT(htup))->ev_class;
|
||||
htup = SearchSysCacheTuple(RELOID,
|
||||
PointerGetDatum(eventrel),
|
||||
|
Reference in New Issue
Block a user