Fossil SCM
Update the built-in SQLite to 3.35.4-rc1 for testing.
Commit
9313f2ad75452703ed6579553f735d45a97075f8d85487c71a345c892bea27a8
Parent
31c7bdb80b81efc…
2 files changed
+57
-18
+3
-3
+57
-18
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | /****************************************************************************** |
| 2 | 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | -** version 3.35.3. By combining all the individual C code files into this | |
| 3 | +** version 3.35.4. By combining all the individual C code files into this | |
| 4 | 4 | ** single large file, the entire code can be compiled as a single translation |
| 5 | 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | 7 | ** of 5% or more are commonly seen when SQLite is compiled as a single |
| 8 | 8 | ** translation unit. |
| @@ -1184,13 +1184,13 @@ | ||
| 1184 | 1184 | ** |
| 1185 | 1185 | ** See also: [sqlite3_libversion()], |
| 1186 | 1186 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1187 | 1187 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1188 | 1188 | */ |
| 1189 | -#define SQLITE_VERSION "3.35.3" | |
| 1190 | -#define SQLITE_VERSION_NUMBER 3035003 | |
| 1191 | -#define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a" | |
| 1189 | +#define SQLITE_VERSION "3.35.4" | |
| 1190 | +#define SQLITE_VERSION_NUMBER 3035004 | |
| 1191 | +#define SQLITE_SOURCE_ID "2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db635aa" | |
| 1192 | 1192 | |
| 1193 | 1193 | /* |
| 1194 | 1194 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1195 | 1195 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1196 | 1196 | ** |
| @@ -19762,10 +19762,11 @@ | ||
| 19762 | 19762 | SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr*); |
| 19763 | 19763 | SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); |
| 19764 | 19764 | SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,Expr*,FuncDef*); |
| 19765 | 19765 | SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); |
| 19766 | 19766 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*); |
| 19767 | +SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse*, Expr*); | |
| 19767 | 19768 | SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*); |
| 19768 | 19769 | SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); |
| 19769 | 19770 | SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); |
| 19770 | 19771 | SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList*,int,int); |
| 19771 | 19772 | SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int); |
| @@ -99000,19 +99001,21 @@ | ||
| 99000 | 99001 | pTab = 0; |
| 99001 | 99002 | #ifndef SQLITE_OMIT_TRIGGER |
| 99002 | 99003 | if( pParse->pTriggerTab!=0 ){ |
| 99003 | 99004 | int op = pParse->eTriggerOp; |
| 99004 | 99005 | assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); |
| 99005 | - if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){ | |
| 99006 | + if( pParse->bReturning && (pNC->ncFlags & NC_UBaseReg)!=0 ){ | |
| 99007 | + if( zTab==0 || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0 ){ | |
| 99008 | + pExpr->iTable = op!=TK_DELETE; | |
| 99009 | + pTab = pParse->pTriggerTab; | |
| 99010 | + } | |
| 99011 | + }else if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){ | |
| 99006 | 99012 | pExpr->iTable = 1; |
| 99007 | 99013 | pTab = pParse->pTriggerTab; |
| 99008 | 99014 | }else if( op!=TK_INSERT && zTab && sqlite3StrICmp("old",zTab)==0 ){ |
| 99009 | 99015 | pExpr->iTable = 0; |
| 99010 | 99016 | pTab = pParse->pTriggerTab; |
| 99011 | - }else if( pParse->bReturning && (pNC->ncFlags & NC_UBaseReg)!=0 ){ | |
| 99012 | - pExpr->iTable = op!=TK_DELETE; | |
| 99013 | - pTab = pParse->pTriggerTab; | |
| 99014 | 99017 | } |
| 99015 | 99018 | } |
| 99016 | 99019 | #endif /* SQLITE_OMIT_TRIGGER */ |
| 99017 | 99020 | #ifndef SQLITE_OMIT_UPSERT |
| 99018 | 99021 | if( (pNC->ncFlags & NC_UUpsert)!=0 && zTab!=0 ){ |
| @@ -101603,12 +101606,12 @@ | ||
| 101603 | 101606 | }else if( pRight==0 ){ |
| 101604 | 101607 | return pLeft; |
| 101605 | 101608 | }else if( (ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight)) |
| 101606 | 101609 | && !IN_RENAME_OBJECT |
| 101607 | 101610 | ){ |
| 101608 | - sqlite3ExprDelete(db, pLeft); | |
| 101609 | - sqlite3ExprDelete(db, pRight); | |
| 101611 | + sqlite3ExprDeferredDelete(pParse, pLeft); | |
| 101612 | + sqlite3ExprDeferredDelete(pParse, pRight); | |
| 101610 | 101613 | return sqlite3Expr(db, TK_INTEGER, "0"); |
| 101611 | 101614 | }else{ |
| 101612 | 101615 | return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); |
| 101613 | 101616 | } |
| 101614 | 101617 | } |
| @@ -101801,10 +101804,26 @@ | ||
| 101801 | 101804 | } |
| 101802 | 101805 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ |
| 101803 | 101806 | if( p ) sqlite3ExprDeleteNN(db, p); |
| 101804 | 101807 | } |
| 101805 | 101808 | |
| 101809 | + | |
| 101810 | +/* | |
| 101811 | +** Arrange to cause pExpr to be deleted when the pParse is deleted. | |
| 101812 | +** This is similar to sqlite3ExprDelete() except that the delete is | |
| 101813 | +** deferred untilthe pParse is deleted. | |
| 101814 | +** | |
| 101815 | +** The pExpr might be deleted immediately on an OOM error. | |
| 101816 | +** | |
| 101817 | +** The deferred delete is (currently) implemented by adding the | |
| 101818 | +** pExpr to the pParse->pConstExpr list with a register number of 0. | |
| 101819 | +*/ | |
| 101820 | +SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ | |
| 101821 | + pParse->pConstExpr = | |
| 101822 | + sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); | |
| 101823 | +} | |
| 101824 | + | |
| 101806 | 101825 | /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the |
| 101807 | 101826 | ** expression. |
| 101808 | 101827 | */ |
| 101809 | 101828 | SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse *pParse, Expr *p){ |
| 101810 | 101829 | if( p ){ |
| @@ -106426,22 +106445,20 @@ | ||
| 106426 | 106445 | assert( iAgg>=0 && iAgg<pAggInfo->nColumn ); |
| 106427 | 106446 | if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ |
| 106428 | 106447 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 106429 | 106448 | if( pExpr ){ |
| 106430 | 106449 | pAggInfo->aCol[iAgg].pCExpr = pExpr; |
| 106431 | - pParse->pConstExpr = | |
| 106432 | - sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); | |
| 106450 | + sqlite3ExprDeferredDelete(pParse, pExpr); | |
| 106433 | 106451 | } |
| 106434 | 106452 | } |
| 106435 | 106453 | }else{ |
| 106436 | 106454 | assert( iAgg>=0 && iAgg<pAggInfo->nFunc ); |
| 106437 | 106455 | if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ |
| 106438 | 106456 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 106439 | 106457 | if( pExpr ){ |
| 106440 | 106458 | pAggInfo->aFunc[iAgg].pFExpr = pExpr; |
| 106441 | - pParse->pConstExpr = | |
| 106442 | - sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); | |
| 106459 | + sqlite3ExprDeferredDelete(pParse, pExpr); | |
| 106443 | 106460 | } |
| 106444 | 106461 | } |
| 106445 | 106462 | } |
| 106446 | 106463 | } |
| 106447 | 106464 | return WRC_Continue; |
| @@ -139312,10 +139329,29 @@ | ||
| 139312 | 139329 | }else{ |
| 139313 | 139330 | sqlite3DbFree(db, zName); |
| 139314 | 139331 | } |
| 139315 | 139332 | return pSrc; |
| 139316 | 139333 | } |
| 139334 | + | |
| 139335 | +/* | |
| 139336 | +** Return true if the pExpr term from the RETURNING clause argument | |
| 139337 | +** list is of the form "*". Raise an error if the terms if of the | |
| 139338 | +** form "table.*". | |
| 139339 | +*/ | |
| 139340 | +static int isAsteriskTerm( | |
| 139341 | + Parse *pParse, /* Parsing context */ | |
| 139342 | + Expr *pTerm /* A term in the RETURNING clause */ | |
| 139343 | +){ | |
| 139344 | + assert( pTerm!=0 ); | |
| 139345 | + if( pTerm->op==TK_ASTERISK ) return 1; | |
| 139346 | + if( pTerm->op!=TK_DOT ) return 0; | |
| 139347 | + assert( pTerm->pRight!=0 ); | |
| 139348 | + assert( pTerm->pLeft!=0 ); | |
| 139349 | + if( pTerm->pRight->op!=TK_ASTERISK ) return 0; | |
| 139350 | + sqlite3ErrorMsg(pParse, "RETURNING may not use \"TABLE.*\" wildcards"); | |
| 139351 | + return 1; | |
| 139352 | +} | |
| 139317 | 139353 | |
| 139318 | 139354 | /* The input list pList is the list of result set terms from a RETURNING |
| 139319 | 139355 | ** clause. The table that we are returning from is pTab. |
| 139320 | 139356 | ** |
| 139321 | 139357 | ** This routine makes a copy of the pList, and at the same time expands |
| @@ -139330,11 +139366,12 @@ | ||
| 139330 | 139366 | sqlite3 *db = pParse->db; |
| 139331 | 139367 | int i; |
| 139332 | 139368 | |
| 139333 | 139369 | for(i=0; i<pList->nExpr; i++){ |
| 139334 | 139370 | Expr *pOldExpr = pList->a[i].pExpr; |
| 139335 | - if( ALWAYS(pOldExpr!=0) && pOldExpr->op==TK_ASTERISK ){ | |
| 139371 | + if( NEVER(pOldExpr==0) ) continue; | |
| 139372 | + if( isAsteriskTerm(pParse, pOldExpr) ){ | |
| 139336 | 139373 | int jj; |
| 139337 | 139374 | for(jj=0; jj<pTab->nCol; jj++){ |
| 139338 | 139375 | Expr *pNewExpr; |
| 139339 | 139376 | if( IsHiddenColumn(pTab->aCol+jj) ) continue; |
| 139340 | 139377 | pNewExpr = sqlite3Expr(db, TK_ID, pTab->aCol[jj].zName); |
| @@ -147568,10 +147605,11 @@ | ||
| 147568 | 147605 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 147569 | 147606 | if( pSel->pWin ) return; |
| 147570 | 147607 | #endif |
| 147571 | 147608 | if( pSel->pPrior ) return; |
| 147572 | 147609 | if( pSel->pWhere==0 ) return; |
| 147610 | + if( pSel->pLimit ) return; | |
| 147573 | 147611 | if( 0==exprAnalyzeExistsFindEq(pSel, 0, 0) ) return; |
| 147574 | 147612 | |
| 147575 | 147613 | pDup = sqlite3ExprDup(db, pExpr, 0); |
| 147576 | 147614 | if( db->mallocFailed ){ |
| 147577 | 147615 | sqlite3ExprDelete(db, pDup); |
| @@ -155352,10 +155390,11 @@ | ||
| 155352 | 155390 | VdbeCoverageIf(v, eCond==0); |
| 155353 | 155391 | VdbeCoverageIf(v, eCond==1); |
| 155354 | 155392 | VdbeCoverageIf(v, eCond==2); |
| 155355 | 155393 | } |
| 155356 | 155394 | sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg); |
| 155395 | + sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC); | |
| 155357 | 155396 | VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */ |
| 155358 | 155397 | VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */ |
| 155359 | 155398 | VdbeCoverageNeverNullIf(v, eCond==2); |
| 155360 | 155399 | VdbeCoverageNeverNullIf(v, eCond==3); /* NULL case caught by */ |
| 155361 | 155400 | VdbeCoverageNeverNullIf(v, eCond==4); /* the OP_Ge */ |
| @@ -229251,11 +229290,11 @@ | ||
| 229251 | 229290 | int nArg, /* Number of args */ |
| 229252 | 229291 | sqlite3_value **apUnused /* Function arguments */ |
| 229253 | 229292 | ){ |
| 229254 | 229293 | assert( nArg==0 ); |
| 229255 | 229294 | UNUSED_PARAM2(nArg, apUnused); |
| 229256 | - sqlite3_result_text(pCtx, "fts5: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a", -1, SQLITE_TRANSIENT); | |
| 229295 | + sqlite3_result_text(pCtx, "fts5: 2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db635aa", -1, SQLITE_TRANSIENT); | |
| 229257 | 229296 | } |
| 229258 | 229297 | |
| 229259 | 229298 | /* |
| 229260 | 229299 | ** Return true if zName is the extension on one of the shadow tables used |
| 229261 | 229300 | ** by this module. |
| @@ -234177,12 +234216,12 @@ | ||
| 234177 | 234216 | } |
| 234178 | 234217 | #endif /* SQLITE_CORE */ |
| 234179 | 234218 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 234180 | 234219 | |
| 234181 | 234220 | /************** End of stmt.c ************************************************/ |
| 234182 | -#if __LINE__!=234182 | |
| 234221 | +#if __LINE__!=234221 | |
| 234183 | 234222 | #undef SQLITE_SOURCE_ID |
| 234184 | -#define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40alt2" | |
| 234223 | +#define SQLITE_SOURCE_ID "2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db6alt2" | |
| 234185 | 234224 | #endif |
| 234186 | 234225 | /* Return the source-id for this library */ |
| 234187 | 234226 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 234188 | 234227 | /************************** End of sqlite3.c ******************************/ |
| 234189 | 234228 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1,8 +1,8 @@ | |
| 1 | /****************************************************************************** |
| 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | ** version 3.35.3. By combining all the individual C code files into this |
| 4 | ** single large file, the entire code can be compiled as a single translation |
| 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | ** of 5% or more are commonly seen when SQLite is compiled as a single |
| 8 | ** translation unit. |
| @@ -1184,13 +1184,13 @@ | |
| 1184 | ** |
| 1185 | ** See also: [sqlite3_libversion()], |
| 1186 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1187 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1188 | */ |
| 1189 | #define SQLITE_VERSION "3.35.3" |
| 1190 | #define SQLITE_VERSION_NUMBER 3035003 |
| 1191 | #define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a" |
| 1192 | |
| 1193 | /* |
| 1194 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1195 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1196 | ** |
| @@ -19762,10 +19762,11 @@ | |
| 19762 | SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr*); |
| 19763 | SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); |
| 19764 | SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,Expr*,FuncDef*); |
| 19765 | SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); |
| 19766 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*); |
| 19767 | SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*); |
| 19768 | SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); |
| 19769 | SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); |
| 19770 | SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList*,int,int); |
| 19771 | SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int); |
| @@ -99000,19 +99001,21 @@ | |
| 99000 | pTab = 0; |
| 99001 | #ifndef SQLITE_OMIT_TRIGGER |
| 99002 | if( pParse->pTriggerTab!=0 ){ |
| 99003 | int op = pParse->eTriggerOp; |
| 99004 | assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); |
| 99005 | if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){ |
| 99006 | pExpr->iTable = 1; |
| 99007 | pTab = pParse->pTriggerTab; |
| 99008 | }else if( op!=TK_INSERT && zTab && sqlite3StrICmp("old",zTab)==0 ){ |
| 99009 | pExpr->iTable = 0; |
| 99010 | pTab = pParse->pTriggerTab; |
| 99011 | }else if( pParse->bReturning && (pNC->ncFlags & NC_UBaseReg)!=0 ){ |
| 99012 | pExpr->iTable = op!=TK_DELETE; |
| 99013 | pTab = pParse->pTriggerTab; |
| 99014 | } |
| 99015 | } |
| 99016 | #endif /* SQLITE_OMIT_TRIGGER */ |
| 99017 | #ifndef SQLITE_OMIT_UPSERT |
| 99018 | if( (pNC->ncFlags & NC_UUpsert)!=0 && zTab!=0 ){ |
| @@ -101603,12 +101606,12 @@ | |
| 101603 | }else if( pRight==0 ){ |
| 101604 | return pLeft; |
| 101605 | }else if( (ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight)) |
| 101606 | && !IN_RENAME_OBJECT |
| 101607 | ){ |
| 101608 | sqlite3ExprDelete(db, pLeft); |
| 101609 | sqlite3ExprDelete(db, pRight); |
| 101610 | return sqlite3Expr(db, TK_INTEGER, "0"); |
| 101611 | }else{ |
| 101612 | return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); |
| 101613 | } |
| 101614 | } |
| @@ -101801,10 +101804,26 @@ | |
| 101801 | } |
| 101802 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ |
| 101803 | if( p ) sqlite3ExprDeleteNN(db, p); |
| 101804 | } |
| 101805 | |
| 101806 | /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the |
| 101807 | ** expression. |
| 101808 | */ |
| 101809 | SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse *pParse, Expr *p){ |
| 101810 | if( p ){ |
| @@ -106426,22 +106445,20 @@ | |
| 106426 | assert( iAgg>=0 && iAgg<pAggInfo->nColumn ); |
| 106427 | if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ |
| 106428 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 106429 | if( pExpr ){ |
| 106430 | pAggInfo->aCol[iAgg].pCExpr = pExpr; |
| 106431 | pParse->pConstExpr = |
| 106432 | sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); |
| 106433 | } |
| 106434 | } |
| 106435 | }else{ |
| 106436 | assert( iAgg>=0 && iAgg<pAggInfo->nFunc ); |
| 106437 | if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ |
| 106438 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 106439 | if( pExpr ){ |
| 106440 | pAggInfo->aFunc[iAgg].pFExpr = pExpr; |
| 106441 | pParse->pConstExpr = |
| 106442 | sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); |
| 106443 | } |
| 106444 | } |
| 106445 | } |
| 106446 | } |
| 106447 | return WRC_Continue; |
| @@ -139312,10 +139329,29 @@ | |
| 139312 | }else{ |
| 139313 | sqlite3DbFree(db, zName); |
| 139314 | } |
| 139315 | return pSrc; |
| 139316 | } |
| 139317 | |
| 139318 | /* The input list pList is the list of result set terms from a RETURNING |
| 139319 | ** clause. The table that we are returning from is pTab. |
| 139320 | ** |
| 139321 | ** This routine makes a copy of the pList, and at the same time expands |
| @@ -139330,11 +139366,12 @@ | |
| 139330 | sqlite3 *db = pParse->db; |
| 139331 | int i; |
| 139332 | |
| 139333 | for(i=0; i<pList->nExpr; i++){ |
| 139334 | Expr *pOldExpr = pList->a[i].pExpr; |
| 139335 | if( ALWAYS(pOldExpr!=0) && pOldExpr->op==TK_ASTERISK ){ |
| 139336 | int jj; |
| 139337 | for(jj=0; jj<pTab->nCol; jj++){ |
| 139338 | Expr *pNewExpr; |
| 139339 | if( IsHiddenColumn(pTab->aCol+jj) ) continue; |
| 139340 | pNewExpr = sqlite3Expr(db, TK_ID, pTab->aCol[jj].zName); |
| @@ -147568,10 +147605,11 @@ | |
| 147568 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 147569 | if( pSel->pWin ) return; |
| 147570 | #endif |
| 147571 | if( pSel->pPrior ) return; |
| 147572 | if( pSel->pWhere==0 ) return; |
| 147573 | if( 0==exprAnalyzeExistsFindEq(pSel, 0, 0) ) return; |
| 147574 | |
| 147575 | pDup = sqlite3ExprDup(db, pExpr, 0); |
| 147576 | if( db->mallocFailed ){ |
| 147577 | sqlite3ExprDelete(db, pDup); |
| @@ -155352,10 +155390,11 @@ | |
| 155352 | VdbeCoverageIf(v, eCond==0); |
| 155353 | VdbeCoverageIf(v, eCond==1); |
| 155354 | VdbeCoverageIf(v, eCond==2); |
| 155355 | } |
| 155356 | sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg); |
| 155357 | VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */ |
| 155358 | VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */ |
| 155359 | VdbeCoverageNeverNullIf(v, eCond==2); |
| 155360 | VdbeCoverageNeverNullIf(v, eCond==3); /* NULL case caught by */ |
| 155361 | VdbeCoverageNeverNullIf(v, eCond==4); /* the OP_Ge */ |
| @@ -229251,11 +229290,11 @@ | |
| 229251 | int nArg, /* Number of args */ |
| 229252 | sqlite3_value **apUnused /* Function arguments */ |
| 229253 | ){ |
| 229254 | assert( nArg==0 ); |
| 229255 | UNUSED_PARAM2(nArg, apUnused); |
| 229256 | sqlite3_result_text(pCtx, "fts5: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a", -1, SQLITE_TRANSIENT); |
| 229257 | } |
| 229258 | |
| 229259 | /* |
| 229260 | ** Return true if zName is the extension on one of the shadow tables used |
| 229261 | ** by this module. |
| @@ -234177,12 +234216,12 @@ | |
| 234177 | } |
| 234178 | #endif /* SQLITE_CORE */ |
| 234179 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 234180 | |
| 234181 | /************** End of stmt.c ************************************************/ |
| 234182 | #if __LINE__!=234182 |
| 234183 | #undef SQLITE_SOURCE_ID |
| 234184 | #define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40alt2" |
| 234185 | #endif |
| 234186 | /* Return the source-id for this library */ |
| 234187 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 234188 | /************************** End of sqlite3.c ******************************/ |
| 234189 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1,8 +1,8 @@ | |
| 1 | /****************************************************************************** |
| 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | ** version 3.35.4. By combining all the individual C code files into this |
| 4 | ** single large file, the entire code can be compiled as a single translation |
| 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | ** of 5% or more are commonly seen when SQLite is compiled as a single |
| 8 | ** translation unit. |
| @@ -1184,13 +1184,13 @@ | |
| 1184 | ** |
| 1185 | ** See also: [sqlite3_libversion()], |
| 1186 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1187 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1188 | */ |
| 1189 | #define SQLITE_VERSION "3.35.4" |
| 1190 | #define SQLITE_VERSION_NUMBER 3035004 |
| 1191 | #define SQLITE_SOURCE_ID "2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db635aa" |
| 1192 | |
| 1193 | /* |
| 1194 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1195 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1196 | ** |
| @@ -19762,10 +19762,11 @@ | |
| 19762 | SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr*); |
| 19763 | SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); |
| 19764 | SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,Expr*,FuncDef*); |
| 19765 | SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); |
| 19766 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*); |
| 19767 | SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse*, Expr*); |
| 19768 | SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*); |
| 19769 | SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); |
| 19770 | SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); |
| 19771 | SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList*,int,int); |
| 19772 | SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int); |
| @@ -99000,19 +99001,21 @@ | |
| 99001 | pTab = 0; |
| 99002 | #ifndef SQLITE_OMIT_TRIGGER |
| 99003 | if( pParse->pTriggerTab!=0 ){ |
| 99004 | int op = pParse->eTriggerOp; |
| 99005 | assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); |
| 99006 | if( pParse->bReturning && (pNC->ncFlags & NC_UBaseReg)!=0 ){ |
| 99007 | if( zTab==0 || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0 ){ |
| 99008 | pExpr->iTable = op!=TK_DELETE; |
| 99009 | pTab = pParse->pTriggerTab; |
| 99010 | } |
| 99011 | }else if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){ |
| 99012 | pExpr->iTable = 1; |
| 99013 | pTab = pParse->pTriggerTab; |
| 99014 | }else if( op!=TK_INSERT && zTab && sqlite3StrICmp("old",zTab)==0 ){ |
| 99015 | pExpr->iTable = 0; |
| 99016 | pTab = pParse->pTriggerTab; |
| 99017 | } |
| 99018 | } |
| 99019 | #endif /* SQLITE_OMIT_TRIGGER */ |
| 99020 | #ifndef SQLITE_OMIT_UPSERT |
| 99021 | if( (pNC->ncFlags & NC_UUpsert)!=0 && zTab!=0 ){ |
| @@ -101603,12 +101606,12 @@ | |
| 101606 | }else if( pRight==0 ){ |
| 101607 | return pLeft; |
| 101608 | }else if( (ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight)) |
| 101609 | && !IN_RENAME_OBJECT |
| 101610 | ){ |
| 101611 | sqlite3ExprDeferredDelete(pParse, pLeft); |
| 101612 | sqlite3ExprDeferredDelete(pParse, pRight); |
| 101613 | return sqlite3Expr(db, TK_INTEGER, "0"); |
| 101614 | }else{ |
| 101615 | return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); |
| 101616 | } |
| 101617 | } |
| @@ -101801,10 +101804,26 @@ | |
| 101804 | } |
| 101805 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ |
| 101806 | if( p ) sqlite3ExprDeleteNN(db, p); |
| 101807 | } |
| 101808 | |
| 101809 | |
| 101810 | /* |
| 101811 | ** Arrange to cause pExpr to be deleted when the pParse is deleted. |
| 101812 | ** This is similar to sqlite3ExprDelete() except that the delete is |
| 101813 | ** deferred untilthe pParse is deleted. |
| 101814 | ** |
| 101815 | ** The pExpr might be deleted immediately on an OOM error. |
| 101816 | ** |
| 101817 | ** The deferred delete is (currently) implemented by adding the |
| 101818 | ** pExpr to the pParse->pConstExpr list with a register number of 0. |
| 101819 | */ |
| 101820 | SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ |
| 101821 | pParse->pConstExpr = |
| 101822 | sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); |
| 101823 | } |
| 101824 | |
| 101825 | /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the |
| 101826 | ** expression. |
| 101827 | */ |
| 101828 | SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse *pParse, Expr *p){ |
| 101829 | if( p ){ |
| @@ -106426,22 +106445,20 @@ | |
| 106445 | assert( iAgg>=0 && iAgg<pAggInfo->nColumn ); |
| 106446 | if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ |
| 106447 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 106448 | if( pExpr ){ |
| 106449 | pAggInfo->aCol[iAgg].pCExpr = pExpr; |
| 106450 | sqlite3ExprDeferredDelete(pParse, pExpr); |
| 106451 | } |
| 106452 | } |
| 106453 | }else{ |
| 106454 | assert( iAgg>=0 && iAgg<pAggInfo->nFunc ); |
| 106455 | if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ |
| 106456 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 106457 | if( pExpr ){ |
| 106458 | pAggInfo->aFunc[iAgg].pFExpr = pExpr; |
| 106459 | sqlite3ExprDeferredDelete(pParse, pExpr); |
| 106460 | } |
| 106461 | } |
| 106462 | } |
| 106463 | } |
| 106464 | return WRC_Continue; |
| @@ -139312,10 +139329,29 @@ | |
| 139329 | }else{ |
| 139330 | sqlite3DbFree(db, zName); |
| 139331 | } |
| 139332 | return pSrc; |
| 139333 | } |
| 139334 | |
| 139335 | /* |
| 139336 | ** Return true if the pExpr term from the RETURNING clause argument |
| 139337 | ** list is of the form "*". Raise an error if the terms if of the |
| 139338 | ** form "table.*". |
| 139339 | */ |
| 139340 | static int isAsteriskTerm( |
| 139341 | Parse *pParse, /* Parsing context */ |
| 139342 | Expr *pTerm /* A term in the RETURNING clause */ |
| 139343 | ){ |
| 139344 | assert( pTerm!=0 ); |
| 139345 | if( pTerm->op==TK_ASTERISK ) return 1; |
| 139346 | if( pTerm->op!=TK_DOT ) return 0; |
| 139347 | assert( pTerm->pRight!=0 ); |
| 139348 | assert( pTerm->pLeft!=0 ); |
| 139349 | if( pTerm->pRight->op!=TK_ASTERISK ) return 0; |
| 139350 | sqlite3ErrorMsg(pParse, "RETURNING may not use \"TABLE.*\" wildcards"); |
| 139351 | return 1; |
| 139352 | } |
| 139353 | |
| 139354 | /* The input list pList is the list of result set terms from a RETURNING |
| 139355 | ** clause. The table that we are returning from is pTab. |
| 139356 | ** |
| 139357 | ** This routine makes a copy of the pList, and at the same time expands |
| @@ -139330,11 +139366,12 @@ | |
| 139366 | sqlite3 *db = pParse->db; |
| 139367 | int i; |
| 139368 | |
| 139369 | for(i=0; i<pList->nExpr; i++){ |
| 139370 | Expr *pOldExpr = pList->a[i].pExpr; |
| 139371 | if( NEVER(pOldExpr==0) ) continue; |
| 139372 | if( isAsteriskTerm(pParse, pOldExpr) ){ |
| 139373 | int jj; |
| 139374 | for(jj=0; jj<pTab->nCol; jj++){ |
| 139375 | Expr *pNewExpr; |
| 139376 | if( IsHiddenColumn(pTab->aCol+jj) ) continue; |
| 139377 | pNewExpr = sqlite3Expr(db, TK_ID, pTab->aCol[jj].zName); |
| @@ -147568,10 +147605,11 @@ | |
| 147605 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 147606 | if( pSel->pWin ) return; |
| 147607 | #endif |
| 147608 | if( pSel->pPrior ) return; |
| 147609 | if( pSel->pWhere==0 ) return; |
| 147610 | if( pSel->pLimit ) return; |
| 147611 | if( 0==exprAnalyzeExistsFindEq(pSel, 0, 0) ) return; |
| 147612 | |
| 147613 | pDup = sqlite3ExprDup(db, pExpr, 0); |
| 147614 | if( db->mallocFailed ){ |
| 147615 | sqlite3ExprDelete(db, pDup); |
| @@ -155352,10 +155390,11 @@ | |
| 155390 | VdbeCoverageIf(v, eCond==0); |
| 155391 | VdbeCoverageIf(v, eCond==1); |
| 155392 | VdbeCoverageIf(v, eCond==2); |
| 155393 | } |
| 155394 | sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg); |
| 155395 | sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC); |
| 155396 | VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */ |
| 155397 | VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */ |
| 155398 | VdbeCoverageNeverNullIf(v, eCond==2); |
| 155399 | VdbeCoverageNeverNullIf(v, eCond==3); /* NULL case caught by */ |
| 155400 | VdbeCoverageNeverNullIf(v, eCond==4); /* the OP_Ge */ |
| @@ -229251,11 +229290,11 @@ | |
| 229290 | int nArg, /* Number of args */ |
| 229291 | sqlite3_value **apUnused /* Function arguments */ |
| 229292 | ){ |
| 229293 | assert( nArg==0 ); |
| 229294 | UNUSED_PARAM2(nArg, apUnused); |
| 229295 | sqlite3_result_text(pCtx, "fts5: 2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db635aa", -1, SQLITE_TRANSIENT); |
| 229296 | } |
| 229297 | |
| 229298 | /* |
| 229299 | ** Return true if zName is the extension on one of the shadow tables used |
| 229300 | ** by this module. |
| @@ -234177,12 +234216,12 @@ | |
| 234216 | } |
| 234217 | #endif /* SQLITE_CORE */ |
| 234218 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 234219 | |
| 234220 | /************** End of stmt.c ************************************************/ |
| 234221 | #if __LINE__!=234221 |
| 234222 | #undef SQLITE_SOURCE_ID |
| 234223 | #define SQLITE_SOURCE_ID "2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db6alt2" |
| 234224 | #endif |
| 234225 | /* Return the source-id for this library */ |
| 234226 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 234227 | /************************** End of sqlite3.c ******************************/ |
| 234228 |
+3
-3
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -121,13 +121,13 @@ | ||
| 121 | 121 | ** |
| 122 | 122 | ** See also: [sqlite3_libversion()], |
| 123 | 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | 125 | */ |
| 126 | -#define SQLITE_VERSION "3.35.3" | |
| 127 | -#define SQLITE_VERSION_NUMBER 3035003 | |
| 128 | -#define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a" | |
| 126 | +#define SQLITE_VERSION "3.35.4" | |
| 127 | +#define SQLITE_VERSION_NUMBER 3035004 | |
| 128 | +#define SQLITE_SOURCE_ID "2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db635aa" | |
| 129 | 129 | |
| 130 | 130 | /* |
| 131 | 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | 133 | ** |
| 134 | 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -121,13 +121,13 @@ | |
| 121 | ** |
| 122 | ** See also: [sqlite3_libversion()], |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.35.3" |
| 127 | #define SQLITE_VERSION_NUMBER 3035003 |
| 128 | #define SQLITE_SOURCE_ID "2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -121,13 +121,13 @@ | |
| 121 | ** |
| 122 | ** See also: [sqlite3_libversion()], |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.35.4" |
| 127 | #define SQLITE_VERSION_NUMBER 3035004 |
| 128 | #define SQLITE_SOURCE_ID "2021-03-31 17:49:52 3b916924cef383f3d395e1f10aed6584d22d39a26f3b3c9919bd1afc0db635aa" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |