From: Tom Lane <tgl@sss.pgh.pa.us>
To: Kyle Bateman <kyle@actarg.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: unplanned sub-select error?
Date: Wed, 23 Nov 2005 12:23:00 -0500
Message-ID: <22945.1132766580@sss.pgh.pa.us> (raw)
In-Reply-To: <43837E9B.20306@actarg.com>
References: <43826850.1020302@actarg.com>
<6603.1132621854@sss.pgh.pa.us>
<43837E9B.20306@actarg.com>
Kyle Bateman <kyle@actarg.com> writes:
> Sorry, you're right. I have now confirmed that this only happens when
> updating via a view/rule (as you suspected). Attached is a minimalist
> sql file that demonstrates the same error message from a blank
> database. I'm using 8.1.0. I'm pretty sure this problem did not exist
> on 8.0.3.
Fixed --- attached is the patch if you need it right away. Thanks for
the report!
regards, tom lane
inline patch 1: src/backend/rewrite/rewriteHandler.c, src/backend/rewrite/rewriteManip.c (+26/-4 lines) download inline-1.patchIndex: src/backend/rewrite/rewriteHandler.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v
retrieving revision 1.159
diff -c -r1.159 rewriteHandler.c
*** src/backend/rewrite/rewriteHandler.c 22 Nov 2005 18:17:19 -0000 1.159
--- src/backend/rewrite/rewriteHandler.c 23 Nov 2005 17:10:01 -0000
***************
*** 374,379 ****
--- 374,387 ----
sub_action->jointree->fromlist =
list_concat(newjointree, sub_action->jointree->fromlist);
+ + /*+ * There could have been some SubLinks in newjointree, in which+ * case we'd better mark the sub_action correctly.+ */+ if (parsetree->hasSubLinks && !sub_action->hasSubLinks)+ sub_action->hasSubLinks =+ checkExprHasSubLink((Node *) newjointree);
}
}
Index: src/backend/rewrite/rewriteManip.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v
retrieving revision 1.93
diff -c -r1.93 rewriteManip.c
*** src/backend/rewrite/rewriteManip.c 22 Nov 2005 18:17:19 -0000 1.93
--- src/backend/rewrite/rewriteManip.c 23 Nov 2005 17:10:01 -0000
***************
*** 930,935 ****
--- 930,936 ----
RangeTblEntry *target_rte,
List *targetlist, int event, int update_varno)
{
+ Node *result;
ResolveNew_context context;
context.target_varno = target_varno;
***************
*** 944,951 ****
* 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_mutator(node,
! ResolveNew_mutator,
! (void *) &context,
! 0);
}
--- 945,965 ----
* 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.
*/
! result = query_or_expression_tree_mutator(node,
! ResolveNew_mutator,
! (void *) &context,
! 0);
!
! if (context.inserted_sublink)
! {
! if (IsA(result, Query))
! ((Query *) result)->hasSubLinks = true;
! /*
! * Note: if we're called on a non-Query node then it's the caller's
! * responsibility to update hasSubLinks in the ancestor Query.
! * This is pretty fragile and perhaps should be rethought ...
! */
! }
!
! return result;
}
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: tgl@sss.pgh.pa.us, kyle@actarg.com
Subject: Re: unplanned sub-select error?
In-Reply-To: <22945.1132766580@sss.pgh.pa.us>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox