From aaf244247287b671db2d55098ed6aa774049a058 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 12 Jun 1999 19:38:30 +0000 Subject: [PATCH] Remove query_planner's overhasty rejection of cases where tlist and qual are NULL. It ought to handle these the same as the cases where tlist contains only constant expressions, ie, be willing to generate a Result-node plan. This did not use to matter, but it does now because union_planner will flatten the tlist when aggregates are present. Thus, 'select count(1) from table' now causes query_planner to be given a null tlist, and to duplicate 6.4's behavior we need it to give back a Result plan rather than refusing the query. 6.4 was arguably doing the Wrong Thing for this query, but I'm not going to open a semantics issue right before 6.5 release ... can revisit that problem later. --- src/backend/optimizer/plan/planmain.c | 36 ++++++++------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index dae0443e1e..80eaaf9a05 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.36 1999/05/25 16:09:36 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.37 1999/06/12 19:38:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -68,9 +68,9 @@ query_planner(Query *root, List *qual) { List *constant_qual = NIL; - List *var_only_tlist = NIL; - List *level_tlist = NIL; - Plan *subplan = NULL; + List *var_only_tlist; + List *level_tlist; + Plan *subplan; if (PlannerQueryLevel > 1) { @@ -87,29 +87,15 @@ query_planner(Query *root, pprint(qual); #endif - /* - * A command without a target list or qualification is an error, - * except for "delete foo". - */ - if (tlist == NIL && qual == NULL) - { - if (command_type == CMD_DELETE) - { - return ((Plan *) make_seqscan(NIL, - NIL, - root->resultRelation, - (Plan *) NULL)); - } - else - return (Plan *) NULL; - } - /* * Pull out any non-variable qualifications so these can be put in the - * topmost result node. The opids for the remaining qualifications - * will be changed to regprocs later. + * topmost result node. */ qual = pull_constant_clauses(qual, &constant_qual); + /* + * The opids for the variable qualifications will be fixed later, but + * someone seems to think that the constant quals need to be fixed here. + */ fix_opids(constant_qual); /* @@ -143,13 +129,13 @@ query_planner(Query *root, case CMD_UPDATE: { SeqScan *scan = make_seqscan(tlist, - (List *) NULL, + NIL, root->resultRelation, (Plan *) NULL); if (constant_qual != NULL) return ((Plan *) make_result(tlist, - (Node *) constant_qual, + (Node *) constant_qual, (Plan *) scan)); else return (Plan *) scan;