Re: [PATCHES] [HACKERS] WITH RECURSIVE patches 0818

2008-08-22 Thread Tatsuo Ishii
 I think I may have found another bug:
 
 WITH RECURSIVE t(i,j) AS (
 VALUES (1,2)
 UNION ALL
 SELECT t2.i, t.j
 FROM (
 SELECT 2 AS i
 UNION ALL   /* Wrongly getting detected, I think */
 SELECT 3 AS i
 ) AS t2
 JOIN
 t
 ON (t2.i = t.i)
 )
 SELECT * FROM t;
 ERROR:  attribute number 2 exceeds number of columns 1
 
 Is there some way to ensure that in the case of WITH RECURSIVE, the
 query to the right of UNION ALL follows only the SQL:2008 rules about
 not having outer JOINs, etc. in it, but otherwise make it opaque to
 the error-checking code?
 
 I know I didn't explain that well, but the above SQL should work and
 the error appears to stem from the parser's looking at the innermost
 UNION ALL instead of the outermost.

Here is new patches fixing the bug you pointed out (patches was
created by Yoshiyuki). Also I added your SQL to the regression test,
and now the patches is against CVS HEAD. For your convenience I also
include patches against the previous version.
--
Tatsuo Ishii
SRA OSS, Inc. Japan


recursive_query.patch.gz
Description: Binary data
*** pgsql/src/backend/executor/nodeAppend.c 2008-08-18 16:20:40.0 
+0900
--- pgsql.patched/src/backend/executor/nodeAppend.c 2008-08-23 
07:37:29.0 +0900
***
*** 143,152 
--- 143,156 
int nplans;
int i;
Plan   *initNode;
+   TupleDesc  save_tupledesc;
  
/* check for unsupported flags */
Assert(!(eflags  EXEC_FLAG_MARK));
  
+   /* Save tuple desc */
+   save_tupledesc = estate-es_rscan_tupledesc;
+ 
/*
 * Set up empty vector of subplan states
 */
***
*** 232,237 
--- 236,243 
appendstate-as_whichplan = appendstate-as_firstplan;
exec_append_initialize_next(appendstate);
  
+   /* Restore tuple desc */
+   estate-es_rscan_tupledesc = save_tupledesc;
+ 
return appendstate;
  }

-- 
Sent via pgsql-patches mailing list (pgsql-patches@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-patches


Re: [PATCHES] [HACKERS] WITH RECURSIVE patches 0818

2008-08-19 Thread Tatsuo Ishii
 I think I may have found another bug:
 
 WITH RECURSIVE t(i,j) AS (
 VALUES (1,2)
 UNION ALL
 SELECT t2.i, t.j
 FROM (
 SELECT 2 AS i
 UNION ALL   /* Wrongly getting detected, I think */
 SELECT 3 AS i
 ) AS t2
 JOIN
 t
 ON (t2.i = t.i)
 )
 SELECT * FROM t;
 ERROR:  attribute number 2 exceeds number of columns 1
 
 Is there some way to ensure that in the case of WITH RECURSIVE, the
 query to the right of UNION ALL follows only the SQL:2008 rules about
 not having outer JOINs, etc. in it, but otherwise make it opaque to
 the error-checking code?
 
 I know I didn't explain that well, but the above SQL should work and
 the error appears to stem from the parser's looking at the innermost
 UNION ALL instead of the outermost.

Thanks for the report. I will look into this.
--
Tatsuo Ishii
SRA OSS, Inc. Japan

-- 
Sent via pgsql-patches mailing list (pgsql-patches@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-patches