Renumber the Select.selId values in the copies of SELECT statements that
implement VIEWs when the VIEW is expanded, so that when the same VIEW is used twice in the same join, each expansion as a distinct selId. This fixes ticket [ce823231949d3abf42453c8]. FossilOrigin-Name: 3cacc4b940fd69776d930deec9512df47a2f22cb04fb955e354a0b25bdec287c
This commit is contained in:
parent
90c21df233
commit
59145813d2
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
||||
C New\sdbsqlfuzz\sfind\sadded\sto\stest/fuzzdata8.db.
|
||||
D 2019-05-22T14:35:10.578
|
||||
C Renumber\sthe\sSelect.selId\svalues\sin\sthe\scopies\sof\sSELECT\sstatements\sthat\nimplement\sVIEWs\swhen\sthe\sVIEW\sis\sexpanded,\sso\sthat\swhen\sthe\ssame\sVIEW\sis\nused\stwice\sin\sthe\ssame\sjoin,\seach\sexpansion\sas\sa\sdistinct\sselId.\nThis\sfixes\sticket\s[ce823231949d3abf42453c8].
|
||||
D 2019-05-22T22:49:23.036
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@ -522,7 +522,7 @@ F src/printf.c 67f79227273a9009d86a017619717c3f554f50b371294526da59faa6014ed2cd
|
||||
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
|
||||
F src/resolve.c bae0a7562db77b02d87101b587819d5a5dcd8625e477d2d8a228a20bba4fead6
|
||||
F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
|
||||
F src/select.c c620bcd03b1fbf9fed7d0e49c5e32bea3233c3f7c67d896271c36d6e5a4c621c
|
||||
F src/select.c 2db13eac09ac2d45b2cfd5dd106d6b9b02fe413db7240731868d55467e981b85
|
||||
F src/shell.c.in 6c992809abf20dbb4aad89299d7c15c98ddf2504b23c83ef71eb435ad392cdc3
|
||||
F src/sqlite.h.in d19c873a17c2effd4417f687fad942b6cc0ab0c64535f669cc2f22a5b05db23b
|
||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||
@ -1709,7 +1709,7 @@ F test/window8.test df187dc19921f7be0ab709d531d681bd80ccaac96a913a89ecee8b272b91
|
||||
F test/windowerr.tcl abf4d6d0c6d360213af98ed7d538295d905689e83692106f3ece0e3afb9d7f36
|
||||
F test/windowerr.test 675b5e6debfc9370bfacb0b91e2a93a8923512f92600b16f4ea70a1cd9b8e6e4
|
||||
F test/windowfault.test 16e906a2c4110c88372ff4bd5de59ac7397ec2f025912eff8e5677eedd126898
|
||||
F test/with1.test a07b5aad7f77acdf13e52e8814ea94606fcc72e9ea4c99baf293e9d7c63940be
|
||||
F test/with1.test f8b59d186a31bcdfbd6683c7e7db8152b81bbefbb90235bfa37707c8bc7b6474
|
||||
F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab
|
||||
F test/with3.test b5f1372097690c6ef84db2f13fc7e64a88c7263c3f88493605f90597e8a68d45
|
||||
F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f198205
|
||||
@ -1828,7 +1828,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 1660d7733eb443ab085ddef7666b998a1c75ac81cc54a9620960a8d3b377e28e
|
||||
R 1e74e533f91367ec7921e2ea66d0ca79
|
||||
P 42af7c819bc52ccb6953a58b1c05d3bd47cc438c5119a9555b1b796764eb9f20
|
||||
R 2b09f296fa1dcac8cd30ef4241a7e8b0
|
||||
U drh
|
||||
Z 4c3aeca66bd75ef066c4373e8b791867
|
||||
Z 24fc3a390964329b9ca09380346f2fb1
|
||||
|
@ -1 +1 @@
|
||||
42af7c819bc52ccb6953a58b1c05d3bd47cc438c5119a9555b1b796764eb9f20
|
||||
3cacc4b940fd69776d930deec9512df47a2f22cb04fb955e354a0b25bdec287c
|
@ -4843,6 +4843,10 @@ static int selectExpander(Walker *pWalker, Select *p){
|
||||
if( (selFlags & SF_Expanded)!=0 ){
|
||||
return WRC_Prune;
|
||||
}
|
||||
if( pWalker->eCode ){
|
||||
/* Renumber selId because it has been copied from a view */
|
||||
p->selId = ++pParse->nSelect;
|
||||
}
|
||||
pTabList = p->pSrc;
|
||||
pEList = p->pEList;
|
||||
sqlite3WithPush(pParse, p->pWith, 0);
|
||||
@ -4892,12 +4896,15 @@ static int selectExpander(Walker *pWalker, Select *p){
|
||||
#if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
|
||||
if( IsVirtual(pTab) || pTab->pSelect ){
|
||||
i16 nCol;
|
||||
u8 eCodeOrig = pWalker->eCode;
|
||||
if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
|
||||
assert( pFrom->pSelect==0 );
|
||||
pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
|
||||
nCol = pTab->nCol;
|
||||
pTab->nCol = -1;
|
||||
pWalker->eCode = 1; /* Turn on Select.selId renumbering */
|
||||
sqlite3WalkSelect(pWalker, pFrom->pSelect);
|
||||
pWalker->eCode = eCodeOrig;
|
||||
pTab->nCol = nCol;
|
||||
}
|
||||
#endif
|
||||
@ -5147,6 +5154,7 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
|
||||
}
|
||||
w.xSelectCallback = selectExpander;
|
||||
w.xSelectCallback2 = selectPopWith;
|
||||
w.eCode = 0;
|
||||
sqlite3WalkSelect(&w, pSelect);
|
||||
}
|
||||
|
||||
|
@ -1091,4 +1091,30 @@ do_catchsql_test 22.1 {
|
||||
SELECT 4 FROM c,c,c,c,c,c,c,c,c;
|
||||
} {1 {too many FROM clause terms, max: 200}}
|
||||
|
||||
# 2019-05-22
|
||||
# ticket https://www.sqlite.org/src/tktview/ce823231949d3abf42453c8f20
|
||||
#
|
||||
sqlite3 db :memory:
|
||||
do_execsql_test 23.1 {
|
||||
CREATE TABLE t1(id INTEGER NULL PRIMARY KEY, name Text);
|
||||
INSERT INTO t1 VALUES (1, 'john');
|
||||
INSERT INTO t1 VALUES (2, 'james');
|
||||
INSERT INTO t1 VALUES (3, 'jingle');
|
||||
INSERT INTO t1 VALUES (4, 'himer');
|
||||
INSERT INTO t1 VALUES (5, 'smith');
|
||||
CREATE VIEW v2 AS
|
||||
WITH t4(Name) AS (VALUES ('A'), ('B'))
|
||||
SELECT Name Name FROM t4;
|
||||
CREATE VIEW v3 AS
|
||||
WITH t4(Att, Val, Act) AS (VALUES
|
||||
('C', 'D', 'E'),
|
||||
('F', 'G', 'H')
|
||||
)
|
||||
SELECT D.Id Id, P.Name Protocol, T.Att Att, T.Val Val, T.Act Act
|
||||
FROM t1 D
|
||||
CROSS JOIN v2 P
|
||||
CROSS JOIN t4 T;
|
||||
SELECT * FROM v3;
|
||||
} {1 A C D E 1 A F G H 1 B C D E 1 B F G H 2 A C D E 2 A F G H 2 B C D E 2 B F G H 3 A C D E 3 A F G H 3 B C D E 3 B F G H 4 A C D E 4 A F G H 4 B C D E 4 B F G H 5 A C D E 5 A F G H 5 B C D E 5 B F G H}
|
||||
|
||||
finish_test
|
||||
|
Loading…
x
Reference in New Issue
Block a user