Re: unplanned sub-select error?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: unplanned sub-select error?
Дата
Msg-id 22945.1132766580@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: unplanned sub-select error?  (Kyle Bateman <kyle@actarg.com>)
Список pgsql-sql
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


Index: 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'twant 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'twant 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; }


В списке pgsql-sql по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: sysid
Следующее
От: Michael Fuhr
Дата:
Сообщение: Re: what is going on in the PostgreSQL