-C Don't\stry\sto\sverify\sthe\sschema\sof\stransient\stable\s(such\sas\sgenerated\sinside\na\sWITH\sclause)\swhen\sgenerating\scode\sfor\s"IN\stable"\soperators.
-D 2014-01-15T14:40:41.242
+C Return\san\serror\sif\sa\sCTE\sspecifies\sa\sdifferent\snumber\sof\scolumns\sthan\sits\sSELECT\sstatement\sreturns.
+D 2014-01-15T15:27:51.337
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
-F src/select.c 51c74176eb949d1ff5797735acedd6c08d19450a
+F src/select.c 7d0d85f5d0a0f35be49230a3b6609fa534980015
F src/shell.c a3541193d5fce37e91dad8ef46a9505aa7c9b344
F src/sqlite.h.in d94a8b89522f526ba711182ee161e06f8669bcc9
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
F test/win32heap.test ea19770974795cff26e11575e12d422dbd16893c
F test/win32lock.test 7a6bd73a5dcdee39b5bb93e92395e1773a194361
F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
-F test/with1.test 77739a9e5e88873e7655634297d9dc4360334f9a
+F test/with1.test babb3d9c4007596d2d74468e001b1dc02d1ada91
F test/withM.test ac3ec7ee0b33a02d0fa15da91214d97ddea64e34
F test/without_rowid1.test aaa26da19d543cd8d3d2d0e686dfa255556c15c8
F test/without_rowid2.test af260339f79d13cb220288b67cd287fbcf81ad99
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P 9472f6d820a7fb233936d9b8f7a39c9d4c4d6d73
-R 719190df89fa0f9b34e7fe5eb5626240
-U drh
-Z 58f028530f5aaa7c16053558b5f5262a
+P 860aa936634a60d68e3954fc408a96a9260394e0
+R 0c042289cd11db254af8c2a3a3653738
+U dan
+Z d4b370476cdc85ae036fb519ef522aac
-860aa936634a60d68e3954fc408a96a9260394e0
\ No newline at end of file
+9a514b50e4b01f109fbdb0aabcbfe1ddab129b44
\ No newline at end of file
}else{
ExprList *pEList;
Select *pSel;
+ Select *pLeft; /* Left-most SELECT statement */
int bRecursive;
pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
sqlite3WalkSelect(pWalker, pSel);
}
+ for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior);
+ pEList = pLeft->pEList;
if( pCte->pCols ){
+ if( pEList->nExpr!=pCte->pCols->nExpr ){
+ sqlite3ErrorMsg(pParse, "cte \"%s\" returns %d values for %d columns",
+ pCte->zName, pEList->nExpr, pCte->pCols->nExpr
+ );
+ return WRC_Abort;
+ }
pEList = pCte->pCols;
- }else{
- Select *pLeft;
- for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior);
- pEList = pLeft->pEList;
}
+
selectColumnsFromExprList(pParse, pEList, &pTab->nCol, &pTab->aCol);
if( bRecursive ){
SELECT x FROM i LIMIT 20;
} {1 2 3 4 5 6 7 8 9 0}
+do_catchsql_test 5.6.1 {
+ WITH i(x, y) AS ( VALUES(1) )
+ SELECT * FROM i;
+} {1 {cte "i" returns 1 values for 2 columns}}
+
+do_catchsql_test 5.6.2 {
+ WITH i(x) AS ( VALUES(1,2) )
+ SELECT * FROM i;
+} {1 {cte "i" returns 2 values for 1 columns}}
+
+do_catchsql_test 5.6.3 {
+ CREATE TABLE t5(a, b);
+ WITH i(x) AS ( SELECT * FROM t5 )
+ SELECT * FROM i;
+} {1 {cte "i" returns 2 values for 1 columns}}
+
+do_catchsql_test 5.6.4 {
+ WITH i(x) AS ( SELECT 1, 2 UNION ALL SELECT 1 )
+ SELECT * FROM i;
+} {1 {cte "i" returns 2 values for 1 columns}}
+
+do_catchsql_test 5.6.5 {
+ WITH i(x) AS ( SELECT 1 UNION ALL SELECT 1, 2 )
+ SELECT * FROM i;
+} {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}}
+
+do_catchsql_test 5.6.6 {
+ WITH i(x) AS ( SELECT 1 UNION ALL SELECT x+1, x*2 FROM i )
+ SELECT * FROM i;
+} {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}}
+
+do_catchsql_test 5.6.7 {
+ WITH i(x) AS ( SELECT 1, 2 UNION SELECT x+1 FROM i )
+ SELECT * FROM i;
+} {1 {cte "i" returns 2 values for 1 columns}}
+
#-------------------------------------------------------------------------
#
do_execsql_test 6.1 {