@@ -297,7 +297,7 @@ append_child_relation(PlannerInfo *root, RelOptInfo *rel, Index rti,
297297PartRelationInfo * prel ;
298298
299299Node * node ;
300- ListCell * lc ;
300+ ListCell * lc , * lc2 ;
301301
302302prel = (PartRelationInfo * )
303303hash_search (relations , (const void * )& rte -> relid ,HASH_FIND ,0 );
@@ -328,18 +328,24 @@ append_child_relation(PlannerInfo *root, RelOptInfo *rel, Index rti,
328328
329329/* copy restrictions */
330330childrel -> baserestrictinfo = NIL ;
331- foreach (lc ,wrappers )
331+ forboth (lc ,wrappers , lc2 , rel -> baserestrictinfo )
332332{
333333bool alwaysTrue ;
334334WrapperNode * wrap = (WrapperNode * )lfirst (lc );
335- Node * new_rinfo = wrapper_make_expression (wrap ,index ,& alwaysTrue );
335+ Node * new_clause = wrapper_make_expression (wrap ,index ,& alwaysTrue );
336+ RestrictInfo * new_rinfo ;
336337
337338if (alwaysTrue )
338339continue ;
339- Assert (new_rinfo );
340+ Assert (new_clause );
341+
342+ /* TODO: evade double copy of clause */
343+
344+ new_rinfo = copyObject ((Node * )lfirst (lc2 ));
345+ new_rinfo -> clause = (Expr * )new_clause ;
340346
341347/* replace old relids with new ones */
342- change_varnos (new_rinfo ,rel -> relid ,childrel -> relid );
348+ change_varnos (( Node * ) new_rinfo ,rel -> relid ,childrel -> relid );
343349
344350childrel -> baserestrictinfo = lappend (childrel -> baserestrictinfo ,
345351new_rinfo );
@@ -380,20 +386,24 @@ wrapper_make_expression(WrapperNode *wrap, int index, bool *alwaysTrue)
380386if (expr -> boolop == OR_EXPR || expr -> boolop == AND_EXPR )
381387{
382388ListCell * lc ;
383- List * args ;
389+ List * args = NIL ;
384390
385391foreach (lc ,wrap -> args )
386392{
387393Node * arg ;
388394
389395arg = wrapper_make_expression ((WrapperNode * )lfirst (lc ),index ,alwaysTrue );
390- Assert (!(* alwaysTrue ));
391- Assert (arg || * alwaysTrue );
396+ #ifdef USE_ASSERT_CHECKING
397+ if (expr -> boolop == OR_EXPR )
398+ Assert (!(* alwaysTrue ));
399+ if (expr -> boolop == AND_EXPR )
400+ Assert (arg || * alwaysTrue );
401+ #endif
392402if (arg )
393403args = lappend (args ,arg );
394404}
395405
396- Assert (list_length (args )> 1 );
406+ Assert (list_length (args ) >= 1 );
397407if (list_length (args )== 1 )
398408return (Node * )linitial (args );
399409