From: drh <> Date: Sat, 16 May 2026 20:29:03 +0000 (+0000) Subject: When two tables are joined by USING, the affinity and collating sequence of X-Git-Tag: release~54 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=3580d166e526ffb8adeb14cf6c752c0803b44c41;p=thirdparty%2Fsqlite.git When two tables are joined by USING, the affinity and collating sequence of the join column will be the same as one or the other of the columns in the two tables (which are hopefully the same). FossilOrigin-Name: 8096d548eb035afc94653303000cff2f63a4c996c1dd9bf6114c4299376088fc --- diff --git a/manifest b/manifest index 6426483100..c074548849 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sfalse-negatives\sin\sthe\ssqlite3ExprCanReturnSubtype()\sroutine\shaving\nto\sdo\swith\sCASE,\sCAST,\sand\sCOLLATE\sexpressions\sand\sthe\s"+"\sno-op\soperator. -D 2026-05-16T17:34:27.395 +C When\stwo\stables\sare\sjoined\sby\sUSING,\sthe\saffinity\sand\scollating\ssequence\sof\nthe\sjoin\scolumn\swill\sbe\sthe\ssame\sas\sone\sor\sthe\sother\sof\sthe\scolumns\sin\sthe\ntwo\stables\s(which\sare\shopefully\sthe\ssame). +D 2026-05-16T20:29:03.194 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -733,7 +733,7 @@ F src/pragma.c 789ef67117b74b5be0a2db6681f7f0c55e6913791b9da309aefd280de2c8a74d F src/prepare.c f6a6e28a281bd1d1da12f47d370a81af46159b40f73bf7fa0b276b664f9c8b7d F src/printf.c 50be92de0725e88c8b38978775ab46f9b42d74e21f65045c3423503173eb0566 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c -F src/resolve.c 928ff887f2a7c64275182060d94d06fdddbe32226c569781cf7e7edc6f58d7fd +F src/resolve.c 8885c42e0b107c980b29ce255caa9b7546f516dc7aacd4bad6b95e1ceeccc7f9 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 4c05cde130f26991b7411d8c6809e0630625e18078742c963a047b4b9cc01d49 F src/shell.c.in cbb7ae029cea6d8789924d9009574081b4f3c0619ce736ed36e8c7564ef13547 @@ -1344,7 +1344,7 @@ F test/joinD.test 2ce62e7353a0702ca5e70008faf319c1d4686aa19fba34275c6d1da0e960be F test/joinE.test d5d182f3812771e2c0d97c9dcf5dbe4c41c8e21c82560e59358731c4a3981d6b F test/joinF.test 53dd66158806823ea680dd7543b5406af151b5aafa5cd06a7f3231cd94938127 F test/joinH.test 1d2fc3190be68525fd9ce749b9468c40ba2930181e52fb5ee6f836051b38effb -F test/joinI.test a4d37143fcc39e915d9feb08e614a13f88dfe332d77152a3c526a2370ddb9a70 +F test/joinI.test f5e8613c3262f056c56249cc98255bf5fa1a764d7667b8ceb9fe08b4c965f061 F test/journal1.test bc61a4228db11bffca118bd358ba4b868524bf080f3532749de6c539656e20fa F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4 F test/journal3.test e5aeff93a7776cf644dbc48dec277655cff80a1cd24689036abc87869b120ea6 @@ -2198,9 +2198,9 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P eb95d18aee8ffb9a2550aadbecccaf43c0a5778973386da1196a46f645e04286 -Q +9be94e961457967408cbd0acf11877fbb323a48eee405fff53755770f1b3261a -R 1bab9ea2a478de0f624ff411c52250a0 +P 8eb07e92cfecb6f369206f71b42edad81d7eced0ca5576a13fd754eb7db16e55 +Q +cbb6f72c10b1224088b9d604a0e014e7020e8d79a317ebb4af420ba3b72f40cc +R 61de6f56c92de553c014cb6032368cab U drh -Z b94d6c283fc57f04f9072cbb5f1c960c +Z a2a000b906eafd0fecbb7980a0c64fc0 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index be50fc41fc..4025fdb993 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8eb07e92cfecb6f369206f71b42edad81d7eced0ca5576a13fd754eb7db16e55 +8096d548eb035afc94653303000cff2f63a4c996c1dd9bf6114c4299376088fc diff --git a/src/resolve.c b/src/resolve.c index 5b6d6c9c5a..d9c745421e 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -774,6 +774,7 @@ static int lookupName( pExpr->op = TK_FUNCTION; pExpr->u.zToken = "coalesce"; pExpr->x.pList = pFJMatch; + pExpr->affExpr = SQLITE_AFF_DEFER; cnt = 1; goto lookupname_end; }else{ diff --git a/test/joinI.test b/test/joinI.test index d0194579d8..b677320454 100644 --- a/test/joinI.test +++ b/test/joinI.test @@ -211,5 +211,41 @@ do_execsql_test 7.3 { ); } {1} -finish_test +#-------------------------------------------------------------------------- +# Forum post 2026-05-15T11:23:01Z +# +reset_db +do_execsql_test 8.0 { + CREATE TABLE t1(x REAL); + CREATE TABLE t2(x REAL); + INSERT INTO t1 VALUES(2.5); + INSERT INTO t2 VALUES(2.5); + SELECT x FROM t1 JOIN t2 USING(x) WHERE x='2.5'; +} 2.5 +do_execsql_test 8.1 { + SELECT x FROM t1 LEFT JOIN t2 USING(x) WHERE x='2.5'; +} 2.5 +do_execsql_test 8.2 { + SELECT x FROM t1 RIGHT JOIN t2 USING(x) WHERE x='2.5'; +} 2.5 +do_execsql_test 8.3 { + SELECT x FROM t1 FULL JOIN t2 USING(x) WHERE x='2.5'; +} 2.5 +do_execsql_test 8.10 { + CREATE TABLE t3(x TEXT COLLATE nocase); + CREATE TABLE t4(x TEXT COLLATE nocase); + INSERT INTO t3 VALUES('abc'); + INSERT INTO t4 VALUES('ABC'); + SELECT lower(x) FROM t3 JOIN t4 USING(x) WHERE x='Abc'; +} abc +do_execsql_test 8.11 { + SELECT lower(x) FROM t3 LEFT JOIN t4 USING(x) WHERE x='Abc'; +} abc +do_execsql_test 8.12 { + SELECT lower(x) FROM t3 RIGHT JOIN t4 USING(x) WHERE x='Abc'; +} abc +do_execsql_test 8.13 { + SELECT lower(x) FROM t3 FULL JOIN t4 USING(x) WHERE x='Abc'; +} abc +finish_test