diff options
Diffstat (limited to 'src/backend/parser/analyze.c')
-rw-r--r-- | src/backend/parser/analyze.c | 77 |
1 files changed, 5 insertions, 72 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index e4a4e3a5e48..dae54783931 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -56,7 +56,6 @@ static Node *transformSetOperationTree(ParseState *pstate, SelectStmt *stmt, bool isTopLevel, List **targetlist); static void determineRecursiveColTypes(ParseState *pstate, Node *larg, List *nrtargetlist); -static void applyColumnNames(List *dst, List *src); static Query *transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt); static List *transformReturningList(ParseState *pstate, List *returningList); static Query *transformDeclareCursorStmt(ParseState *pstate, @@ -964,13 +963,8 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) pstate->p_windowdefs, &qry->targetList); - /* handle any SELECT INTO/CREATE TABLE AS spec */ - if (stmt->intoClause) - { - qry->intoClause = stmt->intoClause; - if (stmt->intoClause->colNames) - applyColumnNames(qry->targetList, stmt->intoClause->colNames); - } + /* SELECT INTO/CREATE TABLE AS spec is just passed through */ + qry->intoClause = stmt->intoClause; qry->rtable = pstate->p_rtable; qry->jointree = makeFromExpr(pstate->p_joinlist, qual); @@ -1191,13 +1185,8 @@ transformValuesClause(ParseState *pstate, SelectStmt *stmt) (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("SELECT FOR UPDATE/SHARE cannot be applied to VALUES"))); - /* handle any CREATE TABLE AS spec */ - if (stmt->intoClause) - { - qry->intoClause = stmt->intoClause; - if (stmt->intoClause->colNames) - applyColumnNames(qry->targetList, stmt->intoClause->colNames); - } + /* CREATE TABLE AS spec is just passed through */ + qry->intoClause = stmt->intoClause; /* * There mustn't have been any table references in the expressions, else @@ -1268,7 +1257,6 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt) int leftmostRTI; Query *leftmostQuery; SetOperationStmt *sostmt; - List *intoColNames = NIL; List *sortClause; Node *limitOffset; Node *limitCount; @@ -1306,11 +1294,7 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt) leftmostSelect = leftmostSelect->larg; Assert(leftmostSelect && IsA(leftmostSelect, SelectStmt) && leftmostSelect->larg == NULL); - if (leftmostSelect->intoClause) - { - qry->intoClause = leftmostSelect->intoClause; - intoColNames = leftmostSelect->intoClause->colNames; - } + qry->intoClause = leftmostSelect->intoClause; /* clear this to prevent complaints in transformSetOperationTree() */ leftmostSelect->intoClause = NULL; @@ -1460,19 +1444,6 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt) qry->limitCount = transformLimitClause(pstate, limitCount, "LIMIT"); - /* - * Handle SELECT INTO/CREATE TABLE AS. - * - * Any column names from CREATE TABLE AS need to be attached to both the - * top level and the leftmost subquery. We do not do this earlier because - * we do *not* want sortClause processing to be affected. - */ - if (intoColNames) - { - applyColumnNames(qry->targetList, intoColNames); - applyColumnNames(leftmostQuery->targetList, intoColNames); - } - qry->rtable = pstate->p_rtable; qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); @@ -1892,44 +1863,6 @@ determineRecursiveColTypes(ParseState *pstate, Node *larg, List *nrtargetlist) analyzeCTETargetList(pstate, pstate->p_parent_cte, targetList); } -/* - * Attach column names from a ColumnDef list to a TargetEntry list - * (for CREATE TABLE AS) - */ -static void -applyColumnNames(List *dst, List *src) -{ - ListCell *dst_item; - ListCell *src_item; - - src_item = list_head(src); - - foreach(dst_item, dst) - { - TargetEntry *d = (TargetEntry *) lfirst(dst_item); - ColumnDef *s; - - /* junk targets don't count */ - if (d->resjunk) - continue; - - /* fewer ColumnDefs than target entries is OK */ - if (src_item == NULL) - break; - - s = (ColumnDef *) lfirst(src_item); - src_item = lnext(src_item); - - d->resname = pstrdup(s->colname); - } - - /* more ColumnDefs than target entries is not OK */ - if (src_item != NULL) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("CREATE TABLE AS specifies too many column names"))); -} - /* * transformUpdateStmt - |