@@ -69,7 +69,7 @@ extern LPWSTR sqlite3_win32_utf8_to_unicode(const char*);
6969/*** Begin of #include "sqlite3patched.c" ***/
7070/******************************************************************************
7171** This file is an amalgamation of many separate C source files from SQLite
72- ** version 3.35.3 . By combining all the individual C code files into this
72+ ** version 3.35.4 . By combining all the individual C code files into this
7373** single large file, the entire code can be compiled as a single translation
7474** unit. This allows many compilers to do optimizations that would not be
7575** possible if the files were compiled separately. Performance improvements
@@ -1255,9 +1255,9 @@ extern "C" {
12551255** [sqlite3_libversion_number()], [sqlite3_sourceid()],
12561256** [sqlite_version()] and [sqlite_source_id()].
12571257*/
1258- #define SQLITE_VERSION "3.35.3 "
1259- #define SQLITE_VERSION_NUMBER 3035003
1260- #define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a "
1258+ #define SQLITE_VERSION "3.35.4 "
1259+ #define SQLITE_VERSION_NUMBER 3035004
1260+ #define SQLITE_SOURCE_ID "2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e "
12611261
12621262/*
12631263** CAPI3REF: Run-Time Library Version Numbers
@@ -19838,6 +19838,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int);
1983819838SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,Expr*,FuncDef*);
1983919839SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32);
1984019840SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
19841+ SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse*, Expr*);
1984119842SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*);
1984219843SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
1984319844SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*);
@@ -99076,15 +99077,19 @@ static int lookupName(
9907699077 if( pParse->pTriggerTab!=0 ){
9907799078 int op = pParse->eTriggerOp;
9907899079 assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT );
99079- if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){
99080+ if( pParse->bReturning ){
99081+ if( (pNC->ncFlags & NC_UBaseReg)!=0
99082+ && (zTab==0 || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0)
99083+ ){
99084+ pExpr->iTable = op!=TK_DELETE;
99085+ pTab = pParse->pTriggerTab;
99086+ }
99087+ }else if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){
9908099088 pExpr->iTable = 1;
9908199089 pTab = pParse->pTriggerTab;
9908299090 }else if( op!=TK_INSERT && zTab && sqlite3StrICmp("old",zTab)==0 ){
9908399091 pExpr->iTable = 0;
9908499092 pTab = pParse->pTriggerTab;
99085- }else if( pParse->bReturning && (pNC->ncFlags & NC_UBaseReg)!=0 ){
99086- pExpr->iTable = op!=TK_DELETE;
99087- pTab = pParse->pTriggerTab;
9908899093 }
9908999094 }
9909099095#endif /* SQLITE_OMIT_TRIGGER */
@@ -101679,8 +101684,8 @@ SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){
101679101684 }else if( (ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight))
101680101685 && !IN_RENAME_OBJECT
101681101686 ){
101682- sqlite3ExprDelete(db , pLeft);
101683- sqlite3ExprDelete(db , pRight);
101687+ sqlite3ExprDeferredDelete(pParse , pLeft);
101688+ sqlite3ExprDeferredDelete(pParse , pRight);
101684101689 return sqlite3Expr(db, TK_INTEGER, "0");
101685101690 }else{
101686101691 return sqlite3PExpr(pParse, TK_AND, pLeft, pRight);
@@ -101877,6 +101882,22 @@ SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
101877101882 if( p ) sqlite3ExprDeleteNN(db, p);
101878101883}
101879101884
101885+
101886+ /*
101887+ ** Arrange to cause pExpr to be deleted when the pParse is deleted.
101888+ ** This is similar to sqlite3ExprDelete() except that the delete is
101889+ ** deferred untilthe pParse is deleted.
101890+ **
101891+ ** The pExpr might be deleted immediately on an OOM error.
101892+ **
101893+ ** The deferred delete is (currently) implemented by adding the
101894+ ** pExpr to the pParse->pConstExpr list with a register number of 0.
101895+ */
101896+ SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
101897+ pParse->pConstExpr =
101898+ sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr);
101899+ }
101900+
101880101901/* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the
101881101902** expression.
101882101903*/
@@ -106502,8 +106523,7 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
106502106523 pExpr = sqlite3ExprDup(db, pExpr, 0);
106503106524 if( pExpr ){
106504106525 pAggInfo->aCol[iAgg].pCExpr = pExpr;
106505- pParse->pConstExpr =
106506- sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr);
106526+ sqlite3ExprDeferredDelete(pParse, pExpr);
106507106527 }
106508106528 }
106509106529 }else{
@@ -106512,8 +106532,7 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
106512106532 pExpr = sqlite3ExprDup(db, pExpr, 0);
106513106533 if( pExpr ){
106514106534 pAggInfo->aFunc[iAgg].pFExpr = pExpr;
106515- pParse->pConstExpr =
106516- sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr);
106535+ sqlite3ExprDeferredDelete(pParse, pExpr);
106517106536 }
106518106537 }
106519106538 }
@@ -139394,6 +139413,25 @@ SQLITE_PRIVATE SrcList *sqlite3TriggerStepSrc(
139394139413 return pSrc;
139395139414}
139396139415
139416+ /*
139417+ ** Return true if the pExpr term from the RETURNING clause argument
139418+ ** list is of the form "*". Raise an error if the terms if of the
139419+ ** form "table.*".
139420+ */
139421+ static int isAsteriskTerm(
139422+ Parse *pParse, /* Parsing context */
139423+ Expr *pTerm /* A term in the RETURNING clause */
139424+ ){
139425+ assert( pTerm!=0 );
139426+ if( pTerm->op==TK_ASTERISK ) return 1;
139427+ if( pTerm->op!=TK_DOT ) return 0;
139428+ assert( pTerm->pRight!=0 );
139429+ assert( pTerm->pLeft!=0 );
139430+ if( pTerm->pRight->op!=TK_ASTERISK ) return 0;
139431+ sqlite3ErrorMsg(pParse, "RETURNING may not use \"TABLE.*\" wildcards");
139432+ return 1;
139433+ }
139434+
139397139435/* The input list pList is the list of result set terms from a RETURNING
139398139436** clause. The table that we are returning from is pTab.
139399139437**
@@ -139411,7 +139449,8 @@ static ExprList *sqlite3ExpandReturning(
139411139449
139412139450 for(i=0; i<pList->nExpr; i++){
139413139451 Expr *pOldExpr = pList->a[i].pExpr;
139414- if( ALWAYS(pOldExpr!=0) && pOldExpr->op==TK_ASTERISK ){
139452+ if( NEVER(pOldExpr==0) ) continue;
139453+ if( isAsteriskTerm(pParse, pOldExpr) ){
139415139454 int jj;
139416139455 for(jj=0; jj<pTab->nCol; jj++){
139417139456 Expr *pNewExpr;
@@ -147649,6 +147688,7 @@ static void exprAnalyzeExists(
147649147688#endif
147650147689 if( pSel->pPrior ) return;
147651147690 if( pSel->pWhere==0 ) return;
147691+ if( pSel->pLimit ) return;
147652147692 if( 0==exprAnalyzeExistsFindEq(pSel, 0, 0) ) return;
147653147693
147654147694 pDup = sqlite3ExprDup(db, pExpr, 0);
@@ -155433,6 +155473,7 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){
155433155473 VdbeCoverageIf(v, eCond==2);
155434155474 }
155435155475 sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg);
155476+ sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC);
155436155477 VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */
155437155478 VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */
155438155479 VdbeCoverageNeverNullIf(v, eCond==2);
@@ -229337,7 +229378,7 @@ static void fts5SourceIdFunc(
229337229378){
229338229379 assert( nArg==0 );
229339229380 UNUSED_PARAM2(nArg, apUnused);
229340- sqlite3_result_text(pCtx, "fts5: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a ", -1, SQLITE_TRANSIENT);
229381+ sqlite3_result_text(pCtx, "fts5: 2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e ", -1, SQLITE_TRANSIENT);
229341229382}
229342229383
229343229384/*
@@ -234263,9 +234304,9 @@ SQLITE_API int sqlite3_stmt_init(
234263234304#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
234264234305
234265234306/************** End of stmt.c ************************************************/
234266- #if __LINE__!=234182
234307+ #if __LINE__!=234223
234267234308#undef SQLITE_SOURCE_ID
234268- #define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40alt2 "
234309+ #define SQLITE_SOURCE_ID "2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212dalt2 "
234269234310#endif
234270234311/* Return the source-id for this library */
234271234312SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
@@ -234417,9 +234458,9 @@ extern "C" {
234417234458** [sqlite3_libversion_number()], [sqlite3_sourceid()],
234418234459** [sqlite_version()] and [sqlite_source_id()].
234419234460*/
234420- #define SQLITE_VERSION "3.35.3 "
234421- #define SQLITE_VERSION_NUMBER 3035003
234422- #define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a "
234461+ #define SQLITE_VERSION "3.35.4 "
234462+ #define SQLITE_VERSION_NUMBER 3035004
234463+ #define SQLITE_SOURCE_ID "2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e "
234423234464
234424234465/*
234425234466** CAPI3REF: Run-Time Library Version Numbers
@@ -246869,9 +246910,9 @@ SQLITE_API void sqlite3mc_vfs_shutdown();
246869246910
246870246911#define SQLITE3MC_VERSION_MAJOR 1
246871246912#define SQLITE3MC_VERSION_MINOR 2
246872- #define SQLITE3MC_VERSION_RELEASE 3
246913+ #define SQLITE3MC_VERSION_RELEASE 4
246873246914#define SQLITE3MC_VERSION_SUBRELEASE 0
246874- #define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 1.2.3 "
246915+ #define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 1.2.4 "
246875246916
246876246917#endif /* SQLITE3MC_VERSION_H_ */
246877246918/*** End of #include "sqlite3mc_version.h" ***/
0 commit comments