@@ -16,11 +16,11 @@
16 16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if you want a wrapper to interface SQLite with your choice of programming
17 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** language. The code for the "sqlite3" command-line shell is also in a
18 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** separate file. This file contains only code for the core SQLite library.
19 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
20 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The content in this amalgamation comes from Fossil check-in
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 5c237f1f863a32cf229010d2024d0d1e76a0 with changes in files:
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 276c350313a1ac2ebc70c1e8e50ed4baecd4 with changes in files:
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_AMALGAMATION
26 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_CORE 1
@@ -467,14 +467,14 @@
467 467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
468 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
469 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
470 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION "3.53.0"
471 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION_NUMBER 3053000
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2026-03-18 22:31:56 5c237f1f863a32cf229010d2024d0d1e76a07a4d8b9492b26503b959f1c32485"
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2026-03-23 13:00:56 276c350313a1ac2ebc70c1e8e50ed4baecd4be4d4c93ba04cf5e0078da18700e"
473 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCM_BRANCH "trunk"
474 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCM_TAGS ""
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SCM_DATETIME "2026-03-18T22:31:56.220Z"
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SCM_DATETIME "2026-03-23T13:00:56.709Z"
476 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
477 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
478 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
479 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version sqlite3_sourceid
480 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -3549,10 +3549,32 @@
3549 3549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API char *sqlite3_mprintf(const char*,...);
3550 3550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
3551 3551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
3552 3552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
3553 3553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
3555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CAPI3REF: Text-to-float conversion
3556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite3_atof(X) interface returns a "double" derived from the
3558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** text representation of a floating point value in X.
3559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This interface provides applications with access to the
3560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** same text→float conversion routine used by SQLite for SQL parsing
3561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and type coercion. The sqlite3_atof(X) routine works like the standard
3562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** C-library atof(X) routine with the following exceptions:
3563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <ul>
3565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> Parsing of the input X is strict. If anything about X
3566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is not well-formed, 0.0 is returned.
3567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> Special values such like "INF", "INFINITY", and "NAN" are not
3568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** recognized.
3569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> Hexadecimal floating point literals are not recognized.
3570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> The current locale is ignored. The radix character is always ".".
3571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> The sqlite3_atof() interface does not set errno.
3572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>
3573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
3574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API double sqlite3_atof(const char*);
3575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
3554 3576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3555 3577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Memory Allocation Subsystem
3556 3578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3557 3579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The SQLite core uses these three routines for all of its own
3558 3580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** internal memory allocation needs. "Core" in the previous sentence
@@ -24653,11 +24675,11 @@
24653 24675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, u8, u8);
24654 24676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IntFloatCompare(i64,double);
24655 24677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE i64 sqlite3VdbeIntValue(const Mem*);
24656 24678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*);
24657 24679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*);
24658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE SQLITE_NOINLINE double sqlite3MemRealValueRC(Mem*, int*);
24680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3MemRealValueRC(Mem*, double*);
24659 24681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeBooleanValue(Mem*, int ifNull);
24660 24682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*);
24661 24683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*);
24662 24684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*);
24663 24685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemCast(Mem*,u8,u8);
@@ -36551,10 +36573,24 @@
36551 36573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into *pLo. Return the upper 64 bits of A*B.
36552 36574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36553 36575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The lower 64 bits of A*B are discarded.
36554 36576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36555 36577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u64 sqlite3Multiply160(u64 a, u32 aLo, u64 b, u32 *pLo){
36578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if (defined(__GNUC__) || defined(__clang__)) \
36579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (defined(__x86_64__) || defined(__aarch64__) || defined(__riscv))
36580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __uint128_t r = (__uint128_t)a * b;
36581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r += ((__uint128_t)aLo * b) >> 32;
36582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pLo = (r>>32)&0xffffffff;
36583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return r>>64;
36584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(_MSC_VER) && defined(_M_X64)
36585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 r1_hi = __umulh(a,b);
36586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 r1_lo = a*b;
36587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 r2 = (__umulh((u64)aLo,b)<<32) + ((aLo*b)>>32);
36588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r1_hi += _addcarry_u64(0, r1_lo, r2, &r1_lo);
36589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pLo = r1_lo>>32;
36590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return r1_hi;
36591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
36556 36592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 x2 = a>>32;
36557 36593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 x1 = a&0xffffffff;
36558 36594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 x0 = aLo;
36559 36595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 y1 = b>>32;
36560 36596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 y0 = b&0xffffffff;
@@ -36572,10 +36608,11 @@
36572 36608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(x0y0 >>32);
36573 36609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r2 += r1>>32;
36574 36610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r3 += r2>>32;
36575 36611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pLo = r2&0xffffffff;
36576 36612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (r4<<32) + r3;
36613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
36577 36614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36578 36615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36579 36616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
36580 36617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return a u64 with the N-th bit set.
36581 36618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -36801,10 +36838,13 @@
36801 36838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pP = -p;
36802 36839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36803 36840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36804 36841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
36805 36842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return an IEEE754 floating point value that approximates d*pow(10,p).
36843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
36844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The (current) algorithm is adapted from the work of Ross Cox at
36845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** https://github.com/rsc/fpfmt
36806 36846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36807 36847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static double sqlite3Fp10Convert2(u64 d, int p){
36808 36848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int b, lp, e, adj, s;
36809 36849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 pwr10l, mid1;
36810 36850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 pwr10h, x, hi, lo, sticky, u, m;
@@ -36852,18 +36892,21 @@
36852 36892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The string z[] is an text representation of a real number.
36853 36893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convert this string to a double and write it into *pResult.
36854 36894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36855 36895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** z[] must be UTF-8 and zero-terminated.
36856 36896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return TRUE if the result is a valid real number (or integer) and FALSE
36858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if the string is empty or contains extraneous text. More specifically
36859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** return
36897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return positive if the result is a valid real number (or integer) and
36898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zero or negative if the string is empty or contains extraneous text.
36899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** More specifically:
36900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
36860 36901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 1 => The input string is a pure integer
36861 36902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2 or more => The input has a decimal point or eNNN clause
36862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 0 or less => The input string is not a valid number
36863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** -1 => Not a valid number, but has a valid prefix which
36864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** includes a decimal point and/or an eNNN clause
36903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0 or less => The input string is not well-formed
36904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** -1 => The input is not well-formed, but it does begin
36905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with a well-formed floating-point literal (with
36906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a "." or a "eNNN" suffix or both) followed by
36907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** other extraneous text.
36865 36908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36866 36909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Valid numbers are in one of these formats:
36867 36910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36868 36911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [+-]digits[E[+-]digits]
36869 36912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [+-]digits.[digits][E[+-]digits]
@@ -36870,120 +36913,142 @@
36870 36913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [+-].digits[E[+-]digits]
36871 36914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36872 36915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Leading and trailing whitespace is ignored for the purpose of determining
36873 36916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** validity.
36874 36917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If some prefix of the input string is a valid number, this routine
36876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** returns FALSE but it still converts the prefix and writes the result
36877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** into *pResult.
36918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Algorithm sketch: Compute an unsigned 64-bit integer s and a base-10
36919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** exponent d such that the value encoding by the input is s*pow(10,d).
36920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Then invoke sqlite3Fp10Convert2() to calculated the closest possible
36921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IEEE754 double. The sign is added back afterwards, if the input string
36922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** starts with a "-". The use of an unsigned 64-bit s mantissa means that
36923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only about the first 19 significant digits of the input can contribute
36924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the result. This can result in suboptimal rounding decisions when
36925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** correct rounding requires more than 19 input digits. For example,
36926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this routine renders "3500000000000000.2500001" as
36927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3500000000000000.0 instead of 3500000000000000.5 because the decision
36928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to round up instead of using banker's rounding to round down is determined
36929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the 23rd significant digit, which this routine ignores. It is not
36930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** possible to do better without some kind of BigNum.
36878 36931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(_MSC_VER)
36880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #pragma warning(disable : 4756)
36881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
36882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult){
36932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3AtoF(const char *zIn, double *pResult){
36883 36933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_FLOATING_POINT
36884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* sign * significand * (10 ^ (esign * exponent)) */
36885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int neg = 0; /* True for a negative value */
36886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u64 s = 0; /* mantissa */
36887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int d = 0; /* Value is s * pow(10,d) */
36888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDigit = 0; /* Number of digits processed */
36889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int eType = 1; /* 1: pure integer, 2+: fractional */
36890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
36891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pResult = 0.0; /* Default return value, in case of an error */
36892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
36893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* skip leading spaces */
36894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isspace(*z) ) z++;
36895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
36896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* get sign of significand */
36897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( *z=='-' ){
36934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const unsigned char *z = (const unsigned char*)zIn;
36935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int neg = 0; /* True for a negative value */
36936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 s = 0; /* mantissa */
36937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int d = 0; /* Value is s * pow(10,d) */
36938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int seenDigit = 0; /* true if any digits seen */
36939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int seenFP = 0; /* True if we've seen a "." or a "e" */
36940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned v; /* Value of a single digit */
36941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ start_of_text:
36943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (v = (unsigned)z[0] - '0')<10 ){
36944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parse_integer_part:
36945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ seenDigit = 1;
36946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s = v;
36947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z++;
36948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (v = (unsigned)z[0] - '0')<10 ){
36949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s = s*10 + v;
36950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z++;
36951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s>=(LARGEST_INT64-9)/10 ){
36952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( sqlite3Isdigit(z[0]) ){ z++; d++; }
36953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
36954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( z[0]=='-' ){
36898 36957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
neg = 1;
36899 36958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
36900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( *z=='+' ){
36959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (v = (unsigned)z[0] - '0')<10 ) goto parse_integer_part;
36960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( z[0]=='+' ){
36901 36961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
36902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
36903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
36904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* copy max significant digits to significand */
36905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){
36906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- s = s*10 + (*z - '0');
36907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++; nDigit++;
36908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( s>=((LARGEST_INT64-9)/10) ){
36909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* skip non-significant significand digits
36910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (increase exponent by d to shift decimal left) */
36911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){ z++; d++; }
36912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
36962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (v = (unsigned)z[0] - '0')<10 ) goto parse_integer_part;
36963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( sqlite3Isspace(z[0]) ){
36964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{ z++; }while( sqlite3Isspace(z[0]) );
36965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto start_of_text;
36966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
36967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s = 0;
36913 36968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36914 36969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36915 36970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* if decimal point is present */
36916 36971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z=='.' ){
36917 36972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
36918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eType++;
36919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* copy digits from after decimal to significand
36920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (decrease exponent by d to shift decimal right) */
36921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){
36922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( s<((LARGEST_INT64-9)/10) ){
36923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- s = s*10 + (*z - '0');
36924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- d--;
36925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDigit++;
36926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
36927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
36928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
36973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ seenFP = 1;
36974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3Isdigit(z[0]) ){
36975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ seenDigit = 1;
36976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{
36977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s<((LARGEST_INT64-9)/10) ){
36978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s = s*10 + z[0] - '0';
36979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ d--;
36980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z++;
36982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( sqlite3Isdigit(z[0]) );
36983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !seenDigit ){
36987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pResult = 0.0;
36988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
36929 36989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36930 36990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36931 36991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* if exponent is present */
36932 36992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z=='e' || *z=='E' ){
36933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int esign = 1; /* sign of exponent */
36993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int esign;
36934 36994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
36935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eType++;
36936 36995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36937 36996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* get sign of exponent */
36938 36997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z=='-' ){
36939 36998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
esign = -1;
36940 36999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
36941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( *z=='+' ){
36942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
37000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
37001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ esign = +1;
37002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *z=='+' ){
37003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z++;
37004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36943 37005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36944 37006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* copy digits to exponent */
36945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3Isdigit(*z) ){
36946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int exp = *z - '0';
37007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (v = (unsigned)z[0] - '0')<10 ){
37008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int exp = v;
36947 37009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
36948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){
36949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- exp = exp<10000 ? (exp*10 + (*z - '0')) : 10000;
37010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ seenFP = 1;
37011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (v = (unsigned)z[0] - '0')<10 ){
37012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exp = exp<10000 ? (exp*10 + v) : 10000;
36950 37013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
36951 37014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36952 37015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
d += esign*exp;
36953 37016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eType = -1;
37017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z--; /* Leave z[0] at 'e' or '+' or '-',
37018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** so that the return is 0 or -1 */
36955 37019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36956 37020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36957 37021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36958 37022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* skip trailing spaces */
36959 37023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( sqlite3Isspace(*z) ) z++;
36960 37024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Zero is a special case */
36962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( s==0 ){
36963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pResult = neg ? -0.0 : +0.0;
36964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
36965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pResult = sqlite3Fp10Convert2(s,d);
36966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( neg ) *pResult = -*pResult;
36967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( !sqlite3IsNaN(*pResult) );
36968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
37025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Convert s*pow(10,d) into real */
37026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pResult = s ? sqlite3Fp10Convert2(s,d) : 0.0;
37027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( neg ) *pResult = -*pResult;
37028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !sqlite3IsNaN(*pResult) );
36969 37029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36970 37030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* return true if number and no extra non-whitespace characters after */
36971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z[0]==0 && nDigit>0 ){
36972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return eType;
36973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( eType>=2 && nDigit>0 ){
36974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -1;
37031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[0]==0 ){
37032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return seenFP+1;
37033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( seenFP ){
37034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1; /* Prefix is a floating point number */
36975 37035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
37036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0; /* Prefix is just an integer */
36977 37037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36978 37038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
36979 37039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return !sqlite3Atoi64(z, pResult, strlen(z), SQLITE_UTF8);
36980 37040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_FLOATING_POINT */
36981 37041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(_MSC_VER)
36983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #pragma warning(default : 4756)
36984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
37042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
37043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
37044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Access to sqlite3AtoF()
37045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
37046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API double sqlite3_atof(const char *z){
37047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r;
37048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3AtoF(z,&r)>0 ? r : 0.0;
37049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36985 37050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36986 37051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
36987 37052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Digit pairs used to convert a U64 or I64 into text, two digits
36988 37053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** at a time.
36989 37054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -85681,36 +85746,28 @@
85681 85746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
85682 85747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85683 85748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85684 85749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85685 85750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
85686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Invoke sqlite3AtoF() on the text value of pMem and return the
85687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** double result. If sqlite3AtoF() returns an error code, write
85688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that code into *pRC if (*pRC)!=NULL.
85689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
85690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The caller must ensure that pMem->db!=0 and that pMem is in
85691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** mode MEM_Str or MEM_Blob.
85751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine implements the uncommon and slower path for
85752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3MemValueRC(). It is broken out into a separate
85753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no-inline routine so that the main routine can avoid unnecessary
85754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** stack pushes.
85692 85755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
85693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE SQLITE_NOINLINE double sqlite3MemRealValueRC(Mem *pMem, int *pRC){
85694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double val = (double)0;
85695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = 0;
85696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pMem->db!=0 );
85697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pMem->flags & (MEM_Str|MEM_Blob) );
85698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pMem->z==0 ){
85699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* no-op */
85700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pMem->enc==SQLITE_UTF8
85701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && ((pMem->flags & MEM_Term)!=0 || sqlite3VdbeMemZeroTerminateIfAble(pMem))
85702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
85703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3AtoF(pMem->z, &val);
85704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pMem->n==0 ){
85705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* no-op */
85706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pMem->enc==SQLITE_UTF8 ){
85756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static SQLITE_NOINLINE int sqlite3MemRealValueRCSlowPath(
85757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Mem *pMem,
85758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double *pValue
85759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
85760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
85761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pValue = 0.0;
85762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMem->enc==SQLITE_UTF8 ){
85707 85763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zCopy = sqlite3DbStrNDup(pMem->db, pMem->z, pMem->n);
85708 85764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zCopy ){
85709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3AtoF(zCopy, &val);
85765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3AtoF(zCopy, pValue);
85710 85766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(pMem->db, zCopy);
85711 85767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
85712 85769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
85713 85770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n, i, j;
85714 85771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zCopy;
85715 85772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
85716 85773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -85729,17 +85786,53 @@
85729 85786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCopy[j] = z[i+1];
85730 85787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85731 85788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85732 85789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( j<=n/2 );
85733 85790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCopy[j] = 0;
85734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3AtoF(zCopy, &val);
85791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3AtoF(zCopy, pValue);
85735 85792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<n ) rc = -100;
85736 85793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(pMem->db, zCopy);
85737 85794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
85738 85796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pRC ) *pRC = rc;
85740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return val;
85797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
85798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
85800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Invoke sqlite3AtoF() on the text value of pMem and return the
85801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** double result. If sqlite3AtoF() returns an error code, write
85802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that code into *pRC if (*pRC)!=NULL.
85803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
85804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The caller must ensure that pMem->db!=0 and that pMem is in
85805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mode MEM_Str or MEM_Blob.
85806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
85807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3MemRealValueRC(Mem *pMem, double *pValue){
85808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pMem->db!=0 );
85809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pMem->flags & (MEM_Str|MEM_Blob) );
85810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMem->z==0 ){
85811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pValue = 0.0;
85812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
85813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pMem->enc==SQLITE_UTF8
85814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && ((pMem->flags & MEM_Term)!=0 || sqlite3VdbeMemZeroTerminateIfAble(pMem))
85815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
85816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3AtoF(pMem->z, pValue);
85817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pMem->n==0 ){
85818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pValue = 0.0;
85819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
85820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
85821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3MemRealValueRCSlowPath(pMem, pValue);
85822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
85823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
85824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
85826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine acts as a bridge from sqlite3VdbeRealValue() to
85827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3VdbeRealValueRC, allowing sqlite3VdbeRealValue() to avoid
85828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** stuffing values onto the stack.
85829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
85830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static SQLITE_NOINLINE double sqlite3MemRealValueNoRC(Mem *pMem){
85831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r;
85832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void)sqlite3MemRealValueRC(pMem, &r);
85833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return r;
85741 85834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85742 85835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85743 85836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
85744 85837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the best representation of pMem that we can get into a
85745 85838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** double. If pMem is already a double or an integer, return its
@@ -85754,11 +85847,11 @@
85754 85847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pMem->u.r;
85755 85848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pMem->flags & (MEM_Int|MEM_IntReal) ){
85756 85849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pMem->flags & MEM_IntReal );
85757 85850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (double)pMem->u.i;
85758 85851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pMem->flags & (MEM_Str|MEM_Blob) ){
85759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3MemRealValueRC(pMem, 0);
85852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3MemRealValueNoRC(pMem);
85760 85853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
85761 85854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
85762 85855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (double)0;
85763 85856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85764 85857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -85878,11 +85971,11 @@
85878 85971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null))==0 ){
85879 85972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
85880 85973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 ix;
85881 85974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
85882 85975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
85883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMem->u.r = sqlite3MemRealValueRC(pMem, &rc);
85976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3MemRealValueRC(pMem, &pMem->u.r);
85884 85977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1)
85885 85978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| sqlite3RealSameAsInt(pMem->u.r, (ix = sqlite3RealToI64(pMem->u.r)))
85886 85979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
85887 85980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->u.i = ix;
85888 85981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemSetTypeFlag(pMem, MEM_Int);
@@ -96318,11 +96411,11 @@
96318 96411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96319 96412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void applyNumericAffinity(Mem *pRec, int bTryForInt){
96320 96413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double rValue;
96321 96414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
96322 96415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pRec->flags & (MEM_Str|MEM_Int|MEM_Real|MEM_IntReal))==MEM_Str );
96323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rValue = sqlite3MemRealValueRC(pRec, &rc);
96416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3MemRealValueRC(pRec, &rValue);
96324 96417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc<=0 ) return;
96325 96418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==1 && alsoAnInt(pRec, rValue, &pRec->u.i) ){
96326 96419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRec->flags |= MEM_Int;
96327 96420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
96328 96421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRec->u.r = rValue;
@@ -96436,11 +96529,11 @@
96436 96529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pMem->flags & (MEM_Str|MEM_Blob))!=0 );
96437 96530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExpandBlob(pMem) ){
96438 96531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->u.i = 0;
96439 96532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return MEM_Int;
96440 96533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMem->u.r = sqlite3MemRealValueRC(pMem, &rc);
96534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3MemRealValueRC(pMem, &pMem->u.r);
96442 96535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc<=0 ){
96443 96536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==0 && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1 ){
96444 96537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->u.i = ix;
96445 96538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return MEM_Int;
96446 96539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -110776,11 +110869,11 @@
110776 110869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
110777 110870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int exprProbability(Expr *p){
110778 110871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double r = -1.0;
110779 110872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->op!=TK_FLOAT ) return -1;
110780 110873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(p, EP_IntValue) );
110781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AtoF(p->u.zToken, &r);
110874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r = sqlite3_atof(p->u.zToken);
110782 110875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( r>=0.0 );
110783 110876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( r>1.0 ) return -1;
110784 110877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (int)(r*134217728.0);
110785 110878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
110786 110879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -116464,12 +116557,11 @@
116464 116557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** z[n] character is guaranteed to be something that does not look
116465 116558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** like the continuation of the number.
116466 116559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116467 116560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
116468 116561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(z!=0) ){
116469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double value;
116470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AtoF(z, &value);
116562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double value = sqlite3_atof(z);
116471 116563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */
116472 116564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( negateFlag ) value = -value;
116473 116565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Dup8(v, OP_Real, 0, iMem, 0, (u8*)&value, P4_REAL);
116474 116566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116475 116567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -128323,13 +128415,14 @@
128323 128415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( resizeIndexObject(pParse, pPk, nPk+nExtra) ) return;
128324 128416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, j=nPk; i<pTab->nCol; i++){
128325 128417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !hasColumn(pPk->aiColumn, j, i)
128326 128418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0
128327 128419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
128420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zColl = sqlite3ColumnColl(&pTab->aCol[i]);
128328 128421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( j<pPk->nColumn );
128329 128422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPk->aiColumn[j] = i;
128330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPk->azColl[j] = sqlite3StrBINARY;
128423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPk->azColl[j] = zColl ? zColl : sqlite3StrBINARY;
128331 128424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j++;
128332 128425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
128333 128426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
128334 128427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPk->nColumn==j );
128335 128428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab->nNVCol<=j );
@@ -131351,138 +131444,129 @@
131351 131444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3HaltConstraint(pParse, rc, onError, zMsg, P4_DYNAMIC,
131352 131445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
P5_ConstraintUnique);
131353 131446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131354 131447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
131355 131448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
131356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check to see if pIndex uses the collating sequence pColl. Return
131357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** true if it does and false if it does not.
131449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if any column of pIndex uses the zColl collation
131358 131450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
131359 131451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_REINDEX
131360 131452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int collationMatch(const char *zColl, Index *pIndex){
131361 131453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
131362 131454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zColl!=0 );
131363 131455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pIndex->nColumn; i++){
131364 131456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = pIndex->azColl[i];
131365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( z!=0 || pIndex->aiColumn[i]<0 );
131366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIndex->aiColumn[i]>=0 && 0==sqlite3StrICmp(z, zColl) ){
131457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( z!=0 );
131458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==sqlite3StrICmp(z, zColl) ){
131367 131459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
131368 131460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131369 131461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131370 131462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
131371 131463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
131373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
131374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
131375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Recompute all indices of pTab that use the collating sequence pColl.
131376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If pColl==0 then recompute all indices of pTab.
131377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
131378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_REINDEX
131379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
131380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !IsVirtual(pTab) ){
131381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Index *pIndex; /* An index associated with pTab */
131382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
131383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
131384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zColl==0 || collationMatch(zColl, pIndex) ){
131385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
131386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3BeginWriteOperation(pParse, 0, iDb);
131387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3RefillIndex(pParse, pIndex, -1);
131388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
131393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
131394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
131395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Recompute all indices of all tables in all databases where the
131396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** indices use the collating sequence pColl. If pColl==0 then recompute
131397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** all indices everywhere.
131398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
131399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_REINDEX
131400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void reindexDatabases(Parse *pParse, char const *zColl){
131401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Db *pDb; /* A single database */
131402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iDb; /* The database index number */
131403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3 *db = pParse->db; /* The database connection */
131404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- HashElem *k; /* For looping over tables in pDb */
131405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab; /* A table in the database */
131406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
131407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3BtreeHoldsAllMutexes(db) ); /* Needed for schema access */
131408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(iDb=0, pDb=db->aDb; iDb<db->nDb; iDb++, pDb++){
131409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pDb!=0 );
131410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){
131411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = (Table*)sqliteHashData(k);
131412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- reindexTable(pParse, pTab, zColl);
131413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131416 131464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
131417 131465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
131418 131466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
131419 131467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code for the REINDEX command.
131420 131468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
131421 131469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** REINDEX -- 1
131422 131470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** REINDEX <collation> -- 2
131423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** REINDEX ?<database>.?<tablename> -- 3
131424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** REINDEX ?<database>.?<indexname> -- 4
131471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** REINDEX ?<database>.?<indexname> -- 3
131472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** REINDEX ?<database>.?<tablename> -- 4
131473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** REINDEX EXPRESSIONS -- 5
131425 131474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
131426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Form 1 causes all indices in all attached databases to be rebuilt.
131427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Form 2 rebuilds all indices in all databases that use the named
131475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Form 1 causes all indexes in all attached databases to be rebuilt.
131476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Form 2 rebuilds all indexes in all databases that use the named
131428 131477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** collating function. Forms 3 and 4 rebuild the named index or all
131429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** indices associated with the named table.
131478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** indexes associated with the named table, respectively. Form 5
131479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rebuilds all expression indexes in addition to all collations,
131480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** indexes, or tables named "EXPRESSIONS".
131481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
131482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the name is ambiguous such that it matches two or more of
131483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** forms 2 through 5, then rebuild the union of all matching indexes,
131484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** taken care to avoid rebuilding the same index more than once.
131430 131485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
131431 131486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_REINDEX
131432 131487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){
131433 131488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl; /* Collating sequence to be reindexed, or NULL */
131434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *z; /* Name of a table or index */
131435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zDb; /* Name of the database */
131436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab; /* A table in the database */
131437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Index *pIndex; /* An index associated with pTab */
131438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iDb; /* The database index number */
131489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = 0; /* Name of a table or index or collation */
131490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zDb = 0; /* Name of the database */
131491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iReDb = -1; /* The database index number */
131439 131492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db; /* The database connection */
131440 131493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Token *pObjName; /* Name of the table or index to be reindexed */
131494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bMatch = 0; /* At least one name match */
131495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zColl = 0; /* Rebuild indexes using this collation */
131496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pReTab = 0; /* Rebuild all indexes of this table */
131497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pReIndex = 0; /* Rebuild this index */
131498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isExprIdx = 0; /* Rebuild all expression indexes */
131499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bAll = 0; /* Rebuild all indexes */
131441 131500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
131442 131501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Read the database schema. If an error occurs, leave an error message
131443 131502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and code in pParse and return NULL. */
131444 131503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
131445 131504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
131446 131505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131447 131506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
131448 131507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pName1==0 ){
131449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- reindexDatabases(pParse, 0);
131450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
131508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* rebuild all indexes */
131509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bMatch = 1;
131510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bAll = 1;
131451 131511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( NEVER(pName2==0) || pName2->z==0 ){
131452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zColl;
131453 131512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pName1->z );
131454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zColl = sqlite3NameFromToken(pParse->db, pName1);
131455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !zColl ) return;
131456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
131457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pColl ){
131458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- reindexDatabases(pParse, zColl);
131459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, zColl);
131460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
131461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, zColl);
131463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName);
131465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iDb<0 ) return;
131466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = sqlite3NameFromToken(db, pObjName);
131467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z==0 ) return;
131468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDb = pName2->n ? db->aDb[iDb].zDbSName : 0;
131469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = sqlite3FindTable(db, z, zDb);
131470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTab ){
131471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- reindexTable(pParse, pTab, 0);
131472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, z);
131473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
131474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex = sqlite3FindIndex(db, z, zDb);
131476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, z);
131477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIndex ){
131478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iDb = sqlite3SchemaToIndex(db, pIndex->pTable->pSchema);
131479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3BeginWriteOperation(pParse, 0, iDb);
131480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3RefillIndex(pParse, pIndex, -1);
131481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
131482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed");
131513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3NameFromToken(pParse->db, pName1);
131514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 ) return;
131515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
131516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iReDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName);
131517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iReDb<0 ) return;
131518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3NameFromToken(db, pObjName);
131519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 ) return;
131520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDb = db->aDb[iReDb].zDbSName;
131521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !bAll ){
131523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zDb==0 && sqlite3StrICmp(z, "expressions")==0 ){
131524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isExprIdx = 1;
131525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bMatch = 1;
131526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zDb==0 && (pColl = sqlite3FindCollSeq(db, ENC(db), z, 0))!=0 ){
131528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zColl = z;
131529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bMatch = 1;
131530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zColl==0 && (pReTab = sqlite3FindTable(db, z, zDb))!=0 ){
131532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bMatch = 1;
131533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zColl==0 && (pReIndex = sqlite3FindIndex(db, z, zDb))!=0 ){
131535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bMatch = 1;
131536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bMatch ){
131539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDb;
131540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HashElem *k;
131541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab;
131542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pIdx;
131543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Db *pDb;
131544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iDb=0, pDb=db->aDb; iDb<db->nDb; iDb++, pDb++){
131545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pDb!=0 );
131546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iReDb>=0 && iReDb!=iDb ) continue;
131547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){
131548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = (Table*)sqliteHashData(k);
131549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsVirtual(pTab) ) continue;
131550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
131551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bAll
131552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pTab==pReTab
131553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pIdx==pReIndex
131554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (isExprIdx && pIdx->bHasExpr)
131555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (zColl!=0 && collationMatch(zColl,pIdx))
131556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
131557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3BeginWriteOperation(pParse, 0, iDb);
131558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3RefillIndex(pParse, pIdx, -1);
131559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } /* End loop over indexes of pTab */
131561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } /* End loop over tables of iDb */
131562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } /* End loop over databases */
131563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
131564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed");
131565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, z);
131567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
131484 131568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
131485 131569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
131486 131570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
131487 131571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
131488 131572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return a KeyInfo structure that is appropriate for the given Index.
@@ -142129,10 +142213,12 @@
142129 142213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Version 3.52.0 and later */
142130 142214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*str_truncate)(sqlite3_str*,int);
142131 142215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*str_free)(sqlite3_str*);
142132 142216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*carray_bind)(sqlite3_stmt*,int,void*,int,int,void(*)(void*));
142133 142217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*carray_bind_v2)(sqlite3_stmt*,int,void*,int,int,void(*)(void*),void*);
142218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Version 3.53.0 and later */
142219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double (*atof)(const char*);
142134 142220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
142135 142221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
142136 142222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
142137 142223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the function signature used for all extension entry points. It
142138 142224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is also defined in the file "loadext.c".
@@ -142472,10 +142558,12 @@
142472 142558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Version 3.52.0 and later */
142473 142559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_str_truncate sqlite3_api->str_truncate
142474 142560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_str_free sqlite3_api->str_free
142475 142561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_carray_bind sqlite3_api->carray_bind
142476 142562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_carray_bind_v2 sqlite3_api->carray_bind_v2
142563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Version 3.53.0 and later */
142564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sqlite3_atof sqlite3_api->atof
142477 142565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
142478 142566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
142479 142567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
142480 142568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This case when the file really is being compiled as a loadable
142481 142569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** extension */
@@ -143004,15 +143092,16 @@
143004 143092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Version 3.52.0 and later */
143005 143093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_truncate,
143006 143094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_free,
143007 143095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_CARRAY
143008 143096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_carray_bind,
143009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_carray_bind_v2
143097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_carray_bind_v2,
143010 143098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
143099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0,
143011 143100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
143012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0
143013 143101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
143102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_atof
143014 143103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
143015 143104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143016 143105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* True if x is the directory separator character
143017 143106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
143018 143107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WIN
@@ -172275,11 +172364,16 @@
172275 172364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
172276 172365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ApplyCostMultiplier(pNew->rRun, pTab->costMult);
172277 172366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereLoopOutputAdjust(pWC, pNew, rSize);
172278 172367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.isSubquery ){
172279 172368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.viaCoroutine ) pNew->wsFlags |= WHERE_COROUTINE;
172280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->u.btree.pOrderBy = pSrc->u4.pSubq->pSelect->pOrderBy;
172369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do not set btree.pOrderBy for a recursive CTE. In this case
172370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the ORDER BY clause does not determine the overall order that
172371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rows are emitted from the CTE in. */
172372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pSrc->u4.pSubq->pSelect->selFlags & SF_Recursive)==0 ){
172373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->u.btree.pOrderBy = pSrc->u4.pSubq->pSelect->pOrderBy;
172374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
172281 172375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pSrc->fg.fromExists ){
172282 172376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = 0;
172283 172377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
172284 172378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopInsert(pBuilder, pNew);
172285 172379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = rSize;
@@ -212773,18 +212867,19 @@
212773 212867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
JsonParse *pParse, /* JSONB source or NULL */
212774 212868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *ctx /* Where to cache */
212775 212869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
212776 212870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pParse!=0)==(ctx!=0) );
212777 212871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ctx==0 || ctx==p->pCtx );
212872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jsonStringTerminate(p);
212778 212873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->eErr==0 ){
212779 212874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(p->pCtx));
212780 212875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags & JSON_BLOB ){
212781 212876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jsonReturnStringAsBlob(p);
212782 212877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( p->bStatic ){
212783 212878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed,
212784 212879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_TRANSIENT, SQLITE_UTF8);
212785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( jsonStringTerminate(p) ){
212880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
212786 212881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse && pParse->bJsonIsRCStr==0 && pParse->nBlobAlloc>0 ){
212787 212882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
212788 212883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zJson = sqlite3RCStrRef(p->zBuf);
212789 212884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nJson = p->nUsed;
212790 212885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->bJsonIsRCStr = 1;
@@ -212796,12 +212891,10 @@
212796 212891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212797 212892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212798 212893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_text64(p->pCtx, sqlite3RCStrRef(p->zBuf), p->nUsed,
212799 212894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3RCStrUnref,
212800 212895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_UTF8);
212801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
212802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_error_nomem(p->pCtx);
212803 212896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212804 212897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( p->eErr & JSTRING_OOM ){
212805 212898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error_nomem(p->pCtx);
212806 212899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( p->eErr & JSTRING_MALFORMED ){
212807 212900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error(p->pCtx, "malformed JSON", -1);
@@ -214011,16 +214104,12 @@
214011 214104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this into the JSONB format and make it the return value of the
214012 214105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQL function.
214013 214106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
214014 214107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void jsonReturnStringAsBlob(JsonString *pStr){
214015 214108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
JsonParse px;
214109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pStr->eErr==0 );
214016 214110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&px, 0, sizeof(px));
214017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- jsonStringTerminate(pStr);
214018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pStr->eErr ){
214019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_error_nomem(pStr->pCtx);
214020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
214021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
214022 214111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
px.zJson = pStr->zBuf;
214023 214112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
px.nJson = pStr->nUsed;
214024 214113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
px.db = sqlite3_context_db_handle(pStr->pCtx);
214025 214114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void)jsonTranslateTextToBlob(&px, 0);
214026 214115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( px.oom ){
@@ -216731,11 +216820,12 @@
216731 216820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
JsonString *pStr;
216732 216821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx));
216733 216822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
216734 216823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStr ){
216735 216824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStr->pCtx = ctx;
216736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- jsonAppendChar(pStr, ']');
216825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jsonAppendRawNZ(pStr, "]", 2);
216826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jsonStringTrimOneChar(pStr);
216737 216827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStr->eErr ){
216738 216828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jsonReturnString(pStr, 0, 0);
216739 216829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
216740 216830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & JSON_BLOB ){
216741 216831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jsonReturnStringAsBlob(pStr);
@@ -216854,11 +216944,12 @@
216854 216944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){
216855 216945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
JsonString *pStr;
216856 216946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx));
216857 216947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
216858 216948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStr ){
216859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- jsonAppendChar(pStr, '}');
216949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jsonAppendRawNZ(pStr, "}", 2);
216950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jsonStringTrimOneChar(pStr);
216860 216951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStr->pCtx = ctx;
216861 216952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStr->eErr ){
216862 216953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jsonReturnString(pStr, 0, 0);
216863 216954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
216864 216955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & JSON_BLOB ){
@@ -259195,11 +259286,11 @@
259195 259286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_VERSION_NUMBER>=3008002
259196 259287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_CORE
259197 259288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_libversion_number()>=3008002 )
259198 259289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
259199 259290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
259200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIdxInfo->estimatedRows = nRow;
259291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->estimatedRows = MAX(1, nRow);
259201 259292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
259202 259293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
259203 259294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
259204 259295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
259205 259296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5UsePatternMatch(
@@ -259264,23 +259355,34 @@
259264 259355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Costs are assigned as follows:
259265 259356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
259266 259357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a) If a MATCH operator is present, the cost depends on the other
259267 259358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** constraints also present. As follows:
259268 259359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
259269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * No other constraints: cost=1000.0
259270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * One rowid range constraint: cost=750.0
259271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * Both rowid range constraints: cost=500.0
259272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * An == rowid constraint: cost=100.0
259360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * No other constraints: cost=50000.0
259361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * One rowid range constraint: cost=37500.0
259362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Both rowid range constraints: cost=30000.0
259363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * An == rowid constraint: cost=25000.0
259273 259364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
259274 259365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** b) Otherwise, if there is no MATCH:
259275 259366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
259276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * No other constraints: cost=1000000.0
259277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * One rowid range constraint: cost=750000.0
259278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * Both rowid range constraints: cost=250000.0
259279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * An == rowid constraint: cost=10.0
259367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * No other constraints: cost=3000000.0
259368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * One rowid range constraints: cost=2250000.0
259369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Both rowid range constraint: cost=750000.0
259370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * An == rowid constraint: cost=25.0
259280 259371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
259281 259372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Costs are not modified by the ORDER BY clause.
259373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
259374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The ratios used in case (a) are based on informal results obtained from
259375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the tool/fts5cost.tcl script. The "MATCH and ==" combination has the
259376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cost set quite high because the query may be a prefix query. Unless
259377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** there is a prefix index, prefix queries with rowid constraints are much
259378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** more expensive than non-prefix queries with rowid constraints.
259379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
259380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The estimated rows returned is set to the cost/40. For simple queries,
259381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** experimental results show that cost/4 might be about right. But for
259382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** more complex queries that use multiple terms the number of rows might
259383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be far fewer than this. So we compromise and use cost/40.
259282 259384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
259283 259385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
259284 259386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Table *pTab = (Fts5Table*)pVTab;
259285 259387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Config *pConfig = pTab->pConfig;
259286 259388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int nCol = pConfig->nCol;
@@ -259402,25 +259504,39 @@
259402 259504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
259403 259505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
259404 259506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
259405 259507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Calculate the estimated cost based on the flags set in idxFlags. */
259406 259508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bSeenEq ){
259407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pInfo->estimatedCost = nSeenMatch ? 1000.0 : 25.0;
259408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5SetUniqueFlag(pInfo);
259509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost = nSeenMatch ? 25000.0 : 25.0;
259409 259510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5SetEstimatedRows(pInfo, 1);
259410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
259411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( bSeenLt && bSeenGt ){
259412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pInfo->estimatedCost = nSeenMatch ? 5000.0 : 750000.0;
259413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( bSeenLt || bSeenGt ){
259414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pInfo->estimatedCost = nSeenMatch ? 7500.0 : 2250000.0;
259415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
259416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pInfo->estimatedCost = nSeenMatch ? 10000.0 : 3000000.0;
259417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
259418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<nSeenMatch; i++){
259419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pInfo->estimatedCost *= 0.4;
259420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
259421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5SetEstimatedRows(pInfo, (i64)(pInfo->estimatedCost / 4.0));
259511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5SetUniqueFlag(pInfo);
259512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
259513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 nEstRows;
259514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nSeenMatch ){
259515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bSeenLt && bSeenGt ){
259516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost = 50000.0;
259517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( bSeenLt || bSeenGt ){
259518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost = 37500.0;
259519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
259520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost = 50000.0;
259521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
259522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEstRows = (i64)(pInfo->estimatedCost / 40.0);
259523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=1; i<nSeenMatch; i++){
259524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost *= 2.5;
259525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEstRows = nEstRows / 2;
259526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
259527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
259528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bSeenLt && bSeenGt ){
259529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost = 750000.0;
259530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( bSeenLt || bSeenGt ){
259531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost = 2250000.0;
259532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
259533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->estimatedCost = 3000000.0;
259534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
259535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEstRows = (i64)(pInfo->estimatedCost / 4.0);
259536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
259537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5SetEstimatedRows(pInfo, nEstRows);
259422 259538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
259423 259539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
259424 259540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pInfo->idxNum = idxFlags;
259425 259541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
259426 259542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -262277,11 +262393,11 @@
262277 262393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg, /* Number of args */
262278 262394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **apUnused /* Function arguments */
262279 262395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
262280 262396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nArg==0 );
262281 262397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAM2(nArg, apUnused);
262282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_text(pCtx, "fts5: 2026-03-18 15:40:26 971aa34b3fd86ba30fe170886d9f83c17159b1638c4bd4fb6cdef79b1c9a88e2", -1, SQLITE_TRANSIENT);
262398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, "fts5: 2026-03-23 12:25:52 1553a60506fa29b5f00535ae0f7aeb8cc94ebe84015386b3248fd8491108fc60", -1, SQLITE_TRANSIENT);
262283 262399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
262284 262400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
262285 262401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
262286 262402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of fts5_locale(LOCALE, TEXT) function.
262287 262403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
262288 262404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!