From b20fd6c42d18e567d52cb1b32d801ac4a3fe37d2 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 6 Feb 1998 16:46:29 +0000 Subject: [PATCH] FIx hasSubLinks for Vadim. --- src/backend/parser/analyze.c | 45 ++++++++++++++++++++------------- src/backend/parser/parse_expr.c | 10 +++++--- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index a494106fd5..64069bfa2b 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.68 1998/01/20 22:11:51 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.69 1998/02/06 16:46:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -217,7 +217,8 @@ transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt) /* fix where clause */ qry->qual = transformWhereClause(pstate, stmt->whereClause); - + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->rtable = pstate->p_rtable; qry->resultRelation = refnameRangeTablePosn(pstate, stmt->relname, NULL); @@ -317,7 +318,8 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) /* fix where clause */ qry->qual = transformWhereClause(pstate, stmt->whereClause); - + qry->hasSubLinks = pstate->p_hasSubLinks; + /* now the range table will not change */ qry->rtable = pstate->p_rtable; qry->resultRelation = refnameRangeTablePosn(pstate, stmt->relname, NULL); @@ -664,18 +666,20 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) static Query * transformIndexStmt(ParseState *pstate, IndexStmt *stmt) { - Query *q; + Query *qry; - q = makeNode(Query); - q->commandType = CMD_UTILITY; + qry = makeNode(Query); + qry->commandType = CMD_UTILITY; /* take care of the where clause */ stmt->whereClause = transformWhereClause(pstate, stmt->whereClause); + qry->hasSubLinks = pstate->p_hasSubLinks; + stmt->rangetable = pstate->p_rtable; - q->utilityStmt = (Node *) stmt; + qry->utilityStmt = (Node *) stmt; - return q; + return qry; } /* @@ -686,17 +690,19 @@ transformIndexStmt(ParseState *pstate, IndexStmt *stmt) static Query * transformExtendStmt(ParseState *pstate, ExtendStmt *stmt) { - Query *q; + Query *qry; - q = makeNode(Query); - q->commandType = CMD_UTILITY; + qry = makeNode(Query); + qry->commandType = CMD_UTILITY; /* take care of the where clause */ stmt->whereClause = transformWhereClause(pstate, stmt->whereClause); + qry->hasSubLinks = pstate->p_hasSubLinks; + stmt->rangetable = pstate->p_rtable; - q->utilityStmt = (Node *) stmt; - return q; + qry->utilityStmt = (Node *) stmt; + return qry; } /* @@ -707,11 +713,11 @@ transformExtendStmt(ParseState *pstate, ExtendStmt *stmt) static Query * transformRuleStmt(ParseState *pstate, RuleStmt *stmt) { - Query *q; + Query *qry; List *actions; - q = makeNode(Query); - q->commandType = CMD_UTILITY; + qry = makeNode(Query); + qry->commandType = CMD_UTILITY; actions = stmt->actions; @@ -740,9 +746,10 @@ transformRuleStmt(ParseState *pstate, RuleStmt *stmt) /* take care of the where clause */ stmt->whereClause = transformWhereClause(pstate, stmt->whereClause); + qry->hasSubLinks = pstate->p_hasSubLinks; - q->utilityStmt = (Node *) stmt; - return q; + qry->utilityStmt = (Node *) stmt; + return qry; } @@ -769,6 +776,7 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) qry->targetList = transformTargetList(pstate, stmt->targetList); qry->qual = transformWhereClause(pstate, stmt->whereClause); + qry->hasSubLinks = pstate->p_hasSubLinks; qry->sortClause = transformSortClause(pstate, stmt->sortClause, @@ -813,6 +821,7 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) qry->targetList = transformTargetList(pstate, stmt->targetList); qry->qual = transformWhereClause(pstate, stmt->whereClause); + qry->hasSubLinks = pstate->p_hasSubLinks; qry->rtable = pstate->p_rtable; diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 6678c79179..7daf1617dc 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.16 1998/02/05 17:22:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.17 1998/02/06 16:46:29 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -243,11 +243,13 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) SubLink *sublink = (SubLink *) expr; QueryTreeList *qtree; List *llist; - + + pstate->p_hasSubLinks = true; + qtree = parse_analyze(lcons(sublink->subselect,NIL), pstate); Assert(qtree->len == 1); sublink->subselect = (Node *) qtree->qtrees[0]; - + foreach(llist, sublink->lefthand) lfirst(llist) = transformExpr(pstate, lfirst(llist), precedence); @@ -267,7 +269,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) { Node *lexpr = lfirst(elist); Node *rexpr = lfirst(right_expr); - TargetEntry *tent = (TargetEntry *)rexpr; + TargetEntry *tent = (TargetEntry *)rexpr; Expr *op_expr; op_expr = make_op(op, lexpr, tent->expr);