-C An\sexperimental\sminor\stweak\sto\sthe\sway\saffinities\sare\scomputed\sfor\scompound\nsubqueries,\swhen\sthe\sactual\saffinity\sis\sambiguous.
-D 2024-04-24T19:49:52.341
+C Back\sout\sthe\sprevious\schange\son\sthis\sbranch.\s\sIn\sits\splace:\s\sDetermine\sthe\naffinity\sof\sa\ssubquery\sby\sthe\sleft-most\sarm\sof\sthe\ssubquery\sthat\shas\san\naffinity\sother\sthan\sNONE.\s\sIn\sother\swords,\sscan\sfrom\sleft\sto\sright\slooking\nfor\san\sarm\sof\sthe\scompound\ssubquery\swith\san\saffinity\sof\sBLOB,\sTEXT,\sINTEGER,\nor\sREAL\sand\spick\sthe\sfirst\sone\sfound.\s\sOr\sstay\swith\sNONE\sif\sno\sarm\shas\sa\ndefined\saffinity.\s\sTest\scases\sadded.
+D 2024-04-25T16:55:53.038
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 647edf93729ba124c0a6048982af56c2fa4f841e69d626e4f3caa620f082bb15
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c 39c5dc8b2fca3b1e52db1a9b469507bfc312d3e3a4bf10c58a7a716626c4bdff
+F src/select.c f0f8f7fd601aff50c303205c6ac6da789d02a6e420ccb25d9aaaeccc7fa314d7
F src/shell.c.in 0354ca51eee5fbf6af394a7ef9f5ef6823ef45b743db65431f6777e4d5be2199
F src/sqlite.h.in 32389e0d584551b300d0157881336162c14315a424cbf385c0d65eb7c2e31f7b
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F test/valuesfault.test 2ef23ed965e3bd08e268cdc38a0d11653390ddbbe1e8e2e98d16f55edd30f6e8
F test/varint.test bbce22cda8fc4d135bcc2b589574be8410614e62
F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661
-F test/view.test 9df7e00eb1f96a9d738a317137989a594541ce7b9ebea0506e39f89de0c1319a
+F test/view.test 3c23d7a068e9e4a0c4e6907498042772adea725f0630c3d9638ffd4e5a08b92b
F test/view2.test db32c8138b5b556f610b35dfddd38c5a58a292f07fda5281eedb0851b2672679
F test/view3.test ad8a8290ee2b55ff6ce66c9ef1ce3f1e47926273a3814e1c425293e128a95456
F test/vt02.c 5b44ac67b1a283fedecf2d6e2ceda61e7a157f01d44dcb4490dcb1e87d057060
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 9ea6bcc8fdf6aadb756ec5bcaaa7af314167f8973bdd32fd23f83bd964f0c21e
-R 069cab252330979e2eef5b88f83953a3
-T *branch * compound-subquery-affinity
-T *sym-compound-subquery-affinity *
-T -sym-trunk *
+P 779723ad792ca24dd07b7a1425303c76b44bb173e718a33c26c9f7644e9912cb
+R 365eec55f15f0f323e41980c307a2a9e
U drh
-Z 7c2ae6bcf3d76ce120ccc503dbc0842f
+Z 924642415660e94bafdaa96d702ef424
# Remove this line to create a well-formed Fossil manifest.
-779723ad792ca24dd07b7a1425303c76b44bb173e718a33c26c9f7644e9912cb
\ No newline at end of file
+b8ec8511b1968bbc1472b3e2e21f0fef1d5becebeb31f9d13ee3ca9e13abb1e5
\ No newline at end of file
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
const char *zType;
i64 n;
+ Select *pS2 = pSelect;
pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT);
p = a[i].pExpr;
/* pCol->szEst = ... // Column size est for SELECT tables never used */
pCol->affinity = sqlite3ExprAffinity(p);
+ while( pCol->affinity<=SQLITE_AFF_NONE && pS2->pNext!=0 ){
+ pS2 = pS2->pNext;
+ pCol->affinity = sqlite3ExprAffinity(pS2->pEList->a[i].pExpr);
+ }
if( pCol->affinity<=SQLITE_AFF_NONE ){
pCol->affinity = aff;
}
- if( pCol->affinity>=SQLITE_AFF_TEXT && pSelect->pNext ){
+ if( pCol->affinity>=SQLITE_AFF_TEXT && pS2->pNext ){
int m = 0;
- Select *pS2;
- for(m=0, pS2=pSelect->pNext; pS2; pS2=pS2->pNext){
+ for(m=0, pS2=pS2->pNext; pS2; pS2=pS2->pNext){
m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr);
}
if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){
/* A sub-query in the FROM clause of a SELECT */
Select *pSel = pFrom->pSelect;
if( pSel ){
- sqlite3SubqueryColumnTypes(pParse, pTab, pSel, SQLITE_AFF_BLOB);
+ sqlite3SubqueryColumnTypes(pParse, pTab, pSel, SQLITE_AFF_NONE);
}
}
}
do_execsql_test view-27.6 {
SELECT c0<c1 FROM (SELECT t0.c0 AS c0, AVG(t0.c1) AS c1 FROM t0)
-} 0
+} 1
do_execsql_test view-27.7 {
SELECT c1<c0 FROM (SELECT t0.c0 AS c0, AVG(t0.c1) AS c1 FROM t0)
-} 1
+} 0
do_execsql_test view-27.8 {
SELECT 1 FROM (SELECT t0.c0 AS c0, AVG(t0.c1) AS c1 FROM t0) WHERE c1<c0
} {}
do_execsql_test view-27.9 {
SELECT 1 FROM (SELECT t0.c0 AS c0, AVG(t0.c1) AS c1 FROM t0) WHERE c0<c1
-} {}
+} {1}
#-------------------------------------------------------------------------
reset_db
} { 0 a INT 0 {} 0 1 b BLOB 0 {} 0 }
}
+#-----------------------------------------------------------------------
+# 2024-04-25 Trying to make type information on compound subqueries
+# more predictable and rational.
+#
+reset_db
+do_execsql_test view-31.1 {
+ CREATE TABLE x2(b TEXT);
+ CREATE TABLE x1(a TEXT);
+ INSERT INTO x1 VALUES('123');
+ -- Two queries get the same result even though the order of terms
+ -- in the CTE is reversed
+ WITH c(x) AS ( SELECT b FROM x2 UNION SELECT 123 )
+ SELECT count(*) FROM x1 WHERE a IN c;
+ WITH c(x) AS ( SELECT 123 UNION SELECT b FROM x2 )
+ SELECT count(*) FROM x1 WHERE a IN c;
+} {0 0}
+do_execsql_test view-31.2 {
+ CREATE TABLE t3(a INTEGER, b TEXT);
+ INSERT INTO t3 VALUES(123, 123);
+ WITH s AS ( VALUES(123), (456) ) SELECT * FROM t3 WHERE b IN s;
+} {123 123}
+
+
finish_test