1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00

Fix the expansion of "TABLE.*" so that it works the same as PostgreSQL

when TABLE is the left operand of a RIGHT JOIN USING.
[bugs:/info/2026-10-07T02:56:24Z|Bug 2026-10-07T02:56:24Z]

FossilOrigin-Name: d232720b7932c1cebe4cf5b1a1e9096889e1807844351390149dfeb2ea7fc304
This commit is contained in:
drh
2026-10-07 10:41:59 +00:00
parent caa0b5886e
commit 9d50c7ebfc
4 changed files with 27 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
C In\sthe\streeview\sdisplay\sfor\sExpr,\sshow\sTK_ASTERISK\snodes.\s\sDebugging\nlogic\sonly\s-\snot\sused\sin\sproduction\sbuilds.
D 2026-10-07T10:07:16.107
C Fix\sthe\sexpansion\sof\s"TABLE.*"\sso\sthat\sit\sworks\sthe\ssame\sas\sPostgreSQL\nwhen\sTABLE\sis\sthe\sleft\soperand\sof\sa\sRIGHT\sJOIN\sUSING.\n[bugs:/info/2026-10-07T02:56:24Z|Bug\s2026-10-07T02:56:24Z]
D 2026-10-07T10:41:59.664
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -801,7 +801,7 @@ F src/printf.c 4bd228ed9e9346d558362be562757ee5eef6f9bf483b7f02751ca42cf95174d3
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 0e0990f60c93db38c735d85e5d1741130e72dd0670aec204b5a39118b53c8044
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 088184992ed43f1bf3cb520fcb16783c449dfa0a15bcde8d0bc98c40afb66f59
F src/select.c 8d2e31c0a88c30aabea7acc5a5e1e20ae24481d55e9fb187d53313d3080e3fcf
F src/shell.c.in 4007bb5e67d79045137db895275902785e88d77bca2b06d8b7d94e518e84a410
F src/sqlite.h.in 884996e07cfb7681efc76661b79d56a93f9edaea7f6fc4a3c82636dc84783486
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -1403,7 +1403,7 @@ F test/ioerr4.test f130fe9e71008577b342b8874d52984bd04ede2c
F test/ioerr5.test 5984da7bf74b6540aa356f2ab0c6ae68a6d12039a3d798a9ac6a100abc17d520
F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b
F test/istrue.test e7f285bb70282625c258e866ce6337d4c762922f5a300e1b50f958aef6e7d9c9
F test/join.test c4481b70ff31b7a8ba01116d8808aa013693b7861d3d01666c4ded3756d8d1fd
F test/join.test 6ba9166c3e96ae187c0b54e0663733f9ee767c56c4acd29d00a1b53ca48676aa
F test/join2.test f59d63264fb24784ae9c3bc9d867eb569cd6d442da5660f8852effe5c1938c27
F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
@@ -2280,8 +2280,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P a435d786fe0e245e352d08d2e2ddf8c1e15154809e3b471810cc327e9d90ef85
R cec5e9f03718f8ed95fa031d3dc4d810
P 5cf4df16eb23e353834af79ba639e2e17f79d9cd11abcb325f5b7ac7f869b20d
R 10269419fb05a882fcb0653eedf13fd9
U drh
Z 48fe77c1f9aa2bbeb44542feeabc886d
Z 44e34cbc20adf87b9de376357fc2ae3b
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
5cf4df16eb23e353834af79ba639e2e17f79d9cd11abcb325f5b7ac7f869b20d
d232720b7932c1cebe4cf5b1a1e9096889e1807844351390149dfeb2ea7fc304

View File

@@ -6384,6 +6384,7 @@ static int selectExpander(Walker *pWalker, Select *p){
pRight = sqlite3Expr(db, TK_ID, zName);
if( (pTabList->nSrc>1
&& ( (pFrom->fg.jointype & JT_LTORJ)==0
|| zTName!=0
|| (selFlags & SF_NestedFrom)!=0
|| !inAnyUsingClause(zName,pFrom,pTabList->nSrc-i-1)
)

View File

@@ -1440,5 +1440,23 @@ do_catchsql_test join-35.1 {
CREATE TABLE a(x); INSERT INTO a VALUES(1); SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT (SELECT 1 FROM a AS ia1 RIGHT JOIN a AS ib1 ON 1) FROM a AS ia2 RIGHT JOIN a AS ib2 ON 1) FROM a AS ia3 RIGHT JOIN a AS ib3 ON 1) FROM a AS ia4 RIGHT JOIN a AS ib4 ON 1) FROM a AS ia5 RIGHT JOIN a AS ib5 ON 1) FROM a AS ia6 RIGHT JOIN a AS ib6 ON 1) FROM a AS ia7 RIGHT JOIN a AS ib7 ON 1) FROM a AS ia8 RIGHT JOIN a AS ib8 ON 1) FROM a AS ia9 RIGHT JOIN a AS ib9 ON 1) FROM a AS ia10 RIGHT JOIN a AS ib10 ON 1) FROM a AS ia11 RIGHT JOIN a AS ib11 ON 1) FROM a AS ia12 RIGHT JOIN a AS ib12 ON 1) FROM a AS ia13 RIGHT JOIN a AS ib13 ON 1) FROM a AS ia14 RIGHT JOIN a AS ib14 ON 1) FROM a AS ia15 RIGHT JOIN a AS ib15 ON 1) FROM a AS ia16 RIGHT JOIN a AS ib16 ON 1) FROM a AS ia17 RIGHT JOIN a AS ib17 ON 1) FROM a AS ia18 RIGHT JOIN a AS ib18 ON 1) FROM a AS ia19 RIGHT JOIN a AS ib19 ON 1) FROM a AS ia20 RIGHT JOIN a AS ib20 ON 1) FROM a AS ia21 RIGHT JOIN a AS ib21 ON 1) FROM a AS ia22 RIGHT JOIN a AS ib22 ON 1) FROM a AS ia23 RIGHT JOIN a AS ib23 ON 1) FROM a AS ia24 RIGHT JOIN a AS ib24 ON 1) FROM a AS ia25 RIGHT JOIN a AS ib25 ON 1) FROM a AS ia26 RIGHT JOIN a AS ib26 ON 1) FROM a AS ia27 RIGHT JOIN a AS ib27 ON 1) FROM a AS ia28 RIGHT JOIN a AS ib28 ON 1) FROM a AS ia29 RIGHT JOIN a AS ib29 ON 1) FROM a AS ia30 RIGHT JOIN a AS ib30 ON 1) FROM a AS ia31 RIGHT JOIN a AS ib31 ON 1) FROM a AS ia32 RIGHT JOIN a AS ib32 ON 1) FROM a AS ia33 RIGHT JOIN a AS ib33 ON 1) FROM a AS ia34 RIGHT JOIN a AS ib34 ON 1) FROM a AS ia35 RIGHT JOIN a AS ib35 ON 1) FROM a AS ia36 RIGHT JOIN a AS ib36 ON 1) FROM a AS ia37 RIGHT JOIN a AS ib37 ON 1) FROM a AS o0 RIGHT JOIN a AS o1 ON 1 RIGHT JOIN a AS o2 ON 1 RIGHT JOIN a AS o3 ON 1 RIGHT JOIN a AS o4 ON 1 RIGHT JOIN a AS o5 ON 1 RIGHT JOIN a AS o6 ON 1 RIGHT JOIN a AS o7 ON 1 RIGHT JOIN a AS o8 ON 1 RIGHT JOIN a AS o9 ON 1 RIGHT JOIN a AS o10 ON 1 RIGHT JOIN a AS o11 ON 1 RIGHT JOIN a AS o12 ON 1 RIGHT JOIN a AS o13 ON 1 RIGHT JOIN a AS o14 ON 1 RIGHT JOIN a AS o15 ON 1 RIGHT JOIN a AS o16 ON 1 RIGHT JOIN a AS o17 ON 1 RIGHT JOIN a AS o18 ON 1 RIGHT JOIN a AS o19 ON 1 RIGHT JOIN a AS o20 ON 1 RIGHT JOIN a AS o21 ON 1 RIGHT JOIN a AS o22 ON 1 RIGHT JOIN a AS o23 ON 1 RIGHT JOIN a AS o24 ON 1 RIGHT JOIN a AS o25 ON 1 RIGHT JOIN a AS o26 ON 1 RIGHT JOIN a AS o27 ON 1 RIGHT JOIN a AS o28 ON 1 RIGHT JOIN a AS o29 ON 1 RIGHT JOIN a AS o30 ON 1 RIGHT JOIN a AS o31 ON 1 RIGHT JOIN a AS o32 ON 1 RIGHT JOIN a AS o33 ON 1 RIGHT JOIN a AS o34 ON 1 RIGHT JOIN a AS o35 ON 1 RIGHT JOIN a AS o36 ON 1 RIGHT JOIN a AS o37 ON 1 RIGHT JOIN a AS o38 ON 1 RIGHT JOIN a AS o39 ON 1 RIGHT JOIN a AS o40 ON 1 RIGHT JOIN a AS o41 ON 1 RIGHT JOIN a AS o42 ON 1 RIGHT JOIN a AS o43 ON 1 RIGHT JOIN a AS o44 ON 1 RIGHT JOIN a AS o45 ON 1 RIGHT JOIN a AS o46 ON 1 RIGHT JOIN a AS o47 ON 1 RIGHT JOIN a AS o48 ON 1 RIGHT JOIN a AS o49 ON 1 RIGHT JOIN a AS o50 ON 1 RIGHT JOIN a AS o51 ON 1 RIGHT JOIN a AS o52 ON 1 RIGHT JOIN a AS o53 ON 1 RIGHT JOIN a AS o54 ON 1 RIGHT JOIN a AS o55 ON 1 RIGHT JOIN a AS o56 ON 1 RIGHT JOIN a AS o57 ON 1 RIGHT JOIN a AS o58 ON 1 RIGHT JOIN a AS o59 ON 1 RIGHT JOIN a AS o60 ON 1 RIGHT JOIN a AS o61 ON 1 RIGHT JOIN a AS o62 ON 1 RIGHT JOIN a AS o63 ON 1;
} {1 {too many RIGHT JOINs}}
# Bug 2026-10-07T02:56:24Z
#
# Correct expansion of TABLE.* when TABLE is the left operand of a RIGHT JOIN
# with a USING clause.
#
do_execsql_test join-36.1 {
CREATE TABLE t1(a INT,b INT,c INT);
INSERT INTO t1 VALUES(1,2,3);
CREATE TABLE t2(a INT,b INT,z INT);
INSERT INTO t2 VALUES(40,50,90);
}
db null NULL
do_execsql_test join-36.2 {
SELECT a,b,c,z,t1.*,t2.*,* FROM t1 RIGHT JOIN t2 USING(a,b);
} {40 50 NULL 90 NULL NULL NULL 40 50 90 40 50 NULL 90}
do_execsql_test join-36.3 {
SELECT a,b,c,z,t1.*,t2.*,* FROM t2 LEFT JOIN t1 USING(a,b);
} {40 50 NULL 90 NULL NULL NULL 40 50 90 40 50 90 NULL}
finish_test