-C Additional\sSELECT\strace\slogic:\s\sShow\sthe\stree\safter\sresult-set\swildcard\nexpansion\sbut\sbefore\sname\sresolution.
-D 2022-04-16T18:33:22.370
+C Since\sthe\squery\splanner\sis\sunable\sto\scope\swith\sa\sLEFT\sJOIN\son\sthe\sleft-hand\sside\nof\sa\sRIGHT\sJOIN,\sdetect\sthat\ssituation\searly\sand\sraise\sa\sparsing\serror.\nThis\sis\sa\stemporary\smeasure\sthat\sneeds\sto\sbe\sfixed.
+D 2022-04-16T19:13:16.788
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F src/btree.c 093c940ddf1d0753542d04e37eb9903cbc126e997815d234dd2b6317e812b192
F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22
F src/btreeInt.h 8ce1332edd89dfd2461d561ac10a0ab5601c8e06200cb5230596c3caaf54482e
-F src/build.c ecbe7ecacf653408c4bf7bb40097ee846614c2336deac62cd30e207b9a42a784
+F src/build.c fad98f43a755f48ccdd0ba31d91f5a829cddd344dd3babaad0646bd23c2fcdc6
F src/callback.c 4c19af69835787bfe790ac560f3071a824eb629f34e41f97b52ce5235c77de1c
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/ctime.c 026dbdcdbd8c3cde98a88483ee88310ff43150ab164ad768f12cc700a11495ad
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
F src/pager.c 42120492784fc9bcd9082b5c9b5e329b7318c357f9f3574a1bbfcf7418910356
F src/pager.h f82e9844166e1585f5786837ddc7709966138ced17f568c16af7ccf946c2baa3
-F src/parse.y 9130a936927658e7c574e97e5d4f0a747a3f6b9a42bc5c63e455c8e40cc74216
+F src/parse.y e221a1159c5e73730b4d3d87fe4b5ad4b10ea2237ff59804e6402495a04a26c7
F src/pcache.c 084e638432c610f95aea72b8509f0845d2791293f39d1b82f0c0a7e089c3bb6b
F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
F src/pcache1.c 54881292a9a5db202b2c0ac541c5e3ef9a5e8c4f1c1383adb2601d5499a60e65
F src/sqlite.h.in 2a35f62185eb5e7ecc64a2f68442b538ce9be74f80f28a00abc24837edcf1c17
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h f49e28c25bd941e79794db5415fdf7b202deb3bc072ed6f1ed273d578703684e
-F src/sqliteInt.h 51b79f1db169deb87fc8ac2f1c11e2c4fcf9893737072ce56dd45e6e7917d61b
+F src/sqliteInt.h afec51781b0ff21126c4cbd812be873f801810fef7ecee6c11e56ab85c6fe577
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
F src/status.c 4a3da6d77eeb3531cb0dbdf7047772a2a1b99f98c69e90ce009c75fe6328b2c0
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 4c3ce6475a67b1e207a5b63d9e2d38ee5bc45c899ad00ee327f292bf59039b9c
-R c8fd0258e87ea644726dd2408171a53e
+P a7babf75418adffa27dec7a9d382a60e1b9364fb51d72b0a10e2769b308b3c54
+R 45449a4d7735a1a3898975e3feb2590b
U drh
-Z 10f070fbe0626760b7aa50e27688efaa
+Z 24f79365e5bd75e3605e6ecd98fb146e
# Remove this line to create a well-formed Fossil manifest.
** code generator can easily tell that the table is part of
** the left operand of at least one RIGHT JOIN.
*/
-void sqlite3SrcListShiftJoinType(SrcList *p){
+void sqlite3SrcListShiftJoinType(Parse *pParse, SrcList *p){
if( p && p->nSrc>1 ){
int i = p->nSrc-1;
u8 allFlags = 0;
i--;
assert( i>=0 );
do{
- p->a[i--].fg.jointype |= JT_LTORJ;
- }while( i>=0 );
+ if( p->a[i].fg.jointype & JT_LEFT ){
+ sqlite3ErrorMsg(pParse, "unable to compute a LEFT or FULL JOIN"
+ " that is a left operand of a RIGHT or FULL JOIN");
+ }
+ p->a[i].fg.jointype |= JT_LTORJ;
+ }while( (--i)>=0 );
}
}
}
from(A) ::= . {A = 0;}
from(A) ::= FROM seltablist(X). {
A = X;
- sqlite3SrcListShiftJoinType(A);
+ sqlite3SrcListShiftJoinType(pParse,A);
}
// "seltablist" is a "Select Table List" - the content of the FROM clause
sqlite3SrcListDelete(pParse->db, F);
}else{
Select *pSubquery;
- sqlite3SrcListShiftJoinType(F);
+ sqlite3SrcListShiftJoinType(pParse,F);
pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,&N);
}
void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *);
void sqlite3SrcListFuncArgs(Parse*, SrcList*, ExprList*);
int sqlite3IndexedByLookup(Parse *, SrcItem *);
-void sqlite3SrcListShiftJoinType(SrcList*);
+void sqlite3SrcListShiftJoinType(Parse*,SrcList*);
void sqlite3SrcListAssignCursors(Parse*, SrcList*);
void sqlite3IdListDelete(sqlite3*, IdList*);
void sqlite3ClearOnOrUsing(sqlite3*, OnOrUsing*);