11/******************************************************************************
22** This file is an amalgamation of many separate C source files from SQLite
3- ** version 3.47.1 . By combining all the individual C code files into this
3+ ** version 3.47.2 . By combining all the individual C code files into this
44** single large file, the entire code can be compiled as a single translation
55** unit. This allows many compilers to do optimizations that would not be
66** possible if the files were compiled separately. Performance improvements
1818** separate file. This file contains only code for the core SQLite library.
1919**
2020** The content in this amalgamation comes from Fossil check-in
21- ** b95d11e958643b969c47a8e5857f3793b9e6 .
21+ ** 2aabe05e2e8cae4847a802ee2daddc1d7413 .
2222*/
2323#define SQLITE_CORE 1
2424#define SQLITE_AMALGAMATION 1
@@ -462,9 +462,9 @@ extern "C" {
462462** [sqlite3_libversion_number()], [sqlite3_sourceid()],
463463** [sqlite_version()] and [sqlite_source_id()].
464464*/
465- #define SQLITE_VERSION "3.47.1 "
466- #define SQLITE_VERSION_NUMBER 3047001
467- #define SQLITE_SOURCE_ID "2024-11-25 12:07:48 b95d11e958643b969c47a8e5857f3793b9e69700b8f1469371386369a26e577e "
465+ #define SQLITE_VERSION "3.47.2 "
466+ #define SQLITE_VERSION_NUMBER 3047002
467+ #define SQLITE_SOURCE_ID "2024-12-07 20:39:59 2aabe05e2e8cae4847a802ee2daddc1d7413d8fc560254d93ee3e72c14685b6c "
468468
469469/*
470470** CAPI3REF: Run-Time Library Version Numbers
@@ -35697,8 +35697,8 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
3569735697 int eValid = 1; /* True exponent is either not used or is well-formed */
3569835698 int nDigit = 0; /* Number of digits processed */
3569935699 int eType = 1; /* 1: pure integer, 2+: fractional -1 or less: bad UTF16 */
35700+ u64 s2; /* round-tripped significand */
3570035701 double rr[2];
35701- u64 s2;
3570235702
3570335703 assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
3570435704 *pResult = 0.0; /* Default return value, in case of an error */
@@ -35801,7 +35801,7 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
3580135801 e = (e*esign) + d;
3580235802
3580335803 /* Try to adjust the exponent to make it smaller */
35804- while( e>0 && s<(LARGEST_UINT64/10) ){
35804+ while( e>0 && s<(( LARGEST_UINT64-0x7ff) /10) ){
3580535805 s *= 10;
3580635806 e--;
3580735807 }
@@ -35811,11 +35811,16 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
3581135811 }
3581235812
3581335813 rr[0] = (double)s;
35814- s2 = (u64)rr[0];
35815- #if defined(_MSC_VER) && _MSC_VER<1700
35816- if( s2==0x8000000000000000LL ){ s2 = 2*(u64)(0.5*rr[0]); }
35817- #endif
35818- rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s);
35814+ assert( sizeof(s2)==sizeof(rr[0]) );
35815+ memcpy(&s2, &rr[0], sizeof(s2));
35816+ if( s2<=0x43efffffffffffffLL ){
35817+ s2 = (u64)rr[0];
35818+ rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s);
35819+ }else{
35820+ rr[1] = 0.0;
35821+ }
35822+ assert( rr[1]<=1.0e-10*rr[0] ); /* Equal only when rr[0]==0.0 */
35823+
3581935824 if( e>0 ){
3582035825 while( e>=100 ){
3582135826 e -= 100;
@@ -147605,32 +147610,32 @@ static Expr *substExpr(
147605147610 if( pSubst->isOuterJoin ){
147606147611 ExprSetProperty(pNew, EP_CanBeNull);
147607147612 }
147608- if( ExprHasProperty(pExpr,EP_OuterON|EP_InnerON) ){
147609- sqlite3SetJoinExpr(pNew, pExpr->w.iJoin,
147610- pExpr->flags & (EP_OuterON|EP_InnerON));
147611- }
147612- sqlite3ExprDelete(db, pExpr);
147613- pExpr = pNew;
147614- if( pExpr->op==TK_TRUEFALSE ){
147615- pExpr->u.iValue = sqlite3ExprTruthValue(pExpr);
147616- pExpr->op = TK_INTEGER;
147617- ExprSetProperty(pExpr, EP_IntValue);
147613+ if( pNew->op==TK_TRUEFALSE ){
147614+ pNew->u.iValue = sqlite3ExprTruthValue(pNew);
147615+ pNew->op = TK_INTEGER;
147616+ ExprSetProperty(pNew, EP_IntValue);
147618147617 }
147619147618
147620147619 /* Ensure that the expression now has an implicit collation sequence,
147621147620 ** just as it did when it was a column of a view or sub-query. */
147622147621 {
147623- CollSeq *pNat = sqlite3ExprCollSeq(pSubst->pParse, pExpr );
147622+ CollSeq *pNat = sqlite3ExprCollSeq(pSubst->pParse, pNew );
147624147623 CollSeq *pColl = sqlite3ExprCollSeq(pSubst->pParse,
147625147624 pSubst->pCList->a[iColumn].pExpr
147626147625 );
147627- if( pNat!=pColl || (pExpr ->op!=TK_COLUMN && pExpr ->op!=TK_COLLATE) ){
147628- pExpr = sqlite3ExprAddCollateString(pSubst->pParse, pExpr ,
147626+ if( pNat!=pColl || (pNew ->op!=TK_COLUMN && pNew ->op!=TK_COLLATE) ){
147627+ pNew = sqlite3ExprAddCollateString(pSubst->pParse, pNew ,
147629147628 (pColl ? pColl->zName : "BINARY")
147630147629 );
147631147630 }
147632147631 }
147633- ExprClearProperty(pExpr, EP_Collate);
147632+ ExprClearProperty(pNew, EP_Collate);
147633+ if( ExprHasProperty(pExpr,EP_OuterON|EP_InnerON) ){
147634+ sqlite3SetJoinExpr(pNew, pExpr->w.iJoin,
147635+ pExpr->flags & (EP_OuterON|EP_InnerON));
147636+ }
147637+ sqlite3ExprDelete(db, pExpr);
147638+ pExpr = pNew;
147634147639 }
147635147640 }
147636147641 }else{
@@ -254938,7 +254943,7 @@ static void fts5SourceIdFunc(
254938254943){
254939254944 assert( nArg==0 );
254940254945 UNUSED_PARAM2(nArg, apUnused);
254941- sqlite3_result_text(pCtx, "fts5: 2024-11-25 12:07:48 b95d11e958643b969c47a8e5857f3793b9e69700b8f1469371386369a26e577e ", -1, SQLITE_TRANSIENT);
254946+ sqlite3_result_text(pCtx, "fts5: 2024-12-07 20:39:59 2aabe05e2e8cae4847a802ee2daddc1d7413d8fc560254d93ee3e72c14685b6c ", -1, SQLITE_TRANSIENT);
254942254947}
254943254948
254944254949/*
0 commit comments