From: drh <> Date: Sat, 16 May 2026 20:21:55 +0000 (+0000) Subject: When two tables are joined by USING, the affinity and collating sequence of X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=0e30396fe2222fe053c327cd82c39a2b7865b777;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: cbb6f72c10b1224088b9d604a0e014e7020e8d79a317ebb4af420ba3b72f40cc --- diff --git a/manifest b/manifest index 79c04c9634..38c57ff5c4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\stwo\stables\sare\sjoined\sby\sUSING,\sthe\saffinity\sof\sthe\sjoin\scolumn\scan\nbe\sthe\saffinity\sof\sthe\scorresponding\scolumn\sin\seither\stable.\s\sBut\sit\smust\nbe\sone\sor\sthe\sother. -D 2026-05-16T19:40:55.080 +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:21:55.055 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -734,7 +734,7 @@ F src/pragma.c 789ef67117b74b5be0a2db6681f7f0c55e6913791b9da309aefd280de2c8a74d F src/prepare.c 084a037fd3810cb7ffbfc001cd58c0ffac68ba36598a5084b55ea2a090014ebd F src/printf.c 7085e8504f519cf6cb23a84572f785b259769907fef94bbf90ef0a5a533ab89f F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c -F src/resolve.c 3383354aa86f2bfcc867da24efb0e3865cad436bded234c25a5e25183c45cb76 +F src/resolve.c 11134922dfc2c89d10c658a1ae9ae9e1af0df031d40b9e9171dc14d3f2e6d80f F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 4c05cde130f26991b7411d8c6809e0630625e18078742c963a047b4b9cc01d49 F src/shell.c.in 9827c3a059dc5ffe17770e7f80d92988462f80a35486b84197cb4372dd9fd8c6 @@ -1348,7 +1348,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 dd429893102187e8df0bb30ad1e9f85732158055d96eee8a12587988417d3fe4 +F test/joinI.test f5e8613c3262f056c56249cc98255bf5fa1a764d7667b8ceb9fe08b4c965f061 F test/journal1.test bc61a4228db11bffca118bd358ba4b868524bf080f3532749de6c539656e20fa F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4 F test/journal3.test e5aeff93a7776cf644dbc48dec277655cff80a1cd24689036abc87869b120ea6 @@ -2205,8 +2205,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 9be94e961457967408cbd0acf11877fbb323a48eee405fff53755770f1b3261a -R f4a5ff99991f6d9cbeccb11fa4c77652 +P 8cc0b52cca2d6b155b4b169e6f9de9e7d2dc61c40f89920c2b6bf86e549ab6f7 +R 6d896738349278127a88d5cdadd5a083 U drh -Z 1ea79e268f102209d2e3b093c77b1a9e +Z 9ae5d8d40405d35095570ad39497e5b8 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 64152e3260..43a1447d90 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8cc0b52cca2d6b155b4b169e6f9de9e7d2dc61c40f89920c2b6bf86e549ab6f7 +cbb6f72c10b1224088b9d604a0e014e7020e8d79a317ebb4af420ba3b72f40cc diff --git a/src/resolve.c b/src/resolve.c index dce1744fa0..64b20f6b70 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -774,7 +774,7 @@ static int lookupName( pExpr->op = TK_FUNCTION; pExpr->u.zToken = "coalesce"; pExpr->x.pList = pFJMatch; - pExpr->affExpr = sqlite3ExprAffinity(pFJMatch->a[0].pExpr); + pExpr->affExpr = SQLITE_AFF_DEFER; cnt = 1; goto lookupname_end; }else{ diff --git a/test/joinI.test b/test/joinI.test index 8a5572caaa..b677320454 100644 --- a/test/joinI.test +++ b/test/joinI.test @@ -218,8 +218,34 @@ reset_db do_execsql_test 8.0 { CREATE TABLE t1(x REAL); CREATE TABLE t2(x REAL); - INSERT INTO t1 VALUES(1.0); - SELECT count(*) FROM t1 FULL JOIN t2 USING(x) WHERE x='1'; -} 1 + 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