@@ -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!
- ** 7a0cdc7edb704a88a77b748cd28f6e00c498.
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 7891a266c4425722ae8b9231397ef9e42e24.
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!
#define SQLITE_CORE 1
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_AMALGAMATION 1
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_PRIVATE
26 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_PRIVATE static
@@ -462,11 +462,11 @@
462 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
463 463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
464 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
465 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION "3.47.0"
466 466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION_NUMBER 3047000
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2024-08-16 18:51:46 7a0cdc7edb704a88a77b748cd28f6e00c49849cc2c1af838b95b34232ecc21f9"
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2024-09-02 21:59:31 7891a266c4425722ae8b9231397ef9e42e2432be9e6b70632dfaf9ff15300d2c"
468 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
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!
** CAPI3REF: Run-Time Library Version Numbers
471 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version sqlite3_sourceid
472 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -5929,18 +5929,28 @@
5929 5929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** might become a no-op if the function is used as term in an
5930 5930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [expression index]. On the other hand, SQL functions that never invoke
5931 5931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_result_subtype()] should avoid setting this property, as the
5932 5932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** purpose of this property is to disable certain optimizations that are
5933 5933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** incompatible with subtypes.
5934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
5935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [[SQLITE_SELFORDER1]] <dt>SQLITE_SELFORDER1</dt><dd>
5936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The SQLITE_SELFORDER1 flag indicates that the function is an aggregate
5937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that internally orders the values provided to the first argument. The
5938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ordered-set aggregate SQL notation with a single ORDER BY term can be
5939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used to invoke this function. If the ordered-set aggregate notation is
5940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used on a function that lacks this flag, then an error is raised. Note
5941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that the ordered-set aggregate syntax is only available if SQLite is
5942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** built using the -DSQLITE_ENABLE_ORDERED_SET_AGGREGATES compile-time option.
5934 5943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dd>
5935 5944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dl>
5936 5945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
5937 5946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_DETERMINISTIC 0x000000800
5938 5947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_DIRECTONLY 0x000080000
5939 5948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SUBTYPE 0x000100000
5940 5949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_INNOCUOUS 0x000200000
5941 5950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_RESULT_SUBTYPE 0x001000000
5951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SELFORDER1 0x002000000
5942 5952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
5943 5953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
5944 5954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Deprecated Functions
5945 5955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** DEPRECATED
5946 5956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -7741,13 +7751,15 @@
7741 7751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7742 7752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The estimatedRows value is an estimate of the number of rows that
7743 7753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will be returned by the strategy.
7744 7754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7745 7755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The xBestIndex method may optionally populate the idxFlags field with a
7746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** mask of SQLITE_INDEX_SCAN_* flags. Currently there is only one such flag -
7747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_INDEX_SCAN_UNIQUE. If the xBestIndex method sets this flag, SQLite
7748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** assumes that the strategy may visit at most one row.
7756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mask of SQLITE_INDEX_SCAN_* flags. One such flag is
7757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [SQLITE_INDEX_SCAN_HEX], which if set causes the [EXPLAIN QUERY PLAN]
7758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** output to show the idxNum has hex instead of as decimal. Another flag is
7759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_INDEX_SCAN_UNIQUE, which if set indicates that the query plan will
7760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** return at most one row.
7749 7761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7750 7762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then
7751 7763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite also assumes that if a call to the xUpdate() method is made as
7752 7764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** part of the same statement to delete or update a virtual table row and the
7753 7765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation returns SQLITE_CONSTRAINT, then there is no need to rollback
@@ -7807,11 +7819,13 @@
7807 7819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7808 7820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Virtual table implementations are allowed to set the
7809 7821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_index_info].idxFlags field to some combination of
7810 7822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** these bits.
7811 7823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */
7824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_INDEX_SCAN_UNIQUE 0x00000001 /* Scan visits at most 1 row */
7825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_INDEX_SCAN_HEX 0x00000002 /* Display idxNum as hex */
7826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* in EXPLAIN QUERY PLAN */
7813 7827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7814 7828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
7815 7829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Virtual Table Constraint Operator Codes
7816 7830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7817 7831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These macros define the allowed values for the
@@ -8644,10 +8658,11 @@
8644 8658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_ALWAYS 13
8645 8659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_RESERVE 14 /* NOT USED */
8646 8660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_JSON_SELFCHECK 14
8647 8661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
8648 8662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */
8663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_TESTCTRL_GETOPT 16
8649 8664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
8650 8665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 17
8651 8666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
8652 8667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
8653 8668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
@@ -13418,13 +13433,36 @@
13418 13433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It is the output of the tokenizer module. For tokendata=1 tables, this
13419 13434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** includes any embedded 0x00 and trailing data.
13420 13435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13421 13436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This API can be quite slow if used with an FTS5 table created with the
13422 13437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "detail=none" or "detail=column" option.
13438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xColumnLocale(pFts5, iIdx, pzLocale, pnLocale)
13440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter iCol is less than zero, or greater than or equal to the
13441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** number of columns in the table, SQLITE_RANGE is returned.
13442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, this function attempts to retrieve the locale associated
13444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with column iCol of the current row. Usually, there is no associated
13445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** locale, and output parameters (*pzLocale) and (*pnLocale) are set
13446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to NULL and 0, respectively. However, if the fts5_locale() function
13447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** was used to associate a locale with the value when it was inserted
13448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into the fts5 table, then (*pzLocale) is set to point to a nul-terminated
13449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** buffer containing the name of the locale in utf-8 encoding. (*pnLocale)
13450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is set to the size in bytes of the buffer, not including the
13451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nul-terminator.
13452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If successful, SQLITE_OK is returned. Or, if an error occurs, an
13454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite error code is returned. The final value of the output parameters
13455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is undefined in this case.
13456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xTokenize_v2:
13458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Tokenize text using the tokenizer belonging to the FTS5 table. This
13459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** API is the same as the xTokenize() API, except that it allows a tokenizer
13460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** locale to be specified.
13423 13461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13424 13462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5ExtensionApi {
13425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iVersion; /* Currently always set to 3 */
13463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iVersion; /* Currently always set to 4 */
13426 13464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13427 13465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *(*xUserData)(Fts5Context*);
13428 13466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13429 13467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xColumnCount)(Fts5Context*);
13430 13468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xRowCount)(Fts5Context*, sqlite3_int64 *pnRow);
@@ -13462,10 +13500,19 @@
13462 13500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xQueryToken)(Fts5Context*,
13463 13501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iPhrase, int iToken,
13464 13502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **ppToken, int *pnToken
13465 13503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
13466 13504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*);
13505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Below this point are iVersion>=4 only */
13507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xColumnLocale)(Fts5Context*, int iCol, const char **pz, int *pn);
13508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xTokenize_v2)(Fts5Context*,
13509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText, int nText, /* Text to tokenize */
13510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLocale, int nLocale, /* Locale to pass to tokenizer */
13511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx, /* Context passed to xToken() */
13512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xToken)(void*, int, const char*, int, int, int) /* Callback */
13513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
13467 13514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
13468 13515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13469 13516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
13470 13517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CUSTOM AUXILIARY FUNCTIONS
13471 13518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************/
@@ -13474,19 +13521,20 @@
13474 13521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CUSTOM TOKENIZERS
13475 13522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13476 13523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Applications may also register custom tokenizer types. A tokenizer
13477 13524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is registered by providing fts5 with a populated instance of the
13478 13525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** following structure. All structure methods must be defined, setting
13526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13479 13527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** any member of the fts5_tokenizer struct to NULL leads to undefined
13480 13528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** behaviour. The structure methods are expected to function as follows:
13481 13529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13482 13530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xCreate:
13483 13531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is used to allocate and initialize a tokenizer instance.
13484 13532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A tokenizer instance is required to actually tokenize text.
13485 13533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13486 13534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The first argument passed to this function is a copy of the (void*)
13487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pointer provided by the application when the fts5_tokenizer object
13535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pointer provided by the application when the fts5_tokenizer_v2 object
13488 13536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** was registered with FTS5 (the third argument to xCreateTokenizer()).
13489 13537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The second and third arguments are an array of nul-terminated strings
13490 13538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** containing the tokenizer arguments, if any, specified following the
13491 13539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tokenizer name as part of the CREATE VIRTUAL TABLE statement used
13492 13540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to create the FTS5 table.
@@ -13506,11 +13554,11 @@
13506 13554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is expected to tokenize the nText byte string indicated
13507 13555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by argument pText. pText may or may not be nul-terminated. The first
13508 13556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** argument passed to this function is a pointer to an Fts5Tokenizer object
13509 13557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned by an earlier call to xCreate().
13510 13558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The second argument indicates the reason that FTS5 is requesting
13559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The third argument indicates the reason that FTS5 is requesting
13512 13560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tokenization of the supplied text. This is always one of the following
13513 13561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** four values:
13514 13562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13515 13563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul><li> <b>FTS5_TOKENIZE_DOCUMENT</b> - A document is being inserted into
13516 13564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or removed from the FTS table. The tokenizer is being invoked to
@@ -13529,10 +13577,17 @@
13529 13577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> <b>FTS5_TOKENIZE_AUX</b> - The tokenizer is being invoked to
13530 13578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** satisfy an fts5_api.xTokenize() request made by an auxiliary
13531 13579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function. Or an fts5_api.xColumnSize() request made by the same
13532 13580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on a columnsize=0 database.
13533 13581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
13582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sixth and seventh arguments passed to xTokenize() - pLocale and
13584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nLocale - are a pointer to a buffer containing the locale to use for
13585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tokenization (e.g. "en_US") and its size in bytes, respectively. The
13586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pLocale buffer is not nul-terminated. pLocale may be passed NULL (in
13587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** which case nLocale is always 0) to indicate that the tokenizer should
13588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** use its default locale.
13534 13589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13535 13590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For each token in the input string, the supplied callback xToken() must
13536 13591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be invoked. The first argument to it should be a copy of the pointer
13537 13592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** passed as the second argument to xTokenize(). The third and fourth
13538 13593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** arguments are a pointer to a buffer containing the token text, and the
@@ -13552,10 +13607,34 @@
13552 13607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** immediately return a copy of the xToken() return value. Or, if the
13553 13608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** input buffer is exhausted, xTokenize() should return SQLITE_OK. Finally,
13554 13609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if an error occurs with the xTokenize() implementation itself, it
13555 13610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** may abandon the tokenization and return any error code other than
13556 13611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OK or SQLITE_DONE.
13612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the tokenizer is registered using an fts5_tokenizer_v2 object,
13614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the xTokenize() method has two additional arguments - pLocale
13615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and nLocale. These specify the locale that the tokenizer should use
13616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for the current request. If pLocale and nLocale are both 0, then the
13617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tokenizer should use its default locale. Otherwise, pLocale points to
13618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an nLocale byte buffer containing the name of the locale to use as utf-8
13619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** text. pLocale is not nul-terminated.
13620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FTS5_TOKENIZER
13622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There is also an fts5_tokenizer object. This is an older, deprecated,
13624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version of fts5_tokenizer_v2. It is similar except that:
13625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <ul>
13627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> There is no "iVersion" field, and
13628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> The xTokenize() method does not take a locale argument.
13629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>
13630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Legacy fts5_tokenizer tokenizers must be registered using the
13632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** legacy xCreateTokenizer() function, instead of xCreateTokenizer_v2().
13633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Tokenizer implementations registered using either API may be retrieved
13635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** using both xFindTokenizer() and xFindTokenizer_v2().
13557 13636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13558 13637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SYNONYM SUPPORT
13559 13638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13560 13639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Custom tokenizers may also support synonyms. Consider a case in which a
13561 13640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** user wishes to query for a phrase such as "first place". Using the
@@ -13661,10 +13740,37 @@
13661 13740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** provide synonyms when tokenizing document text (method (3)) or query
13662 13741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** text (method (2)), not both. Doing so will not cause any errors, but is
13663 13742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inefficient.
13664 13743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13665 13744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts5Tokenizer Fts5Tokenizer;
13745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct fts5_tokenizer_v2 fts5_tokenizer_v2;
13746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct fts5_tokenizer_v2 {
13747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iVersion; /* Currently always 2 */
13748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut);
13750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDelete)(Fts5Tokenizer*);
13751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xTokenize)(Fts5Tokenizer*,
13752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx,
13753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int flags, /* Mask of FTS5_TOKENIZE_* flags */
13754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText, int nText,
13755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLocale, int nLocale,
13756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xToken)(
13757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx, /* Copy of 2nd argument to xTokenize() */
13758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tflags, /* Mask of FTS5_TOKEN_* flags */
13759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pToken, /* Pointer to buffer containing token */
13760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nToken, /* Size of token in bytes */
13761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iStart, /* Byte offset of token within input text */
13762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iEnd /* Byte offset of end of token within input text */
13763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
13764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
13765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
13766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
13768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** New code should use the fts5_tokenizer_v2 type to define tokenizer
13769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** implementations. The following type is included for legacy applications
13770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that still use it.
13771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
13666 13772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct fts5_tokenizer fts5_tokenizer;
13667 13773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct fts5_tokenizer {
13668 13774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut);
13669 13775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDelete)(Fts5Tokenizer*);
13670 13776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xTokenize)(Fts5Tokenizer*,
@@ -13679,10 +13785,11 @@
13679 13785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iStart, /* Byte offset of token within input text */
13680 13786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iEnd /* Byte offset of end of token within input text */
13681 13787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
13682 13788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
13683 13789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
13790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13684 13791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13685 13792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Flags that may be passed as the third argument to xTokenize() */
13686 13793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_TOKENIZE_QUERY 0x0001
13687 13794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_TOKENIZE_PREFIX 0x0002
13688 13795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_TOKENIZE_DOCUMENT 0x0004
@@ -13699,11 +13806,11 @@
13699 13806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*************************************************************************
13700 13807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** FTS5 EXTENSION REGISTRATION API
13701 13808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13702 13809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct fts5_api fts5_api;
13703 13810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct fts5_api {
13704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iVersion; /* Currently always set to 2 */
13811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iVersion; /* Currently always set to 3 */
13705 13812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13706 13813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Create a new tokenizer */
13707 13814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xCreateTokenizer)(
13708 13815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_api *pApi,
13709 13816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName,
@@ -13726,10 +13833,29 @@
13726 13833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName,
13727 13834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserData,
13728 13835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_extension_function xFunction,
13729 13836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDestroy)(void*)
13730 13837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
13838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* APIs below this point are only available if iVersion>=3 */
13840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Create a new tokenizer */
13842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xCreateTokenizer_v2)(
13843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_api *pApi,
13844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName,
13845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUserData,
13846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 *pTokenizer,
13847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDestroy)(void*)
13848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
13849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Find an existing tokenizer */
13851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xFindTokenizer_v2)(
13852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_api *pApi,
13853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName,
13854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void **ppUserData,
13855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 **ppTokenizer
13856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
13731 13857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
13732 13858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13733 13859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
13734 13860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** END OF REGISTRATION API
13735 13861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************/
@@ -14703,10 +14829,12 @@
14703 14829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** substitute integer for floating-point
14704 14830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14705 14831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_FLOATING_POINT
14706 14832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define double sqlite_int64
14707 14833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define float sqlite_int64
14834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define fabs(X) ((X)<0?-(X):(X))
14835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3IsOverflow(X) 0
14708 14836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define LONGDOUBLE_TYPE sqlite_int64
14709 14837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# ifndef SQLITE_BIG_DBL
14710 14838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_BIG_DBL (((sqlite3_int64)1)<<50)
14711 14839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# endif
14712 14840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_OMIT_DATETIME_FUNCS 1
@@ -15380,10 +15508,11 @@
15380 15508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct RowSet RowSet;
15381 15509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Savepoint Savepoint;
15382 15510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Select Select;
15383 15511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct SQLiteThread SQLiteThread;
15384 15512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct SelectDest SelectDest;
15513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct Subquery Subquery;
15385 15514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct SrcItem SrcItem;
15386 15515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct SrcList SrcList;
15387 15516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct sqlite3_str StrAccum; /* Internal alias for sqlite3_str */
15388 15517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Table Table;
15389 15518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct TableLock TableLock;
@@ -19263,10 +19392,20 @@
19263 19392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19264 19393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define EU4_NONE 0 /* Does not use IdList.a.u4 */
19265 19394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define EU4_IDX 1 /* Uses IdList.a.u4.idx */
19266 19395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define EU4_EXPR 2 /* Uses IdList.a.u4.pExpr -- NOT CURRENTLY USED */
19267 19396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Details of the implementation of a subquery.
19399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Subquery {
19401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSelect; /* A SELECT statement used in place of a table name */
19402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrFillSub; /* Address of subroutine to initialize a subquery */
19403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regReturn; /* Register holding return address of addrFillSub */
19404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regResult; /* Registers holding results of a co-routine */
19405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
19406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19268 19407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19269 19408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The SrcItem object represents a single term in the FROM clause of a query.
19270 19409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The SrcList object is mostly an array of SrcItems.
19271 19410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19272 19411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The jointype starts out showing the join type between the current table
@@ -19275,33 +19414,44 @@
19275 19414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jointype expresses the join between the table and the previous table.
19276 19415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19277 19416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In the colUsed field, the high-order bit (bit 63) is set if the table
19278 19417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contains more than 63 columns and the 64-th or later column is used.
19279 19418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Union member validity:
19419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Aggressive use of "union" helps keep the size of the object small. This
19420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** has been shown to boost performance, in addition to saving memory.
19421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Access to union elements is gated by the following rules which should
19422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** always be checked, either by an if-statement or by an assert().
19281 19423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
19283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** u1.pFuncArg fg.isTabFunc && !fg.isIndexedBy
19424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Field Only access if this is true
19425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --------------- -----------------------------------
19426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u1.zIndexedBy fg.isIndexedBy
19427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u1.pFuncArg fg.isTabFunc
19284 19428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** u1.nRow !fg.isTabFunc && !fg.isIndexedBy
19285 19429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** u2.pIBIndex fg.isIndexedBy && !fg.isCte
19287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** u2.pCteUse fg.isCte && !fg.isIndexedBy
19430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u2.pIBIndex fg.isIndexedBy
19431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u2.pCteUse fg.isCte
19432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u3.pOn !fg.isUsing
19434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u3.pUsing fg.isUsing
19435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u4.zDatabase !fg.fixedSchema && !fg.isSubquery
19437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u4.pSchema fg.fixedSchema
19438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** u4.pSubq fg.isSubquery
19439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also the sqlite3SrcListDelete() routine for assert() statements that
19441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** check invariants on the fields of this object, especially the flags
19442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** inside the fg struct.
19288 19443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19289 19444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcItem {
19290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Schema *pSchema; /* Schema to which this item is fixed */
19291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zDatabase; /* Name of database holding this table */
19292 19445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName; /* Name of the table */
19293 19446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */
19294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab; /* An SQL table corresponding to zName */
19295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSelect; /* A SELECT statement used in place of a table name */
19296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addrFillSub; /* Address of subroutine to manifest a subquery */
19297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regReturn; /* Register holding return address of addrFillSub */
19298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regResult; /* Registers holding results of a co-routine */
19447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pSTab; /* Table object for zName. Mnemonic: Srcitem-TABle */
19299 19448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct {
19300 19449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 jointype; /* Type of join between this table and the previous */
19301 19450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned notIndexed :1; /* True if there is a NOT INDEXED clause */
19302 19451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isIndexedBy :1; /* True if there is an INDEXED BY clause */
19452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned isSubquery :1; /* True if this term is a subquery */
19303 19453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isTabFunc :1; /* True if table-valued-function syntax */
19304 19454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isCorrelated :1; /* True if sub-query is correlated */
19305 19455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isMaterialized:1; /* This is a materialized view */
19306 19456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned viaCoroutine :1; /* Implemented as a co-routine */
19307 19457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isRecursive :1; /* True for recursive reference in WITH */
@@ -19311,16 +19461,14 @@
19311 19461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isUsing :1; /* u3.pUsing is valid */
19312 19462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isOn :1; /* u3.pOn was once valid and non-NULL */
19313 19463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isSynthUsing :1; /* u3.pUsing is synthesized from NATURAL */
19314 19464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned isNestedFrom :1; /* pSelect is a SF_NestedFrom subquery */
19315 19465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned rowidUsed :1; /* The ROWID of this table is referenced */
19466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned fixedSchema :1; /* Uses u4.pSchema, not u4.zDatabase */
19467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned hadSchema :1; /* Had u4.zDatabase before u4.pSchema */
19316 19468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} fg;
19317 19469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCursor; /* The VDBE cursor number used to access this table */
19318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- union {
19319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *pOn; /* fg.isUsing==0 => The ON clause of a join */
19320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IdList *pUsing; /* fg.isUsing==1 => The USING clause of a join */
19321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } u3;
19322 19470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask colUsed; /* Bit N set if column N used. Details above for N>62 */
19323 19471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
union {
19324 19472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zIndexedBy; /* Identifier from "INDEXED BY <zIndex>" clause */
19325 19473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pFuncArg; /* Arguments to table-valued-function */
19326 19474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 nRow; /* Number of rows in a VALUES clause */
@@ -19327,10 +19475,19 @@
19327 19475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} u1;
19328 19476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
union {
19329 19477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIBIndex; /* Index structure corresponding to u1.zIndexedBy */
19330 19478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CteUse *pCteUse; /* CTE Usage info when fg.isCte is true */
19331 19479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} u2;
19480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ union {
19481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pOn; /* fg.isUsing==0 => The ON clause of a join */
19482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IdList *pUsing; /* fg.isUsing==1 => The USING clause of a join */
19483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } u3;
19484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ union {
19485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Schema *pSchema; /* Schema to which this item is fixed */
19486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zDatabase; /* Name of database holding this table */
19487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq; /* Description of a subquery */
19488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } u4;
19332 19489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
19333 19490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19334 19491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19335 19492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The OnOrUsing object represents either an ON clause or a USING clause.
19336 19493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It can never be both at the same time, but it can be neither.
@@ -19586,12 +19743,14 @@
19586 19743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */
19587 19744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */
19588 19745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */
19589 19746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_Correlated 0x20000000 /* True if references the outer context */
19590 19747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* True if S exists and has SF_NestedFrom */
19592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define IsNestedFrom(S) ((S)!=0 && ((S)->selFlags&SF_NestedFrom)!=0)
19748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* True if SrcItem X is a subquery that has SF_NestedFrom */
19749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IsNestedFrom(X) \
19750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((X)->fg.isSubquery && \
19751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((X)->u4.pSubq->pSelect->selFlags&SF_NestedFrom)!=0)
19593 19752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19594 19753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19595 19754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The results of a SELECT can be distributed in several ways, as defined
19596 19755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by one of the following macros. The "SRT" prefix means "SELECT Result
19597 19756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Type".
@@ -20979,10 +21138,13 @@
20979 21138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE IdList *sqlite3IdListAppend(Parse*, IdList*, Token*);
20980 21139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*);
20981 21140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(Parse*, SrcList*, int, int);
20982 21141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, SrcList *p2);
20983 21142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(Parse*, SrcList*, Token*, Token*);
21143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3SubqueryDelete(sqlite3*,Subquery*);
21144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE Select *sqlite3SubqueryDetach(sqlite3*,SrcItem*);
21145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3SrcItemAttachSubquery(Parse*, SrcItem*, Select*, int);
20984 21146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*,
20985 21147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Token*, Select*, OnOrUsing*);
20986 21148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *);
20987 21149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3SrcListFuncArgs(Parse*, SrcList*, ExprList*);
20988 21150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *, SrcItem *);
@@ -22204,10 +22366,13 @@
22204 22366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_NULL_TRIM
22205 22367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"ENABLE_NULL_TRIM",
22206 22368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22207 22369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
22208 22370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"ENABLE_OFFSET_SQL_FUNC",
22371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
22372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_ORDERED_SET_AGGREGATES
22373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "ENABLE_ORDERED_SET_AGGREGATES",
22209 22374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22210 22375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
22211 22376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"ENABLE_OVERSIZE_CELL_CHECK",
22212 22377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22213 22378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
@@ -24521,12 +24686,12 @@
24521 24686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
24522 24687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( M<=2 ){
24523 24688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Y--;
24524 24689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
M += 12;
24525 24690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
24526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A = Y/100;
24527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- B = 2 - A + (A/4);
24691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ A = (Y+4800)/100;
24692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ B = 38 - A + (A/4);
24528 24693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
X1 = 36525*(Y+4716)/100;
24529 24694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
X2 = 306001*(M+1)/10000;
24530 24695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
24531 24696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->validJD = 1;
24532 24697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->validHMS ){
@@ -24706,11 +24871,11 @@
24706 24871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24707 24872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24708 24873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Compute the Year, Month, and Day from the julian day number.
24709 24874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24710 24875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void computeYMD(DateTime *p){
24711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int Z, A, B, C, D, E, X1;
24876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int Z, alpha, A, B, C, D, E, X1;
24712 24877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->validYMD ) return;
24713 24878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !p->validJD ){
24714 24879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->Y = 2000;
24715 24880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->M = 1;
24716 24881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->D = 1;
@@ -24717,12 +24882,12 @@
24717 24882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( !validJulianDay(p->iJD) ){
24718 24883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
datetimeError(p);
24719 24884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
24720 24885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
24721 24886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Z = (int)((p->iJD + 43200000)/86400000);
24722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A = (int)((Z - 1867216.25)/36524.25);
24723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- A = Z + 1 + A - (A/4);
24887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ alpha = (int)((Z + 32044.75)/36524.25) - 52;
24888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ A = Z + 1 + alpha - ((alpha+100)/4) + 25;
24724 24889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
B = A + 1524;
24725 24890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
C = (int)((B - 122.1)/365.25);
24726 24891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D = (36525*(C&32767))/100;
24727 24892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
E = (int)((B-D)/30.6001);
24728 24893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
X1 = (int)(30.6001*E);
@@ -32017,20 +32182,23 @@
32017 32182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem = va_arg(ap, SrcItem*);
32018 32183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( bArgList==0 );
32019 32184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->zAlias && !flag_altform2 ){
32020 32185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendall(pAccum, pItem->zAlias);
32021 32186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pItem->zName ){
32022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->zDatabase ){
32023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_str_appendall(pAccum, pItem->zDatabase);
32187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.fixedSchema==0
32188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pItem->fg.isSubquery==0
32189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pItem->u4.zDatabase!=0
32190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
32191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_appendall(pAccum, pItem->u4.zDatabase);
32024 32192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_append(pAccum, ".", 1);
32025 32193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32026 32194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendall(pAccum, pItem->zName);
32027 32195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pItem->zAlias ){
32028 32196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendall(pAccum, pItem->zAlias);
32029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
32030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSel = pItem->pSelect;
32031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSel!=0 ); /* Because of tag-20240424-1 */
32197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( ALWAYS(pItem->fg.isSubquery) ){/* Because of tag-20240424-1 */
32198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSel = pItem->u4.pSubq->pSelect;
32199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSel!=0 );
32032 32200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSel->selFlags & SF_NestedFrom ){
32033 32201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(pAccum, "(join-%u)", pSel->selId);
32034 32202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pSel->selFlags & SF_MultiValue ){
32035 32203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !pItem->fg.isTabFunc && !pItem->fg.isIndexedBy );
32036 32204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(pAccum, "%u-ROW VALUES CLAUSE",
@@ -32808,13 +32976,13 @@
32808 32976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n = 0;
32809 32977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zLine[1000];
32810 32978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0);
32811 32979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.printfFlags |= SQLITE_PRINTF_INTERNAL;
32812 32980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem);
32813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pTab ){
32981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->pSTab ){
32814 32982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx%s",
32815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab,
32983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->pSTab->zName, pItem->pSTab->nCol, pItem->pSTab,
32816 32984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->colUsed,
32817 32985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.rowidUsed ? "+rowid" : "");
32818 32986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32819 32987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==(JT_LEFT|JT_RIGHT) ){
32820 32988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&x, " FULL-OUTER-JOIN");
@@ -32841,27 +33009,34 @@
32841 33009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isCorrelated ) sqlite3_str_appendf(&x, " isCorrelated");
32842 33010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isMaterialized ) sqlite3_str_appendf(&x, " isMaterialized");
32843 33011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.viaCoroutine ) sqlite3_str_appendf(&x, " viaCoroutine");
32844 33012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.notCte ) sqlite3_str_appendf(&x, " notCte");
32845 33013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isNestedFrom ) sqlite3_str_appendf(&x, " isNestedFrom");
33014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.fixedSchema ) sqlite3_str_appendf(&x, " fixedSchema");
33015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.hadSchema ) sqlite3_str_appendf(&x, " hadSchema");
33016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ) sqlite3_str_appendf(&x, " isSubquery");
32846 33017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32847 33018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StrAccumFinish(&x);
32848 33019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewItem(pView, zLine, i<pSrc->nSrc-1);
32849 33020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = 0;
32850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect ) n++;
33021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ) n++;
32851 33022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isTabFunc ) n++;
32852 33023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isUsing ) n++;
32853 33024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isUsing ){
32854 33025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewIdList(pView, pItem->u3.pUsing, (--n)>0, "USING");
32855 33026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect ){
32857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pTab ){
32858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pItem->pTab;
33027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ){
33028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( n==1 );
33029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->pSTab ){
33030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pItem->pSTab;
32859 33031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1);
32860 33032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
32862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0);
33033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem) );
33034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewPush(&pView, 0);
33035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewLine(pView, "SUBQUERY");
33036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewPop(&pView);
33037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewSelect(pView, pItem->u4.pSubq->pSelect, 0);
32863 33038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32864 33039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isTabFunc ){
32865 33040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:");
32866 33041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32867 33042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewPop(&pView);
@@ -38721,11 +38896,11 @@
38721 38896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allowed values for the unixFile.ctrlFlags bitmask:
38722 38897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38723 38898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_EXCL 0x01 /* Connections from one process only */
38724 38899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_RDONLY 0x02 /* Connection is read only */
38725 38900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */
38726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_DISABLE_DIRSYNC
38901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(SQLITE_DISABLE_DIRSYNC) && !defined(_AIX)
38727 38902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define UNIXFILE_DIRSYNC 0x08 /* Directory sync needed */
38728 38903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
38729 38904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define UNIXFILE_DIRSYNC 0x00
38730 38905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
38731 38906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */
@@ -76573,11 +76748,11 @@
76573 76748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76574 76749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCur->iPage>0
76575 76750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0
76576 76751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pIdxKey->errCode==SQLITE_OK
76577 76752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
76578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCur->curFlags &= ~BTCF_ValidOvfl;
76753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->curFlags &= ~(BTCF_ValidOvfl|BTCF_AtLast);
76579 76754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pCur->pPage->isInit ){
76580 76755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_CORRUPT_BKPT;
76581 76756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76582 76757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto bypass_moveto_root; /* Start search on the current page */
76583 76758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -95267,11 +95442,11 @@
95267 95442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95268 95443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
95269 95444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95270 95445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
95271 95446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_ANALYZE)
95447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(SQLITE_OMIT_CAST) || !defined(SQLITE_OMIT_ANALYZE)
95273 95448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Cast P1 P2 * * *
95274 95449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: affinity(r[P1])
95275 95450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
95276 95451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Force the value in register P1 to be the type defined by P2.
95277 95452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -102547,10 +102722,15 @@
102547 102722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102548 102723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab && !HasRowid(pTab) ){
102549 102724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = 0;
102550 102725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(&sParse, "cannot open table without rowid: %s", zTable);
102551 102726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab && (pTab->tabFlags&TF_HasGenerated)!=0 ){
102728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = 0;
102729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ErrorMsg(&sParse, "cannot open table with generated columns: %s",
102730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTable);
102731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
102552 102732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIEW
102553 102733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab && IsView(pTab) ){
102554 102734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = 0;
102555 102735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(&sParse, "cannot open view: %s", zTable);
102556 102736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -106731,11 +106911,13 @@
106731 106911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem;
106732 106912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
106733 106913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = p->pSrc;
106734 106914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pSrc) ){
106735 106915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
106736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect && sqlite3WalkSelect(pWalker, pItem->pSelect) ){
106916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery
106917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3WalkSelect(pWalker, pItem->u4.pSubq->pSelect)
106918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
106737 106919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Abort;
106738 106920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106739 106921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isTabFunc
106740 106922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3WalkExprList(pWalker, pItem->u1.pFuncArg)
106741 106923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
@@ -107037,11 +107219,11 @@
107037 107219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
107038 107220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLUMN, 0, 0);
107039 107221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew ){
107040 107222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->iTable = pMatch->iCursor;
107041 107223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->iColumn = iColumn;
107042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->y.pTab = pMatch->pTab;
107224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->y.pTab = pMatch->pSTab;
107043 107225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pMatch->fg.jointype & (JT_LEFT|JT_LTORJ))!=0 );
107044 107226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprSetProperty(pNew, EP_CanBeNull);
107045 107227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppList = sqlite3ExprListAppend(pParse, *ppList, pNew);
107046 107228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107047 107229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -107168,24 +107350,28 @@
107168 107350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pSrcList = pNC->pSrcList;
107169 107351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
107170 107352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrcList ){
107171 107353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
107172 107354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 hCol;
107173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pItem->pTab;
107355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pItem->pSTab;
107174 107356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 && pTab->zName!=0 );
107175 107357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab->nCol>0 || pParse->nErr );
107176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
107358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem));
107177 107359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isNestedFrom ){
107178 107360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* In this case, pItem is a subquery that has been formed from a
107179 107361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parenthesized subset of the FROM clause terms. Example:
107180 107362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ...
107181 107363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** \_________________________/
107182 107364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This pItem -------------^
107183 107365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
107184 107366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int hit = 0;
107185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->pSelect!=0 );
107186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEList = pItem->pSelect->pEList;
107367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSel;
107368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery );
107369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->u4.pSubq!=0 );
107370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSel = pItem->u4.pSubq->pSelect;
107371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSel!=0 );
107372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pEList = pSel->pEList;
107187 107373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pEList!=0 );
107188 107374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pEList->nExpr==pTab->nCol );
107189 107375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<pEList->nExpr; j++){
107190 107376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bRowid = 0; /* True if possible rowid match */
107191 107377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !sqlite3MatchEName(&pEList->a[j], zCol, zTab, zDb, &bRowid) ){
@@ -107305,12 +107491,12 @@
107305 107491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** words non-VIEW candidate terms take precedence over VIEWs.
107306 107492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
107307 107493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cntTab==0
107308 107494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (cntTab==1
107309 107495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& ALWAYS(pMatch!=0)
107310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && ALWAYS(pMatch->pTab!=0)
107311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (pMatch->pTab->tabFlags & TF_Ephemeral)!=0
107496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && ALWAYS(pMatch->pSTab!=0)
107497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pMatch->pSTab->tabFlags & TF_Ephemeral)!=0
107312 107498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pTab->tabFlags & TF_Ephemeral)==0)
107313 107499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
107314 107500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cntTab = 1;
107315 107501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMatch = pItem;
107316 107502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -107327,11 +107513,11 @@
107327 107513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107328 107514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107329 107515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pMatch ){
107330 107516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iTable = pMatch->iCursor;
107331 107517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseYTab(pExpr) );
107332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->y.pTab = pMatch->pTab;
107518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->y.pTab = pMatch->pSTab;
107333 107519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pMatch->fg.jointype & (JT_LEFT|JT_LTORJ))!=0 ){
107334 107520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprSetProperty(pExpr, EP_CanBeNull);
107335 107521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107336 107522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSchema = pExpr->y.pTab->pSchema;
107337 107523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -107369,11 +107555,11 @@
107369 107555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_TRIGGER */
107370 107556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_UPSERT
107371 107557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pNC->ncFlags & NC_UUpsert)!=0 && zTab!=0 ){
107372 107558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Upsert *pUpsert = pNC->uNC.pUpsert;
107373 107559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pUpsert && sqlite3StrICmp("excluded",zTab)==0 ){
107374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pUpsert->pUpsertSrc->a[0].pTab;
107560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pUpsert->pUpsertSrc->a[0].pSTab;
107375 107561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iTable = EXCLUDED_TABLE_NUMBER;
107376 107562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107377 107563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107378 107564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_UPSERT */
107379 107565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -107452,15 +107638,15 @@
107452 107638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cnt==0
107453 107639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& cntTab>=1
107454 107640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pMatch
107455 107641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pNC->ncFlags & (NC_IdxExpr|NC_GenCol))==0
107456 107642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3IsRowid(zCol)
107457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && ALWAYS(VisibleRowid(pMatch->pTab) || pMatch->fg.isNestedFrom)
107643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && ALWAYS(VisibleRowid(pMatch->pSTab) || pMatch->fg.isNestedFrom)
107458 107644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
107459 107645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cnt = cntTab;
107460 107646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_ALLOW_ROWID_IN_VIEW+0==2
107461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pMatch->pTab!=0 && IsView(pMatch->pTab) ){
107647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMatch->pSTab!=0 && IsView(pMatch->pSTab) ){
107462 107648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eNewExprOp = TK_NULL;
107463 107649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107464 107650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
107465 107651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pMatch->fg.isNestedFrom==0 ) pExpr->iColumn = -1;
107466 107652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->affExpr = SQLITE_AFF_INTEGER;
@@ -107693,11 +107879,11 @@
107693 107879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0);
107694 107880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
107695 107881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pSrc->a[iSrc];
107696 107882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
107697 107883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseYTab(p) );
107698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = p->y.pTab = pItem->pTab;
107884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = p->y.pTab = pItem->pSTab;
107699 107885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iTable = pItem->iCursor;
107700 107886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->y.pTab->iPKey==iCol ){
107701 107887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iColumn = -1;
107702 107888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
107703 107889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iColumn = (ynVar)iCol;
@@ -107812,11 +107998,11 @@
107812 107998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem;
107813 107999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrcList && pSrcList->nSrc>=1 );
107814 108000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem = pSrcList->a;
107815 108001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->op = TK_COLUMN;
107816 108002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseYTab(pExpr) );
107817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->y.pTab = pItem->pTab;
108003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->y.pTab = pItem->pSTab;
107818 108004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iTable = pItem->iCursor;
107819 108005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iColumn--;
107820 108006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->affExpr = SQLITE_AFF_INTEGER;
107821 108007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
107822 108008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -108118,13 +108304,13 @@
108118 108304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->pLeft->op==TK_ORDER );
108119 108305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseXList(pExpr->pLeft) );
108120 108306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkExprList(pWalker, pExpr->pLeft->x.pList);
108121 108307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108122 108308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WINDOWFUNC
108123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pWin ){
108309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWin && pParse->nErr==0 ){
108124 108310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSel = pNC->pWinSelect;
108125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pWin==0 || (ExprUseYWin(pExpr) && pWin==pExpr->y.pWin) );
108311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ExprUseYWin(pExpr) && pWin==pExpr->y.pWin );
108126 108312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IN_RENAME_OBJECT==0 ){
108127 108313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WindowUpdate(pParse, pSel ? pSel->pWinDefn : 0, pWin, pDef);
108128 108314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->db->mallocFailed ) break;
108129 108315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108130 108316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkExprList(pWalker, pWin->pPartition);
@@ -108702,11 +108888,15 @@
108702 108888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In this case the ORDER BY clause (p->pOrderBy) should be resolved
108703 108889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as if it were part of the sub-query, not the parent. This block
108704 108890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** moves the pOrderBy down to the sub-query. It will be moved back
108705 108891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** after the names have been resolved. */
108706 108892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_Converted ){
108707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSub = p->pSrc->a[0].pSelect;
108893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSub;
108894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pSrc->a[0].fg.isSubquery );
108895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pSrc->a[0].u4.pSubq!=0 );
108896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = p->pSrc->a[0].u4.pSubq->pSelect;
108897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSub!=0 );
108708 108898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pSrc->nSrc==1 && p->pOrderBy );
108709 108899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSub->pPrior && pSub->pOrderBy==0 );
108710 108900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->pOrderBy = p->pOrderBy;
108711 108901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pOrderBy = 0;
108712 108902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -108714,17 +108904,20 @@
108714 108904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Recursively resolve names in all subqueries in the FROM clause
108715 108905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
108716 108906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOuterNC ) pOuterNC->nNestedSelect++;
108717 108907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->pSrc->nSrc; i++){
108718 108908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &p->pSrc->a[i];
108719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->zName!=0 || pItem->pSelect!=0 );/* Test of tag-20240424-1*/
108720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect && (pItem->pSelect->selFlags & SF_Resolved)==0 ){
108909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->zName!=0
108910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pItem->fg.isSubquery ); /* Test of tag-20240424-1*/
108911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery
108912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pItem->u4.pSubq->pSelect->selFlags & SF_Resolved)==0
108913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
108721 108914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRef = pOuterNC ? pOuterNC->nRef : 0;
108722 108915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSavedContext = pParse->zAuthContext;
108723 108916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108724 108917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->zName ) pParse->zAuthContext = pItem->zName;
108725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC);
108918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ResolveSelectNames(pParse, pItem->u4.pSubq->pSelect, pOuterNC);
108726 108919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = zSavedContext;
108727 108920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ) return WRC_Abort;
108728 108921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->mallocFailed==0 );
108729 108922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108730 108923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the number of references to the outer context changed when
@@ -108822,11 +109015,14 @@
108822 109015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the sub-query back to the parent query. At this point each term
108823 109016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** within the ORDER BY clause has been transformed to an integer value.
108824 109017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These integers will be replaced by copies of the corresponding result
108825 109018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** set expressions by the call to resolveOrderGroupBy() below. */
108826 109019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_Converted ){
108827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSub = p->pSrc->a[0].pSelect;
109020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSub;
109021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pSrc->a[0].fg.isSubquery );
109022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = p->pSrc->a[0].u4.pSubq->pSelect;
109023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSub!=0 );
108828 109024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pOrderBy = pSub->pOrderBy;
108829 109025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->pOrderBy = 0;
108830 109026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108831 109027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108832 109028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Process the ORDER BY clause for singleton SELECT statements.
@@ -109089,11 +109285,11 @@
109089 109285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sNC, 0, sizeof(sNC));
109090 109286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sSrc, 0, sizeof(sSrc));
109091 109287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab ){
109092 109288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSrc.nSrc = 1;
109093 109289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSrc.a[0].zName = pTab->zName;
109094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sSrc.a[0].pTab = pTab;
109290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sSrc.a[0].pSTab = pTab;
109095 109291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSrc.a[0].iCursor = -1;
109096 109292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab->pSchema!=pParse->db->aDb[1].pSchema ){
109097 109293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Cause EP_FromDDL to be set on TK_FUNCTION nodes of non-TEMP
109098 109294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** schema elements */
109099 109295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
type |= NC_FromDDL;
@@ -110986,19 +111182,34 @@
110986 111182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nSrc = pNew->nAlloc = p->nSrc;
110987 111183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nSrc; i++){
110988 111184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pNewItem = &pNew->a[i];
110989 111185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const SrcItem *pOldItem = &p->a[i];
110990 111186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
110991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewItem->pSchema = pOldItem->pSchema;
110992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
111187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewItem->fg = pOldItem->fg;
111188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOldItem->fg.isSubquery ){
111189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pNewSubq = sqlite3DbMallocRaw(db, sizeof(Subquery));
111190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNewSubq==0 ){
111191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( db->mallocFailed );
111192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewItem->fg.isSubquery = 0;
111193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
111194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pNewSubq, pOldItem->u4.pSubq, sizeof(*pNewSubq));
111195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewSubq->pSelect = sqlite3SelectDup(db, pNewSubq->pSelect, flags);
111196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNewSubq->pSelect==0 ){
111197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pNewSubq);
111198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewSubq = 0;
111199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewItem->fg.isSubquery = 0;
111200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewItem->u4.pSubq = pNewSubq;
111203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pOldItem->fg.fixedSchema ){
111204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewItem->u4.pSchema = pOldItem->u4.pSchema;
111205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
111206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewItem->u4.zDatabase = sqlite3DbStrDup(db, pOldItem->u4.zDatabase);
111207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
110993 111208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
110994 111209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
110995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewItem->fg = pOldItem->fg;
110996 111210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->iCursor = pOldItem->iCursor;
110997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewItem->addrFillSub = pOldItem->addrFillSub;
110998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewItem->regReturn = pOldItem->regReturn;
110999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewItem->regResult = pOldItem->regResult;
111000 111211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNewItem->fg.isIndexedBy ){
111001 111212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->u1.zIndexedBy = sqlite3DbStrDup(db, pOldItem->u1.zIndexedBy);
111002 111213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pNewItem->fg.isTabFunc ){
111003 111214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->u1.pFuncArg =
111004 111215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags);
@@ -111007,15 +111218,14 @@
111007 111218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111008 111219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->u2 = pOldItem->u2;
111009 111220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNewItem->fg.isCte ){
111010 111221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->u2.pCteUse->nUse++;
111011 111222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pNewItem->pTab = pOldItem->pTab;
111223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pNewItem->pSTab = pOldItem->pSTab;
111013 111224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab ){
111014 111225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nTabRef++;
111015 111226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags);
111017 111227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOldItem->fg.isUsing ){
111018 111228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNewItem->fg.isUsing );
111019 111229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->u3.pUsing = sqlite3IdListDup(db, pOldItem->u3.pUsing);
111020 111230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
111021 111231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->u3.pOn = sqlite3ExprDup(db, pOldItem->u3.pOn, flags);
@@ -111085,11 +111295,10 @@
111085 111295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111086 111296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp = pNew;
111087 111297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pp = &pNew->pPrior;
111088 111298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNext = pNew;
111089 111299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
111091 111300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pRet;
111092 111301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111093 111302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
111094 111303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, const Select *p, int flags){
111095 111304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p==0 );
@@ -112105,12 +112314,12 @@
112105 112314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pLimit ) return 0; /* Has no LIMIT clause */
112106 112315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pWhere ) return 0; /* Has no WHERE clause */
112107 112316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = p->pSrc;
112108 112317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc!=0 );
112109 112318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->nSrc!=1 ) return 0; /* Single term in FROM clause */
112110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSrc->a[0].pSelect ) return 0; /* FROM is not a subquery or view */
112111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pSrc->a[0].pTab;
112319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSrc->a[0].fg.isSubquery) return 0;/* FROM is not a subquery or view */
112320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pSrc->a[0].pSTab;
112112 112321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
112113 112322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !IsView(pTab) ); /* FROM clause is not a view */
112114 112323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IsVirtual(pTab) ) return 0; /* FROM clause not a virtual table */
112115 112324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEList = p->pEList;
112116 112325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pEList!=0 );
@@ -112289,11 +112498,11 @@
112289 112498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nExpr = pEList->nExpr;
112290 112499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112291 112500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pEList!=0 ); /* Because of isCandidateForInOpt(p) */
112292 112501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pEList->a[0].pExpr!=0 ); /* Because of isCandidateForInOpt(p) */
112293 112502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pSrc!=0 ); /* Because of isCandidateForInOpt(p) */
112294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = p->pSrc->a[0].pTab;
112503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = p->pSrc->a[0].pSTab;
112295 112504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112296 112505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Code an OP_Transaction and OP_TableLock for <table>. */
112297 112506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
112298 112507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb>=0 && iDb<SQLITE_MAX_DB );
112299 112508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3CodeVerifySchema(pParse, iDb);
@@ -117727,12 +117936,13 @@
117727 117936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117728 117937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStep->pFrom ){
117729 117938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
117730 117939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pStep->pFrom->nSrc && rc==SQLITE_OK; i++){
117731 117940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *p = &pStep->pFrom->a[i];
117732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pSelect ){
117733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectPrep(pParse, p->pSelect, 0);
117941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->fg.isSubquery ){
117942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->u4.pSubq!=0 );
117943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectPrep(pParse, p->u4.pSubq->pSelect, 0);
117734 117944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117735 117945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117736 117946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117737 117947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117738 117948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
@@ -117796,12 +118006,16 @@
117796 118006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkExpr(pWalker, pUpsert->pUpsertWhere);
117797 118007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkExpr(pWalker, pUpsert->pUpsertTargetWhere);
117798 118008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117799 118009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStep->pFrom ){
117800 118010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
117801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pStep->pFrom->nSrc; i++){
117802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3WalkSelect(pWalker, pStep->pFrom->a[i].pSelect);
118011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcList *pFrom = pStep->pFrom;
118012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pFrom->nSrc; i++){
118013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFrom->a[i].fg.isSubquery ){
118014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->a[i].u4.pSubq!=0 );
118015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3WalkSelect(pWalker, pFrom->a[i].u4.pSubq->pSelect);
118016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117803 118017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117804 118018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117805 118019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117806 118020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117807 118021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -118044,11 +118258,11 @@
118044 118258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pWalker->pParse->db->mallocFailed );
118045 118259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Abort;
118046 118260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118047 118261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pSrc->nSrc; i++){
118048 118262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pSrc->a[i];
118049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pTab==p->pTab ){
118263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->pSTab==p->pTab ){
118050 118264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
renameTokenFind(pWalker->pParse, p, pItem->zName);
118051 118265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118052 118266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118053 118267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
renameWalkWith(pWalker, pSelect);
118054 118268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -121178,24 +121392,25 @@
121178 121392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb = sqlite3FindDbName(db, pFix->zDb);
121179 121393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pList = pSelect->pSrc;
121180 121394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121181 121395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( NEVER(pList==0) ) return WRC_Continue;
121182 121396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
121183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFix->bTemp==0 ){
121184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->zDatabase ){
121185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iDb!=sqlite3FindDbName(db, pItem->zDatabase) ){
121397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFix->bTemp==0 && pItem->fg.isSubquery==0 ){
121398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.fixedSchema==0 && pItem->u4.zDatabase!=0 ){
121399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iDb!=sqlite3FindDbName(db, pItem->u4.zDatabase) ){
121186 121400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pFix->pParse,
121187 121401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"%s %T cannot reference objects in database %s",
121188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFix->zType, pFix->pName, pItem->zDatabase);
121402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFix->zType, pFix->pName, pItem->u4.zDatabase);
121189 121403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Abort;
121190 121404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, pItem->zDatabase);
121192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->zDatabase = 0;
121405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pItem->u4.zDatabase);
121193 121406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.notCte = 1;
121407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->fg.hadSchema = 1;
121194 121408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pSchema = pFix->pSchema;
121409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->u4.pSchema = pFix->pSchema;
121196 121410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.fromDDL = 1;
121411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->fg.fixedSchema = 1;
121197 121412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121198 121413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
121199 121414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pList->a[i].fg.isUsing==0
121200 121415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3WalkExpr(&pFix->w, pList->a[i].u3.pOn)
121201 121416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
@@ -121484,11 +121699,11 @@
121484 121699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = pParse->pTriggerTab;
121485 121700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
121486 121701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTabList );
121487 121702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iSrc=0; iSrc<pTabList->nSrc; iSrc++){
121488 121703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->iTable==pTabList->a[iSrc].iCursor ){
121489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pTabList->a[iSrc].pTab;
121704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pTabList->a[iSrc].pSTab;
121490 121705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
121491 121706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121492 121707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121493 121708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121494 121709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCol = pExpr->iColumn;
@@ -122087,16 +122302,16 @@
122087 122302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse,
122088 122303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 flags,
122089 122304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *p
122090 122305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
122091 122306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDb;
122092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->pSchema==0 || p->zDatabase==0 );
122093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pSchema ){
122094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iDb = sqlite3SchemaToIndex(pParse->db, p->pSchema);
122307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->fg.fixedSchema ){
122308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDb = sqlite3SchemaToIndex(pParse->db, p->u4.pSchema);
122095 122309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDb = pParse->db->aDb[iDb].zDbSName;
122096 122310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
122097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDb = p->zDatabase;
122311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !p->fg.isSubquery );
122312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDb = p->u4.zDatabase;
122098 122313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
122099 122314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3LocateTable(pParse, flags, p->zName, zDb);
122100 122315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
122101 122316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
122102 122317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -125077,19 +125292,21 @@
125077 125292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
125078 125293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_drop_table;
125079 125294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125080 125295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->nErr==0 );
125081 125296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pName->nSrc==1 );
125297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pName->a[0].fg.fixedSchema==0 );
125298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pName->a[0].fg.isSubquery==0 );
125082 125299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ReadSchema(pParse) ) goto exit_drop_table;
125083 125300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( noErr ) db->suppressErr++;
125084 125301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isView==0 || isView==LOCATE_VIEW );
125085 125302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = sqlite3LocateTableItem(pParse, isView, &pName->a[0]);
125086 125303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( noErr ) db->suppressErr--;
125087 125304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125088 125305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab==0 ){
125089 125306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( noErr ){
125090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
125307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].u4.zDatabase);
125091 125308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ForceNotReadOnly(pParse);
125092 125309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125093 125310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_drop_table;
125094 125311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125095 125312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
@@ -126176,19 +126393,21 @@
126176 126393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
126177 126394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_drop_index;
126178 126395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126179 126396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->nErr==0 ); /* Never called with prior non-OOM errors */
126180 126397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pName->nSrc==1 );
126398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pName->a[0].fg.fixedSchema==0 );
126399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pName->a[0].fg.isSubquery==0 );
126181 126400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
126182 126401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_drop_index;
126183 126402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase);
126403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].u4.zDatabase);
126185 126404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIndex==0 ){
126186 126405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !ifExists ){
126187 126406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "no such index: %S", pName->a);
126188 126407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
126189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
126408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].u4.zDatabase);
126190 126409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ForceNotReadOnly(pParse);
126191 126410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126192 126411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->checkSchema = 1;
126193 126412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_drop_index;
126194 126413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -126481,16 +126700,18 @@
126481 126700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126482 126701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem = &pList->a[pList->nSrc-1];
126483 126702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDatabase && pDatabase->z==0 ){
126484 126703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDatabase = 0;
126485 126704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.fixedSchema==0 );
126706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery==0 );
126486 126707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDatabase ){
126487 126708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->zName = sqlite3NameFromToken(db, pDatabase);
126488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->zDatabase = sqlite3NameFromToken(db, pTable);
126709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->u4.zDatabase = sqlite3NameFromToken(db, pTable);
126489 126710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
126490 126711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->zName = sqlite3NameFromToken(db, pTable);
126491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->zDatabase = 0;
126712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->u4.zDatabase = 0;
126492 126713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126493 126714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pList;
126494 126715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126495 126716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126496 126717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -126502,16 +126723,43 @@
126502 126723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pList || pParse->db->mallocFailed );
126503 126724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pList) ){
126504 126725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
126505 126726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->iCursor>=0 ) continue;
126506 126727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->iCursor = pParse->nTab++;
126507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect ){
126508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc);
126728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ){
126729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->u4.pSubq!=0 );
126730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->u4.pSubq->pSelect!=0 );
126731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->u4.pSubq->pSelect->pSrc!=0 );
126732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SrcListAssignCursors(pParse, pItem->u4.pSubq->pSelect->pSrc);
126509 126733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126510 126734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126511 126735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126512 126736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
126739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Delete a Subquery object and its substructure.
126740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
126741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3SubqueryDelete(sqlite3 *db, Subquery *pSubq){
126742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq!=0 && pSubq->pSelect!=0 );
126743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectDelete(db, pSubq->pSelect);
126744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pSubq);
126745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
126748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Remove a Subquery from a SrcItem. Return the associated Select object.
126749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The returned Select becomes the responsibility of the caller.
126750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
126751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE Select *sqlite3SubqueryDetach(sqlite3 *db, SrcItem *pItem){
126752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSel;
126753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem!=0 );
126754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery );
126755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSel = pItem->u4.pSubq->pSelect;
126756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pItem->u4.pSubq);
126757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->u4.pSubq = 0;
126758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->fg.isSubquery = 0;
126759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pSel;
126760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126513 126761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126514 126762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
126515 126763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete an entire SrcList including all its substructure.
126516 126764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
126517 126765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
@@ -126518,25 +126766,84 @@
126518 126766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
126519 126767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem;
126520 126768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db!=0 );
126521 126769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pList==0 ) return;
126522 126770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
126523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->zDatabase ) sqlite3DbNNFreeNN(db, pItem->zDatabase);
126771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check invariants on SrcItem */
126773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !pItem->fg.isIndexedBy || !pItem->fg.isTabFunc );
126774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !pItem->fg.isCte || !pItem->fg.isIndexedBy );
126775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !pItem->fg.fixedSchema || !pItem->fg.isSubquery );
126776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !pItem->fg.isSubquery || (pItem->u4.pSubq!=0 &&
126777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->u4.pSubq->pSelect!=0) );
126778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126524 126779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->zName ) sqlite3DbNNFreeNN(db, pItem->zName);
126525 126780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->zAlias ) sqlite3DbNNFreeNN(db, pItem->zAlias);
126781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ){
126782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SubqueryDelete(db, pItem->u4.pSubq);
126783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pItem->fg.fixedSchema==0 && pItem->u4.zDatabase!=0 ){
126784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbNNFreeNN(db, pItem->u4.zDatabase);
126785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126526 126786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy);
126527 126787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg);
126528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DeleteTable(db, pItem->pTab);
126529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect ) sqlite3SelectDelete(db, pItem->pSelect);
126788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DeleteTable(db, pItem->pSTab);
126530 126789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isUsing ){
126531 126790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3IdListDelete(db, pItem->u3.pUsing);
126532 126791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pItem->u3.pOn ){
126533 126792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprDelete(db, pItem->u3.pOn);
126534 126793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126535 126794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126536 126795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbNNFreeNN(db, pList);
126537 126796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
126799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Attach a Subquery object to pItem->uv.pSubq. Set the
126800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pSelect value but leave all the other values initialized
126801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to zero.
126802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
126803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A copy of the Select object is made if dupSelect is true, and the
126804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SrcItem takes responsibility for deleting the copy. If dupSelect is
126805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** false, ownership of the Select passes to the SrcItem. Either way,
126806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the SrcItem will take responsibility for deleting the Select.
126807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
126808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When dupSelect is zero, that means the Select might get deleted right
126809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** away if there is an OOM error. Beware.
126810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
126811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return non-zero on success. Return zero on an OOM error.
126812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
126813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3SrcItemAttachSubquery(
126814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parsing context */
126815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcItem *pItem, /* Item to which the subquery is to be attached */
126816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSelect, /* The subquery SELECT. Must be non-NULL */
126817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int dupSelect /* If true, attach a copy of pSelect, not pSelect itself.*/
126818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
126819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *p;
126820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSelect!=0 );
126821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery==0 );
126822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.fixedSchema ){
126823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->u4.pSchema = 0;
126824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->fg.fixedSchema = 0;
126825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pItem->u4.zDatabase!=0 ){
126826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(pParse->db, pItem->u4.zDatabase);
126827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->u4.zDatabase = 0;
126828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( dupSelect ){
126830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSelect = sqlite3SelectDup(pParse->db, pSelect, 0);
126831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSelect==0 ) return 0;
126832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = pItem->u4.pSubq = sqlite3DbMallocRawNN(pParse->db, sizeof(Subquery));
126834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 ){
126835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectDelete(pParse->db, pSelect);
126836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
126837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->fg.isSubquery = 1;
126839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pSelect = pSelect;
126840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( offsetof(Subquery, pSelect)==0 );
126841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(((char*)p)+sizeof(p->pSelect), 0, sizeof(*p)-sizeof(p->pSelect));
126842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
126843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126538 126845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126539 126846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
126540 126847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is called by the parser to add a new term to the
126541 126848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** end of a growing FROM clause. The "p" parameter is the part of
126542 126849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the FROM clause that has already been constructed. "p" is NULL
@@ -126583,14 +126890,16 @@
126583 126890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126584 126891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pAlias!=0 );
126585 126892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pAlias->n ){
126586 126893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->zAlias = sqlite3NameFromToken(db, pAlias);
126587 126894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubquery==0 || pDatabase==0 );
126588 126896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubquery ){
126589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pSelect = pSubquery;
126590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSubquery->selFlags & SF_NestedFrom ){
126591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->fg.isNestedFrom = 1;
126897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3SrcItemAttachSubquery(pParse, pItem, pSubquery, 0) ){
126898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSubquery->selFlags & SF_NestedFrom ){
126899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->fg.isNestedFrom = 1;
126900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126592 126901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126593 126902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126594 126903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOnUsing==0 || pOnUsing->pOn==0 || pOnUsing->pUsing==0 );
126595 126904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem->fg.isUsing==0 );
126596 126905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOnUsing==0 ){
@@ -127864,21 +128173,21 @@
127864 128173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return a pointer. Set an error message and return NULL if the table
127865 128174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name is not found or if any other error occurs.
127866 128175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
127867 128176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following fields are initialized appropriate in pSrc:
127868 128177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
127869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pSrc->a[0].pTab Pointer to the Table object
127870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pSrc->a[0].pIndex Pointer to the INDEXED BY index, if there is one
128178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pSrc->a[0].spTab Pointer to the Table object
128179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pSrc->a[0].u2.pIBIndex Pointer to the INDEXED BY index, if there is one
127871 128180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
127872 128181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
127873 128182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
127874 128183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = pSrc->a;
127875 128184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
127876 128185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem && pSrc->nSrc>=1 );
127877 128186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = sqlite3LocateTableItem(pParse, 0, pItem);
127878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pTab ) sqlite3DeleteTable(pParse->db, pItem->pTab);
127879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pTab = pTab;
128187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->pSTab ) sqlite3DeleteTable(pParse->db, pItem->pSTab);
128188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->pSTab = pTab;
127880 128189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.notCte = 1;
127881 128190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab ){
127882 128191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nTabRef++;
127883 128192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pItem) ){
127884 128193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = 0;
@@ -127996,11 +128305,12 @@
127996 128305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWhere = sqlite3ExprDup(db, pWhere, 0);
127997 128306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrom = sqlite3SrcListAppend(pParse, 0, 0, 0);
127998 128307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFrom ){
127999 128308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFrom->nSrc==1 );
128000 128309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrom->a[0].zName = sqlite3DbStrDup(db, pView->zName);
128001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->a[0].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName);
128310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->a[0].fg.fixedSchema==0 && pFrom->a[0].fg.isSubquery==0 );
128311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFrom->a[0].u4.zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName);
128002 128312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFrom->a[0].fg.isUsing==0 );
128003 128313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFrom->a[0].u3.pOn==0 );
128004 128314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
128005 128315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, pOrderBy,
128006 128316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SF_IncludeHidden, pLimit);
@@ -128058,11 +128368,11 @@
128058 128368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** DELETE FROM table_a WHERE rowid IN (
128059 128369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
128060 128370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** );
128061 128371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
128062 128372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
128063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pSrc->a[0].pTab;
128373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pSrc->a[0].pSTab;
128064 128374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( HasRowid(pTab) ){
128065 128375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLhs = sqlite3PExpr(pParse, TK_ROW, 0, 0);
128066 128376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEList = sqlite3ExprListAppend(
128067 128377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse, 0, sqlite3PExpr(pParse, TK_ROW, 0, 0)
128068 128378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
@@ -128091,13 +128401,13 @@
128091 128401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
128092 128402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
128093 128403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
128094 128404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree
128095 128405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and the SELECT subtree. */
128096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc->a[0].pTab = 0;
128406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->a[0].pSTab = 0;
128097 128407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSelectSrc = sqlite3SrcListDup(db, pSrc, 0);
128098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc->a[0].pTab = pTab;
128408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->a[0].pSTab = pTab;
128099 128409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->a[0].fg.isIndexedBy ){
128100 128410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc->a[0].fg.isCte==0 );
128101 128411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc->a[0].u2.pIBIndex = 0;
128102 128412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc->a[0].fg.isIndexedBy = 0;
128103 128413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, pSrc->a[0].u1.zIndexedBy);
@@ -130920,11 +131230,15 @@
130920 131230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
130921 131231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
130922 131232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** group_concat(EXPR, ?SEPARATOR?)
130923 131233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** string_agg(EXPR, SEPARATOR)
130924 131234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
130925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The SEPARATOR goes before the EXPR string. This is tragic. The
131235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Content is accumulated in GroupConcatCtx.str with the SEPARATOR
131236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** coming before the EXPR value, except for the first entry which
131237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** omits the SEPARATOR.
131238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
131239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It is tragic that the SEPARATOR goes before the EXPR string. The
130926 131240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** groupConcatInverse() implementation would have been easier if the
130927 131241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SEPARATOR were appended after EXPR. And the order is undocumented,
130928 131242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** so we could change it, in theory. But the old behavior has been
130929 131243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** around for so long that we dare not, for fear of breaking something.
130930 131244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -131024,11 +131338,11 @@
131024 131338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
131025 131339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGCC = (GroupConcatCtx*)sqlite3_aggregate_context(context, sizeof(*pGCC));
131026 131340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pGCC is always non-NULL since groupConcatStep() will have always
131027 131341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** run first to initialize it */
131028 131342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pGCC) ){
131029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nVS;
131343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVS; /* Number of characters to remove */
131030 131344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Must call sqlite3_value_text() to convert the argument into text prior
131031 131345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to invoking sqlite3_value_bytes(), in case the text encoding is UTF16 */
131032 131346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void)sqlite3_value_text(argv[0]);
131033 131347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nVS = sqlite3_value_bytes(argv[0]);
131034 131348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGCC->nAccum -= 1;
@@ -132675,13 +132989,13 @@
132675 132989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Create a SrcList structure containing the child table. We need the
132676 132990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** child table as a SrcList for sqlite3WhereBegin() */
132677 132991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
132678 132992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc ){
132679 132993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = pSrc->a;
132680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pTab = pFKey->pFrom;
132994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->pSTab = pFKey->pFrom;
132681 132995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->zName = pFKey->pFrom->zName;
132682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pTab->nTabRef++;
132996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->pSTab->nTabRef++;
132683 132997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->iCursor = pParse->nTab++;
132684 132998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132685 132999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( regNew!=0 ){
132686 133000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1);
132687 133001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -132969,11 +133283,12 @@
132969 133283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132970 133284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
132971 133285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc ){
132972 133286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc->nSrc==1 );
132973 133287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc->a[0].zName = sqlite3DbStrDup(db, zFrom);
132974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc->a[0].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName);
133288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->a[0].fg.fixedSchema==0 && pSrc->a[0].fg.isSubquery==0 );
133289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->a[0].u4.zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName);
132975 133290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132976 133291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSelect = sqlite3SelectNew(pParse,
132977 133292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListAppend(pParse, 0, pRaise),
132978 133293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc,
132979 133294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWhere,
@@ -133703,12 +134018,15 @@
133703 134018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** co-routine.
133704 134019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
133705 134020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal){
133706 134021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pVal) && pVal->pSrc->nSrc>0 ){
133707 134022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pVal->pSrc->a[0];
133708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeEndCoroutine(pParse->pVdbe, pItem->regReturn);
133709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(pParse->pVdbe, pItem->addrFillSub - 1);
134023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pItem->fg.isSubquery && pItem->u4.pSubq!=0) || pParse->nErr );
134024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ){
134025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeEndCoroutine(pParse->pVdbe, pItem->u4.pSubq->regReturn);
134026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(pParse->pVdbe, pItem->u4.pSubq->addrFillSub - 1);
134027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
133710 134028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133711 134029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133712 134030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133713 134031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
133714 134032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if all expressions in the expression-list passed as the
@@ -133832,56 +134150,67 @@
133832 134150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReadSchema(pParse);
133833 134151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133834 134152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133835 134153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRet ){
133836 134154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest dest;
134155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
133837 134156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRet->pSrc->nSrc = 1;
133838 134157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRet->pPrior = pLeft->pPrior;
133839 134158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRet->op = pLeft->op;
133840 134159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRet->pPrior ) pRet->selFlags |= SF_Values;
133841 134160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeft->pPrior = 0;
133842 134161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeft->op = TK_SELECT;
133843 134162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLeft->pNext==0 );
133844 134163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pRet->pNext==0 );
133845 134164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = &pRet->pSrc->a[0];
133846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pSelect = pLeft;
133847 134165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->fg.viaCoroutine = 1;
133848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->addrFillSub = sqlite3VdbeCurrentAddr(v) + 1;
133849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->regReturn = ++pParse->nMem;
133850 134166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iCursor = -1;
134167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !p->fg.isIndexedBy && !p->fg.isTabFunc );
133851 134168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->u1.nRow = 2;
133852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v,OP_InitCoroutine,p->regReturn,0,p->addrFillSub);
133853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectDestInit(&dest, SRT_Coroutine, p->regReturn);
133854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
133855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Allocate registers for the output of the co-routine. Do so so
133856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that there are two unused registers immediately before those
133857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** used by the co-routine. This allows the code in sqlite3Insert()
133858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to use these registers directly, instead of copying the output
133859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the co-routine to a separate array for processing. */
133860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dest.iSdst = pParse->nMem + 3;
133861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dest.nSdst = pLeft->pEList->nExpr;
133862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nMem += 2 + dest.nSdst;
133863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
133864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pLeft->selFlags |= SF_MultiValue;
133865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Select(pParse, pLeft, &dest);
133866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->regResult = dest.iSdst;
133867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pParse->nErr || dest.iSdst>0 );
134169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3SrcItemAttachSubquery(pParse, p, pLeft, 0) ){
134170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = p->u4.pSubq;
134171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->addrFillSub = sqlite3VdbeCurrentAddr(v) + 1;
134172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->regReturn = ++pParse->nMem;
134173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_InitCoroutine,
134174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->regReturn, 0, pSubq->addrFillSub);
134175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectDestInit(&dest, SRT_Coroutine, pSubq->regReturn);
134176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
134177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate registers for the output of the co-routine. Do so so
134178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that there are two unused registers immediately before those
134179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used by the co-routine. This allows the code in sqlite3Insert()
134180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to use these registers directly, instead of copying the output
134181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the co-routine to a separate array for processing. */
134182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dest.iSdst = pParse->nMem + 3;
134183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dest.nSdst = pLeft->pEList->nExpr;
134184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem += 2 + dest.nSdst;
134185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
134186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLeft->selFlags |= SF_MultiValue;
134187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Select(pParse, pLeft, &dest);
134188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->regResult = dest.iSdst;
134189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pParse->nErr || dest.iSdst>0 );
134190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
133868 134191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeft = pRet;
133869 134192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133870 134193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
133871 134194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = &pLeft->pSrc->a[0];
133872 134195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !p->fg.isTabFunc && !p->fg.isIndexedBy );
133873 134196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->u1.nRow++;
133874 134197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133875 134198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133876 134199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr==0 ){
134200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
133877 134201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p!=0 );
133878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pSelect->pEList->nExpr!=pRow->nExpr ){
133879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectWrongNumTermsError(pParse, p->pSelect);
134202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->fg.isSubquery );
134203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = p->u4.pSubq;
134204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq!=0 );
134205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq->pSelect!=0 );
134206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq->pSelect->pEList!=0 );
134207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSubq->pSelect->pEList->nExpr!=pRow->nExpr ){
134208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectWrongNumTermsError(pParse, pSubq->pSelect);
133880 134209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
133881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprCodeExprList(pParse, pRow, p->regResult, 0, 0);
133882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp1(pParse->pVdbe, OP_Yield, p->regReturn);
134210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprCodeExprList(pParse, pRow, pSubq->regResult, 0, 0);
134211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp1(pParse->pVdbe, OP_Yield, pSubq->regReturn);
133883 134212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133884 134213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133885 134214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(pParse->db, pRow);
133886 134215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
133887 134216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -134228,13 +134557,18 @@
134228 134557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSelect->pSrc->nSrc==1
134229 134558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pSelect->pSrc->a[0].fg.viaCoroutine
134230 134559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pSelect->pPrior==0
134231 134560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
134232 134561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pSelect->pSrc->a[0];
134233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dest.iSDParm = pItem->regReturn;
134234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- regFromSelect = pItem->regResult;
134235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nColumn = pItem->pSelect->pEList->nExpr;
134562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
134563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery );
134564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = pItem->u4.pSubq;
134565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dest.iSDParm = pSubq->regReturn;
134566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regFromSelect = pSubq->regResult;
134567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq->pSelect!=0 );
134568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq->pSelect->pEList!=0 );
134569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nColumn = pSubq->pSelect->pEList->nExpr;
134236 134570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlan((pParse, 0, "SCAN %S", pItem));
134237 134571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bIdListInOrder && nColumn==pTab->nCol ){
134238 134572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regData = regFromSelect;
134239 134573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regRowid = regData - 1;
134240 134574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regIns = regRowid - (IsVirtual(pTab) ? 1 : 0);
@@ -136150,11 +136484,11 @@
136150 136484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
136151 136485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(pSelect->pSrc); /* allocated even if there is no FROM clause */
136152 136486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSelect->pSrc->nSrc!=1 ){
136153 136487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0; /* FROM clause must have exactly one term */
136154 136488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
136155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSelect->pSrc->a[0].pSelect ){
136489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSelect->pSrc->a[0].fg.isSubquery ){
136156 136490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0; /* FROM clause cannot contain a subquery */
136157 136491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
136158 136492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSelect->pWhere ){
136159 136493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0; /* SELECT may not have a WHERE clause */
136160 136494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -143448,15 +143782,17 @@
143448 143782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143449 143783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Mark a subquery result column as having been used.
143450 143784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
143451 143785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){
143452 143786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem!=0 );
143453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
143787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem) );
143454 143788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isNestedFrom ){
143455 143789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pResults;
143456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->pSelect!=0 );
143457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pResults = pItem->pSelect->pEList;
143790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery );
143791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->u4.pSubq!=0 );
143792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->u4.pSubq->pSelect!=0 );
143793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pResults = pItem->u4.pSubq->pSelect->pEList;
143458 143794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pResults!=0 );
143459 143795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iCol>=0 && iCol<pResults->nExpr );
143460 143796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pResults->a[iCol].fg.bUsed = 1;
143461 143797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143462 143798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -143486,13 +143822,13 @@
143486 143822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iEnd<pSrc->nSrc );
143487 143823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iStart>=0 );
143488 143824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (piTab==0)==(piCol==0) ); /* Both or neither are NULL */
143489 143825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143490 143826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=iStart; i<=iEnd; i++){
143491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCol = sqlite3ColumnIndex(pSrc->a[i].pTab, zCol);
143827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCol = sqlite3ColumnIndex(pSrc->a[i].pSTab, zCol);
143492 143828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCol>=0
143493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (bIgnoreHidden==0 || IsHiddenColumn(&pSrc->a[i].pTab->aCol[iCol])==0)
143829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (bIgnoreHidden==0 || IsHiddenColumn(&pSrc->a[i].pSTab->aCol[iCol])==0)
143494 143830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
143495 143831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( piTab ){
143496 143832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SrcItemColumnUsed(&pSrc->a[i], iCol);
143497 143833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piTab = i;
143498 143834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piCol = iCol;
@@ -143617,14 +143953,14 @@
143617 143953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143618 143954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = p->pSrc;
143619 143955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeft = &pSrc->a[0];
143620 143956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRight = &pLeft[1];
143621 143957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
143622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pRightTab = pRight->pTab;
143958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pRightTab = pRight->pSTab;
143623 143959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 joinType;
143624 143960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( NEVER(pLeft->pTab==0 || pRightTab==0) ) continue;
143961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NEVER(pLeft->pSTab==0 || pRightTab==0) ) continue;
143626 143962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
joinType = (pRight->fg.jointype & JT_OUTER)!=0 ? EP_OuterON : EP_InnerON;
143627 143963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143628 143964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this is a NATURAL join, synthesize an appropriate USING clause
143629 143965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to specify which columns should be joined.
143630 143966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -145046,12 +145382,16 @@
145046 145382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCol = pExpr->iColumn; /* Index of column in pTab */
145047 145383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pNC && !pTab ){
145048 145384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pTabList = pNC->pSrcList;
145049 145385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
145050 145386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( j<pTabList->nSrc ){
145051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pTabList->a[j].pTab;
145052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pS = pTabList->a[j].pSelect;
145387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pTabList->a[j].pSTab;
145388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTabList->a[j].fg.isSubquery ){
145389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pS = pTabList->a[j].u4.pSubq->pSelect;
145390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
145391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pS = 0;
145392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
145053 145393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
145054 145394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNC = pNC->pNext;
145055 145395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145056 145396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145057 145397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -147099,11 +147439,13 @@
147099 147439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pHaving = substExpr(pSubst, p->pHaving);
147100 147440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pWhere = substExpr(pSubst, p->pWhere);
147101 147441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = p->pSrc;
147102 147442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc!=0 );
147103 147443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
147104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- substSelect(pSubst, pItem->pSelect, 1);
147444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ){
147445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ substSelect(pSubst, pItem->u4.pSubq->pSelect, 1);
147446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
147105 147447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isTabFunc ){
147106 147448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
substExprList(pSubst, pItem->u1.pFuncArg);
147107 147449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147108 147450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147109 147451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( doPrior && (p = p->pPrior)!=0 );
@@ -147130,11 +147472,11 @@
147130 147472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void recomputeColumnsUsed(
147131 147473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSelect, /* The complete SELECT statement */
147132 147474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pSrcItem /* Which FROM clause item to recompute */
147133 147475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
147134 147476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Walker w;
147135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( NEVER(pSrcItem->pTab==0) ) return;
147477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NEVER(pSrcItem->pSTab==0) ) return;
147136 147478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&w, 0, sizeof(w));
147137 147479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xExprCallback = recomputeColumnsUsedExpr;
147138 147480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xSelectCallback = sqlite3SelectWalkNoop;
147139 147481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.u.pSrcItem = pSrcItem;
147140 147482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrcItem->colUsed = 0;
@@ -147170,12 +147512,14 @@
147170 147512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem->iCursor < aCsrMap[0] );
147171 147513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pItem->fg.isRecursive || aCsrMap[pItem->iCursor+1]==0 ){
147172 147514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aCsrMap[pItem->iCursor+1] = pParse->nTab++;
147173 147515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147174 147516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->iCursor = aCsrMap[pItem->iCursor+1];
147175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(p=pItem->pSelect; p; p=p->pPrior){
147176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- srclistRenumberCursors(pParse, aCsrMap, p->pSrc, -1);
147517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ){
147518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(p=pItem->u4.pSubq->pSelect; p; p=p->pPrior){
147519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ srclistRenumberCursors(pParse, aCsrMap, p->pSrc, -1);
147520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
147177 147521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147178 147522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147179 147523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147180 147524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147181 147525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -147482,11 +147826,12 @@
147482 147826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OptimizationDisabled(db, SQLITE_QueryFlattener) ) return 0;
147483 147827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = p->pSrc;
147484 147828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
147485 147829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSubitem = &pSrc->a[iFrom];
147486 147830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iParent = pSubitem->iCursor;
147487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub = pSubitem->pSelect;
147831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubitem->fg.isSubquery );
147832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = pSubitem->u4.pSubq->pSelect;
147488 147833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSub!=0 );
147489 147834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
147490 147835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WINDOWFUNC
147491 147836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */
147492 147837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -147535,11 +147880,11 @@
147535 147880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
147536 147881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also tickets #306, #350, and #3300.
147537 147882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
147538 147883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){
147539 147884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubSrc->nSrc>1 /* (3a) */
147540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || IsVirtual(pSubSrc->a[0].pTab) /* (3b) */
147885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || IsVirtual(pSubSrc->a[0].pSTab) /* (3b) */
147541 147886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (p->selFlags & SF_Distinct)!=0 /* (3d) */
147542 147887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */
147543 147888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
147544 147889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
147545 147890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -147621,18 +147966,22 @@
147621 147966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
147622 147967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==SQLITE_DENY );
147623 147968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = zSavedAuthContext;
147624 147969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
147625 147970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Delete the transient structures associated with the subquery */
147626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub1 = pSubitem->pSelect;
147627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, pSubitem->zDatabase);
147971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
147972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(pSubitem->fg.isSubquery) ){
147973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub1 = sqlite3SubqueryDetach(db, pSubitem);
147974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
147975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub1 = 0;
147976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
147977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubitem->fg.isSubquery==0 );
147978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubitem->fg.fixedSchema==0 );
147628 147979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, pSubitem->zName);
147629 147980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, pSubitem->zAlias);
147630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSubitem->zDatabase = 0;
147631 147981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSubitem->zName = 0;
147632 147982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSubitem->zAlias = 0;
147633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSubitem->pSelect = 0;
147634 147983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSubitem->fg.isUsing!=0 || pSubitem->u3.pOn==0 );
147635 147984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
147636 147985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the sub-query is a compound SELECT statement, then (by restrictions
147637 147986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 17 and 18 above) it must be a UNION ALL and the parent query must
147638 147987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be of the form:
@@ -147669,20 +148018,20 @@
147669 148018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
147670 148019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pNew;
147671 148020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy = p->pOrderBy;
147672 148021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pLimit = p->pLimit;
147673 148022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pPrior = p->pPrior;
147674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pItemTab = pSubitem->pTab;
147675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSubitem->pTab = 0;
148023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pItemTab = pSubitem->pSTab;
148024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubitem->pSTab = 0;
147676 148025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pOrderBy = 0;
147677 148026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = 0;
147678 148027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pLimit = 0;
147679 148028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3SelectDup(db, p, 0);
147680 148029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pLimit = pLimit;
147681 148030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pOrderBy = pOrderBy;
147682 148031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->op = TK_ALL;
147683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSubitem->pTab = pItemTab;
148032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubitem->pSTab = pItemTab;
147684 148033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew==0 ){
147685 148034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = pPrior;
147686 148035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
147687 148036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->selId = ++pParse->nSelect;
147688 148037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aCsrMap && ALWAYS(db->mallocFailed==0) ){
@@ -147693,15 +148042,18 @@
147693 148042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pNext = p;
147694 148043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = pNew;
147695 148044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x4,pParse,p,("compound-subquery flattener"
147696 148045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" creates %u as peer\n",pNew->selId));
147697 148046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSubitem->pSelect==0 );
148047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubitem->fg.isSubquery==0 );
147699 148048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147700 148049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, aCsrMap);
147701 148050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
147702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSubitem->pSelect = pSub1;
148051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubitem->fg.fixedSchema==0 );
148052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubitem->fg.isSubquery==0 );
148053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubitem->u4.zDatabase==0 );
148054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SrcItemAttachSubquery(pParse, pSubitem, pSub1, 0);
147703 148055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
147704 148056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147705 148057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
147706 148058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Defer deleting the Table object associated with the
147707 148059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** subquery until code generation is
@@ -147708,20 +148060,20 @@
147708 148060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** complete, since there may still exist Expr.pTab entries that
147709 148061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** refer to the subquery even after flattening. Ticket #3346.
147710 148062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
147711 148063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pSubitem->pTab is always non-NULL by test restrictions and tests above.
147712 148064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
147713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ALWAYS(pSubitem->pTab!=0) ){
147714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTabToDel = pSubitem->pTab;
148065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(pSubitem->pSTab!=0) ){
148066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTabToDel = pSubitem->pSTab;
147715 148067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTabToDel->nTabRef==1 ){
147716 148068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pToplevel = sqlite3ParseToplevel(pParse);
147717 148069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ParserAddCleanup(pToplevel, sqlite3DeleteTableGeneric, pTabToDel);
147718 148070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pToplevel->earlyCleanup );
147719 148071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
147720 148072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabToDel->nTabRef--;
147721 148073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSubitem->pTab = 0;
148074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubitem->pSTab = 0;
147723 148075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147724 148076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
147725 148077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The following loop runs once for each term in a compound-subquery
147726 148078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** flattening (as described above). If we are doing a different kind
147727 148079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of flattening - a flattening other than a compound-subquery flattening -
@@ -147773,12 +148125,15 @@
147773 148125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Transfer the FROM clause terms from the subquery into the
147774 148126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** outer query.
147775 148127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
147776 148128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nSubSrc; i++){
147777 148129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pSrc->a[i+iFrom];
147778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->fg.isUsing ) sqlite3IdListDelete(db, pItem->u3.pUsing);
147779 148130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem->fg.isTabFunc==0 );
148131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery
148132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pItem->fg.fixedSchema
148133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pItem->u4.zDatabase==0 );
148134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isUsing ) sqlite3IdListDelete(db, pItem->u3.pUsing);
147780 148135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pItem = pSubSrc->a[i];
147781 148136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.jointype |= ltorj;
147782 148137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iNewParent = pSubSrc->a[i].iCursor;
147783 148138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
147784 148139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -148458,14 +148813,14 @@
148458 148813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
148459 148814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem!=0 );
148460 148815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isCorrelated || pItem->fg.isCte ){
148461 148816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
148462 148817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->pTab!=0 );
148464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pItem->pTab;
148465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->pSelect!=0 );
148466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub = pItem->pSelect;
148818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->pSTab!=0 );
148819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pItem->pSTab;
148820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.isSubquery );
148821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = pItem->u4.pSubq->pSelect;
148467 148822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSub->pEList->nExpr==pTab->nCol );
148468 148823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pX=pSub; pX; pX=pX->pPrior){
148469 148824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pX->selFlags & (SF_Distinct|SF_Aggregate))!=0 ){
148470 148825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pX->selFlags & SF_Distinct );
148471 148826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pX->selFlags & SF_Aggregate );
@@ -148590,17 +148945,17 @@
148590 148945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !p->pGroupBy );
148591 148946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
148592 148947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pWhere
148593 148948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->pEList->nExpr!=1
148594 148949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->pSrc->nSrc!=1
148595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || p->pSrc->a[0].pSelect
148950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || p->pSrc->a[0].fg.isSubquery
148596 148951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pAggInfo->nFunc!=1
148597 148952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->pHaving
148598 148953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
148599 148954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
148600 148955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = p->pSrc->a[0].pTab;
148956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = p->pSrc->a[0].pSTab;
148602 148957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
148603 148958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !IsView(pTab) );
148604 148959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !IsOrdinaryTable(pTab) ) return 0;
148605 148960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr = p->pEList->a[0].pExpr;
148606 148961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr!=0 );
@@ -148621,11 +148976,11 @@
148621 148976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** was such a clause and the named index cannot be found, return
148622 148977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_ERROR and leave an error in pParse. Otherwise, populate
148623 148978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pFrom->pIndex and return SQLITE_OK.
148624 148979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
148625 148980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, SrcItem *pFrom){
148626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pFrom->pTab;
148981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pFrom->pSTab;
148627 148982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zIndexedBy = pFrom->u1.zIndexedBy;
148628 148983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx;
148629 148984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
148630 148985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFrom->fg.isIndexedBy!=0 );
148631 148986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -148698,11 +149053,15 @@
148698 149053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db = pParse->db;
148699 149054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
148700 149055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew==0 ) return WRC_Abort;
148701 149056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&dummy, 0, sizeof(dummy));
148702 149057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewSrc = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&dummy,pNew,0);
148703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNewSrc==0 ) return WRC_Abort;
149058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pNewSrc!=0 || pParse->nErr );
149059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nErr ){
149060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SrcListDelete(db, pNewSrc);
149061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Abort;
149062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
148704 149063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pNew = *p;
148705 149064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pSrc = pNewSrc;
148706 149065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ASTERISK, 0));
148707 149066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->op = TK_SELECT;
148708 149067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pWhere = 0;
@@ -148753,11 +149112,11 @@
148753 149112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem, /* FROM clause element to resolve */
148754 149113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
With **ppContext /* OUT: WITH clause return value belongs to */
148755 149114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
148756 149115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = pItem->zName;
148757 149116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
With *p;
148758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->zDatabase==0 );
149117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->fg.fixedSchema || pItem->u4.zDatabase==0 );
148759 149118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zName!=0 );
148760 149119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=pWith; p; p=p->pOuter){
148761 149120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
148762 149121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nCte; i++){
148763 149122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){
@@ -148823,21 +149182,22 @@
148823 149182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pFrom /* The FROM clause term to check */
148824 149183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
148825 149184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Cte *pCte; /* Matched CTE (or NULL if no match) */
148826 149185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
With *pWith; /* The matching WITH */
148827 149186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
148828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->pTab==0 );
149187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->pSTab==0 );
148829 149188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->pWith==0 ){
148830 149189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* There are no WITH clauses in the stack. No match is possible */
148831 149190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
148832 149191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148833 149192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ){
148834 149193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Prior errors might have left pParse->pWith in a goofy state, so
148835 149194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** go no further. */
148836 149195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
148837 149196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFrom->zDatabase!=0 ){
149197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->fg.hadSchema==0 || pFrom->fg.notCte!=0 );
149198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFrom->fg.fixedSchema==0 && pFrom->u4.zDatabase!=0 ){
148839 149199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The FROM term contains a schema qualifier (ex: main.t1) and so
148840 149200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it cannot possibly be a CTE reference. */
148841 149201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
148842 149202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148843 149203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFrom->fg.notCte ){
@@ -148869,11 +149229,11 @@
148869 149229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, pCte->zCteErr, pCte->zName);
148870 149230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 2;
148871 149231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148872 149232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cannotBeFunction(pParse, pFrom) ) return 2;
148873 149233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
148874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->pTab==0 );
149234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->pSTab==0 );
148875 149235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = sqlite3DbMallocZero(db, sizeof(Table));
148876 149236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab==0 ) return 2;
148877 149237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCteUse = pCte->pUse;
148878 149238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCteUse==0 ){
148879 149239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCte->pUse = pCteUse = sqlite3DbMallocZero(db, sizeof(pCteUse[0]));
@@ -148883,42 +149243,47 @@
148883 149243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, pTab);
148884 149244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 2;
148885 149245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148886 149246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCteUse->eM10d = pCte->eM10d;
148887 149247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
148888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->pTab = pTab;
149248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFrom->pSTab = pTab;
148889 149249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nTabRef = 1;
148890 149250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zName = sqlite3DbStrDup(db, pCte->zName);
148891 149251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->iPKey = -1;
148892 149252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
148893 149253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid;
148894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0);
149254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SrcItemAttachSubquery(pParse, pFrom, pCte->pSelect, 1);
148895 149255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) return 2;
148896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->pSelect->selFlags |= SF_CopyCte;
148897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->pSelect );
149256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->fg.isSubquery && pFrom->u4.pSubq );
149257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSel = pFrom->u4.pSubq->pSelect;
149258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSel!=0 );
149259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSel->selFlags |= SF_CopyCte;
148898 149260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFrom->fg.isIndexedBy ){
148899 149261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "no such index: \"%s\"", pFrom->u1.zIndexedBy);
148900 149262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 2;
148901 149263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !pFrom->fg.isIndexedBy );
148902 149265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrom->fg.isCte = 1;
148903 149266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrom->u2.pCteUse = pCteUse;
148904 149267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCteUse->nUse++;
148905 149268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
148906 149269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check if this is a recursive CTE. */
148907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRecTerm = pSel = pFrom->pSelect;
149270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRecTerm = pSel;
148908 149271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bMayRecursive = ( pSel->op==TK_ALL || pSel->op==TK_UNION );
148909 149272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( bMayRecursive && pRecTerm->op==pSel->op ){
148910 149273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
148911 149274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pSrc = pRecTerm->pSrc;
148912 149275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pRecTerm->pPrior!=0 );
148913 149276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pSrc->nSrc; i++){
148914 149277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pSrc->a[i];
148915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->zDatabase==0
148916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pItem->zName!=0
149278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->zName!=0
149279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && !pItem->fg.hadSchema
149280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && ALWAYS( !pItem->fg.isSubquery )
149281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pItem->fg.fixedSchema || pItem->u4.zDatabase==0)
148917 149282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& 0==sqlite3StrICmp(pItem->zName, pCte->zName)
148918 149283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
148919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pTab = pTab;
149284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->pSTab = pTab;
148920 149285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nTabRef++;
148921 149286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.isRecursive = 1;
148922 149287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRecTerm->selFlags & SF_Recursive ){
148923 149288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse,
148924 149289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"multiple references to recursive table: %s", pCte->zName
@@ -149016,15 +149381,18 @@
149016 149381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** allocates and populates the SrcItem.pTab object. If successful,
149017 149382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OK is returned. Otherwise, if an OOM error is encountered,
149018 149383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_NOMEM.
149019 149384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
149020 149385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, SrcItem *pFrom){
149021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSel = pFrom->pSelect;
149386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSel;
149022 149387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
149023 149388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
149389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->fg.isSubquery );
149390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->u4.pSubq!=0 );
149391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSel = pFrom->u4.pSubq->pSelect;
149024 149392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSel );
149025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->pTab = pTab = sqlite3DbMallocZero(pParse->db, sizeof(Table));
149393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFrom->pSTab = pTab = sqlite3DbMallocZero(pParse->db, sizeof(Table));
149026 149394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab==0 ) return SQLITE_NOMEM;
149027 149395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nTabRef = 1;
149028 149396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFrom->zAlias ){
149029 149397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zName = sqlite3DbStrDup(pParse->db, pFrom->zAlias);
149030 149398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -149140,37 +149508,39 @@
149140 149508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an entry of the FROM clause is a subquery instead of a table or view,
149141 149509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then create a transient table structure to describe the subquery.
149142 149510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
149143 149511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
149144 149512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
149145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->fg.isRecursive==0 || pFrom->pTab!=0 );
149146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFrom->pTab ) continue;
149513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->fg.isRecursive==0 || pFrom->pSTab!=0 );
149514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFrom->pSTab ) continue;
149147 149515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFrom->fg.isRecursive==0 );
149148 149516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFrom->zName==0 ){
149149 149517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_SUBQUERY
149150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSel = pFrom->pSelect;
149518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSel;
149519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->fg.isSubquery && pFrom->u4.pSubq!=0 );
149520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSel = pFrom->u4.pSubq->pSelect;
149151 149521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A sub-query in the FROM clause of a SELECT */
149152 149522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSel!=0 );
149153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->pTab==0 );
149523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->pSTab==0 );
149154 149524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort;
149155 149525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ExpandSubquery(pParse, pFrom) ) return WRC_Abort;
149156 149526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
149157 149527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_CTE
149158 149528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( (rc = resolveFromTermToCte(pParse, pWalker, pFrom))!=0 ){
149159 149529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc>1 ) return WRC_Abort;
149160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pFrom->pTab;
149530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pFrom->pSTab;
149161 149531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
149162 149532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
149163 149533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
149164 149534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* An ordinary table or view name in the FROM clause */
149165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->pTab==0 );
149166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->pTab = pTab = sqlite3LocateTableItem(pParse, 0, pFrom);
149535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->pSTab==0 );
149536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFrom->pSTab = pTab = sqlite3LocateTableItem(pParse, 0, pFrom);
149167 149537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab==0 ) return WRC_Abort;
149168 149538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab->nTabRef>=0xffff ){
149169 149539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "too many references to \"%s\": max 65535",
149170 149540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zName);
149171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->pTab = 0;
149541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFrom->pSTab = 0;
149172 149542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Abort;
149173 149543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149174 149544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nTabRef++;
149175 149545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !IsVirtual(pTab) && cannotBeFunction(pParse, pFrom) ){
149176 149546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Abort;
@@ -149178,19 +149548,19 @@
149178 149548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
149179 149549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !IsOrdinaryTable(pTab) ){
149180 149550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 nCol;
149181 149551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 eCodeOrig = pWalker->eCode;
149182 149552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
149183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->pSelect==0 );
149553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->fg.isSubquery==0 );
149184 149554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IsView(pTab) ){
149185 149555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (db->flags & SQLITE_EnableView)==0
149186 149556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pTab->pSchema!=db->aDb[1].pSchema
149187 149557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
149188 149558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "access to view \"%s\" prohibited",
149189 149559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zName);
149190 149560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrom->pSelect = sqlite3SelectDup(db, pTab->u.view.pSelect, 0);
149561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SrcItemAttachSubquery(pParse, pFrom, pTab->u.view.pSelect, 1);
149192 149562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149193 149563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
149194 149564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( ALWAYS(IsVirtual(pTab))
149195 149565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pFrom->fg.fromDDL
149196 149566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& ALWAYS(pTab->u.vtab.p!=0)
@@ -149202,11 +149572,13 @@
149202 149572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( SQLITE_VTABRISK_Normal==1 && SQLITE_VTABRISK_High==2 );
149203 149573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
149204 149574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCol = pTab->nCol;
149205 149575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nCol = -1;
149206 149576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWalker->eCode = 1; /* Turn on Select.selId renumbering */
149207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3WalkSelect(pWalker, pFrom->pSelect);
149577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFrom->fg.isSubquery ){
149578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3WalkSelect(pWalker, pFrom->u4.pSubq->pSelect);
149579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
149208 149580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWalker->eCode = eCodeOrig;
149209 149581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nCol = nCol;
149210 149582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149211 149583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
149212 149584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -149289,11 +149661,11 @@
149289 149661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseWOfst(pE) );
149290 149662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iErrOfst = pE->w.iOfst;
149291 149663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149292 149664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
149293 149665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nAdd; /* Number of cols including rowid */
149294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pFrom->pTab; /* Table for this data source */
149666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pFrom->pSTab; /* Table for this data source */
149295 149667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pNestedFrom; /* Result-set of a nested FROM clause */
149296 149668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zTabName; /* AS name for this data source */
149297 149669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSchemaName = 0; /* Schema name for this data source */
149298 149670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb; /* Schema index for this data src */
149299 149671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IdList *pUsing; /* USING clause for pFrom[1] */
@@ -149300,14 +149672,15 @@
149300 149672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
149301 149673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (zTabName = pFrom->zAlias)==0 ){
149302 149674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTabName = pTab->zName;
149303 149675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149304 149676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) break;
149305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) );
149677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom) );
149306 149678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFrom->fg.isNestedFrom ){
149307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->pSelect!=0 );
149308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNestedFrom = pFrom->pSelect->pEList;
149679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->fg.isSubquery && pFrom->u4.pSubq );
149680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->u4.pSubq->pSelect!=0 );
149681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNestedFrom = pFrom->u4.pSubq->pSelect->pEList;
149309 149682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNestedFrom!=0 );
149310 149683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNestedFrom->nExpr==pTab->nCol );
149311 149684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( VisibleRowid(pTab)==0 || ViewCanHaveRowid );
149312 149685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
149313 149686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
@@ -149542,18 +149915,16 @@
149542 149915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->selFlags |= SF_HasTypeInfo;
149543 149916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse = pWalker->pParse;
149544 149917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (p->selFlags & SF_Resolved) );
149545 149918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList = p->pSrc;
149546 149919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
149547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pFrom->pTab;
149920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pFrom->pSTab;
149548 149921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
149549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pTab->tabFlags & TF_Ephemeral)!=0 ){
149922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pTab->tabFlags & TF_Ephemeral)!=0 && pFrom->fg.isSubquery ){
149550 149923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A sub-query in the FROM clause of a SELECT */
149551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSel = pFrom->pSelect;
149552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSel ){
149553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SubqueryColumnTypes(pParse, pTab, pSel, SQLITE_AFF_NONE);
149554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
149924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSel = pFrom->u4.pSubq->pSelect;
149925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SubqueryColumnTypes(pParse, pTab, pSel, SQLITE_AFF_NONE);
149555 149926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149556 149927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149557 149928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149558 149929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
149559 149930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -149863,10 +150234,11 @@
149863 150234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
149864 150235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func *pF;
149865 150236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
149866 150237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pList;
149867 150238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseXList(pF->pFExpr) );
150239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nErr ) return;
149868 150240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pList = pF->pFExpr->x.pList;
149869 150241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pF->iOBTab>=0 ){
149870 150242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* For an ORDER BY aggregate, calls to OP_AggStep were deferred. Inputs
149871 150243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** were stored in emphermal table pF->iOBTab. Here, we extract those
149872 150244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inputs (in ORDER BY order) and make all calls to OP_AggStep
@@ -150072,19 +150444,21 @@
150072 150444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempRange(pParse, regAgg, nArg);
150073 150445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150074 150446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( addrNext ){
150075 150447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, addrNext);
150076 150448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nErr ) return;
150077 150450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150078 150451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( regHit==0 && pAggInfo->nAccumulator ){
150079 150452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regHit = regAcc;
150080 150453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150081 150454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( regHit ){
150082 150455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v);
150083 150456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150084 150457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
150085 150458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCode(pParse, pC->pCExpr, AggInfoColumnReg(pAggInfo,i));
150459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nErr ) return;
150086 150460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150087 150461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150088 150462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->directMode = 0;
150089 150463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( addrHitTest ){
150090 150464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHereOrPopInst(v, addrHitTest);
@@ -150196,29 +150570,32 @@
150196 150570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pTabList, /* Search for self-joins in this FROM clause */
150197 150571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pThis, /* Search for prior reference to this subquery */
150198 150572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iFirst, int iEnd /* Range of FROM-clause entries to search. */
150199 150573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
150200 150574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem;
150201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pThis->pSelect!=0 );
150202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pThis->pSelect->selFlags & SF_PushDown ) return 0;
150575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSel;
150576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pThis->fg.isSubquery );
150577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSel = pThis->u4.pSubq->pSelect;
150578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSel!=0 );
150579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSel->selFlags & SF_PushDown ) return 0;
150203 150580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( iFirst<iEnd ){
150204 150581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pS1;
150205 150582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem = &pTabList->a[iFirst++];
150206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect==0 ) continue;
150583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pItem->fg.isSubquery ) continue;
150207 150584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.viaCoroutine ) continue;
150208 150585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->zName==0 ) continue;
150209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->pTab!=0 );
150210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pThis->pTab!=0 );
150211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pTab->pSchema!=pThis->pTab->pSchema ) continue;
150586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->pSTab!=0 );
150587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pThis->pSTab!=0 );
150588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->pSTab->pSchema!=pThis->pSTab->pSchema ) continue;
150212 150589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_stricmp(pItem->zName, pThis->zName)!=0 ) continue;
150213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pS1 = pItem->pSelect;
150214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pTab->pSchema==0 && pThis->pSelect->selId!=pS1->selId ){
150590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pS1 = pItem->u4.pSubq->pSelect;
150591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->pSTab->pSchema==0 && pSel->selId!=pS1->selId ){
150215 150592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The query flattener left two different CTE tables with identical
150216 150593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** names in the same FROM clause. */
150217 150594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
150218 150595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect->selFlags & SF_PushDown ){
150596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pS1->selFlags & SF_PushDown ){
150220 150597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The view was modified by some other optimization such as
150221 150598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pushDownWhereTerms() */
150222 150599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
150223 150600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150224 150601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pItem;
@@ -150258,10 +150635,11 @@
150258 150635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int countOfViewOptimization(Parse *pParse, Select *p){
150259 150636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSub, *pPrior;
150260 150637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr;
150261 150638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pCount;
150262 150639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db;
150640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcItem *pFrom;
150263 150641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate */
150264 150642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pEList->nExpr!=1 ) return 0; /* Single result column */
150265 150643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pWhere ) return 0;
150266 150644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pHaving ) return 0;
150267 150645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pGroupBy ) return 0;
@@ -150272,30 +150650,30 @@
150272 150650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0; /* Is count() */
150273 150651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseXList(pExpr) );
150274 150652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->x.pList!=0 ) return 0; /* Must be count(*) */
150275 150653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pSrc->nSrc!=1 ) return 0; /* One table in FROM */
150276 150654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExprHasProperty(pExpr, EP_WinFunc) ) return 0;/* Not a window function */
150277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub = p->pSrc->a[0].pSelect;
150278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSub==0 ) return 0; /* The FROM is a subquery */
150655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFrom = p->pSrc->a;
150656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFrom->fg.isSubquery==0 ) return 0; /* FROM is a subquery */
150657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = pFrom->u4.pSubq->pSelect;
150279 150658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSub->pPrior==0 ) return 0; /* Must be a compound */
150280 150659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSub->selFlags & SF_CopyCte ) return 0; /* Not a CTE */
150281 150660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
150282 150661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */
150283 150662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSub->pWhere ) return 0; /* No WHERE clause */
150284 150663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSub->pLimit ) return 0; /* No LIMIT clause */
150285 150664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSub->selFlags & SF_Aggregate ) return 0; /* Not an aggregate */
150286 150665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSub->pHaving==0 ); /* Due to the previous */
150287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub = pSub->pPrior; /* Repeat over compound */
150666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = pSub->pPrior; /* Repeat over compound */
150288 150667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( pSub );
150289 150668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150290 150669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If we reach this point then it is OK to perform the transformation */
150291 150670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150292 150671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db = pParse->db;
150293 150672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCount = pExpr;
150294 150673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr = 0;
150295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub = p->pSrc->a[0].pSelect;
150296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pSrc->a[0].pSelect = 0;
150674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = sqlite3SubqueryDetach(db, pFrom);
150297 150675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SrcListDelete(db, p->pSrc);
150298 150676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*p->pSrc));
150299 150677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pSub ){
150300 150678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pTerm;
150301 150679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrior = pSub->pPrior;
@@ -150336,16 +150714,16 @@
150336 150714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sameSrcAlias(SrcItem *p0, SrcList *pSrc){
150337 150715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
150338 150716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pSrc->nSrc; i++){
150339 150717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *p1 = &pSrc->a[i];
150340 150718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p1==p0 ) continue;
150341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p0->pTab==p1->pTab && 0==sqlite3_stricmp(p0->zAlias, p1->zAlias) ){
150719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p0->pSTab==p1->pSTab && 0==sqlite3_stricmp(p0->zAlias, p1->zAlias) ){
150342 150720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
150343 150721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p1->pSelect
150345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (p1->pSelect->selFlags & SF_NestedFrom)!=0
150346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && sameSrcAlias(p0, p1->pSelect->pSrc)
150722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p1->fg.isSubquery
150723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (p1->u4.pSubq->pSelect->selFlags & SF_NestedFrom)!=0
150724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sameSrcAlias(p0, p1->u4.pSubq->pSelect->pSrc)
150347 150725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
150348 150726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
150349 150727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150350 150728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150351 150729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
@@ -150406,17 +150784,17 @@
150406 150784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( 1 /*exit-by-break*/ ){
150407 150785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.jointype & (JT_OUTER|JT_CROSS) ) return 0; /* (1c-ii) */
150408 150786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i==0 ) break;
150409 150787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i--;
150410 150788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem--;
150411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->pSelect!=0 ) return 0; /* (1c-i) */
150789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery ) return 0; /* (1c-i) */
150412 150790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150413 150791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
150414 150792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150415 150793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150416 150794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
150417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Generate code for the SELECT statement given in the p argument.
150795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Generate byte-code for the SELECT statement given in the p argument.
150418 150796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
150419 150797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The results are returned according to the SelectDest structure.
150420 150798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See comments in sqliteInt.h for further information.
150421 150799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
150422 150800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine returns the number of errors. If any errors are
@@ -150423,10 +150801,44 @@
150423 150801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** encountered, then an appropriate error message is left in
150424 150802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pParse->zErrMsg.
150425 150803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
150426 150804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine does NOT free the Select structure passed in. The
150427 150805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** calling function needs to do that.
150806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
150807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is a long function. The following is an outline of the processing
150808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** steps, with tags referencing various milestones:
150809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
150810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Resolve names and similar preparation tag-select-0100
150811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Scan of the FROM clause tag-select-0200
150812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + OUTER JOIN strength reduction tag-select-0220
150813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + Sub-query ORDER BY removal tag-select-0230
150814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + Query flattening tag-select-0240
150815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Separate subroutine for compound-SELECT tag-select-0300
150816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * WHERE-clause constant propagation tag-select-0330
150817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Count()-of-VIEW optimization tag-select-0350
150818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Scan of the FROM clause again tag-select-0400
150819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + Authorize unreferenced tables tag-select-0410
150820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + Predicate push-down optimization tag-select-0420
150821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + Omit unused subquery columns optimization tag-select-0440
150822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + Generate code to implement subqueries tag-select-0480
150823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - Co-routines tag-select-0482
150824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - Reuse previously computed CTE tag-select-0484
150825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - REuse previously computed VIEW tag-select-0486
150826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - Materialize a VIEW or CTE tag-select-0488
150827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * DISTINCT ORDER BY -> GROUP BY optimization tag-select-0500
150828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Set up for ORDER BY tag-select-0600
150829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Create output table tag-select-0630
150830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Prepare registers for LIMIT tag-select-0650
150831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Setup for DISTINCT tag-select-0680
150832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Generate code for non-aggregate and non-GROUP BY tag-select-0700
150833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Generate code for aggregate and/or GROUP BY tag-select-0800
150834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + GROUP BY queries tag-select-0810
150835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** + non-GROUP BY queries tag-select-0820
150836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - Special case of count() w/o GROUP BY tag-select-0821
150837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - General case of non-GROUP BY aggregates tag-select-0822
150838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Sort results, as needed tag-select-0900
150839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Internal self-checks tag-select-1000
150428 150840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150429 150841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Select(
150430 150842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* The parser context */
150431 150843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *p, /* The SELECT statement being coded. */
150432 150844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest *pDest /* What to do with the query results */
@@ -150466,10 +150878,11 @@
150466 150878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150467 150879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ShowSelect(p);
150468 150880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150469 150881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150470 150882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* tag-select-0100 */
150471 150884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistFifo );
150472 150885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pOrderBy==0 || pDest->eDest!=SRT_Fifo );
150473 150886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistQueue );
150474 150887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pOrderBy==0 || pDest->eDest!=SRT_Queue );
150475 150888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IgnorableDistinct(pDest) ){
@@ -150517,11 +150930,11 @@
150517 150930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_UFSrcCheck ){
150518 150931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *p0 = &p->pSrc->a[0];
150519 150932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sameSrcAlias(p0, p->pSrc) ){
150520 150933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse,
150521 150934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"target object/alias may not appear in FROM clause: %s",
150522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p0->zAlias ? p0->zAlias : p0->pTab->zName
150935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p0->zAlias ? p0->zAlias : p0->pSTab->zName
150523 150936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
150524 150937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto select_end;
150525 150938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150526 150939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150527 150940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Clear the SF_UFSrcCheck flag. The check has already been performed,
@@ -150552,16 +150965,17 @@
150552 150965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sSort, 0, sizeof(sSort));
150553 150966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSort.pOrderBy = p->pOrderBy;
150554 150967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150555 150968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Try to do various optimizations (flattening subqueries, and strength
150556 150969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reduction of join operators) in the FROM clause up into the main query
150970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tag-select-0200
150557 150971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150558 150972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
150559 150973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
150560 150974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pTabList->a[i];
150561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSub = pItem->pSelect;
150562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pItem->pTab;
150975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSub = pItem->fg.isSubquery ? pItem->u4.pSubq->pSelect : 0;
150976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pItem->pSTab;
150563 150977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150564 150978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The expander should have already created transient Table objects
150565 150979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** even for FROM clause elements such as subqueries that do not correspond
150566 150980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to a real table */
150567 150981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
@@ -150574,10 +150988,11 @@
150574 150988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
150575 150989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If terms of the i-th table are used in the WHERE clause in such a
150576 150990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** way that the i-th table cannot be the NULL row of a join, then
150577 150991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** perform the appropriate simplification. This is called
150578 150992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "OUTER JOIN strength reduction" in the SQLite documentation.
150993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tag-select-0220
150579 150994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150580 150995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pItem->fg.jointype & (JT_LEFT|JT_LTORJ))!=0
150581 150996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor,
150582 150997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.jointype & JT_LTORJ)
150583 150998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& OptimizationEnabled(db, SQLITE_SimplifyJoin)
@@ -150644,11 +151059,12 @@
150644 151059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** flattening in that case.
150645 151060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150646 151061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pSub->selFlags & SF_Aggregate)!=0 ) continue;
150647 151062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSub->pGroupBy==0 );
150648 151063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If a FROM-clause subquery has an ORDER BY clause that is not
151064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* tag-select-0230:
151065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If a FROM-clause subquery has an ORDER BY clause that is not
150650 151066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** really doing anything, then delete it now so that it does not
150651 151067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interfere with query flattening. See the discussion at
150652 151068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** https://sqlite.org/forum/forumpost/2d76f2bcf65d256a
150653 151069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
150654 151070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Beware of these cases where the ORDER BY clause may not be safely
@@ -150710,10 +151126,11 @@
150710 151126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0)
150711 151127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
150712 151128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
150713 151129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150714 151130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* tag-select-0240 */
150715 151132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flattenSubquery(pParse, p, i, isAgg) ){
150716 151133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ) goto select_end;
150717 151134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This subquery can be absorbed into its parent. */
150718 151135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = -1;
150719 151136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -150725,11 +151142,11 @@
150725 151142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150726 151143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150727 151144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150728 151145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_COMPOUND_SELECT
150729 151146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Handle compound SELECT statements using the separate multiSelect()
150730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** procedure.
151147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** procedure. tag-select-0300
150731 151148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150732 151149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pPrior ){
150733 151150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = multiSelect(pParse, p, pDest);
150734 151151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
150735 151152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x400,pParse,p,("end compound-select processing\n"));
@@ -150741,13 +151158,13 @@
150741 151158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
150742 151159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150743 151160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150744 151161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150745 151162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Do the WHERE-clause constant propagation optimization if this is
150746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a join. No need to speed time on this operation for non-join queries
151163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a join. No need to spend time on this operation for non-join queries
150747 151164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as the equivalent optimization will be handled by query planner in
150748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3WhereBegin().
151165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3WhereBegin(). tag-select-0330
150749 151166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150750 151167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pWhere!=0
150751 151168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& p->pWhere->op==TK_AND
150752 151169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& OptimizationEnabled(db, SQLITE_PropagateConst)
150753 151170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& propagateConstants(pParse, p)
@@ -150760,31 +151177,38 @@
150760 151177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150761 151178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
150762 151179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x2000,pParse,p,("Constant propagation not helpful\n"));
150763 151180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150764 151181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* tag-select-0350 */
150765 151183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView)
150766 151184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& countOfViewOptimization(pParse, p)
150767 151185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
150768 151186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) goto select_end;
150769 151187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList = p->pSrc;
150770 151188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150771 151189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* For each term in the FROM clause, do two things:
150773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (1) Authorized unreferenced tables
150774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (2) Generate code for all sub-queries
151190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Loop over all terms in the FROM clause and do two things for each term:
151191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
151192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (1) Authorize unreferenced tables
151193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (2) Generate code for all sub-queries
151194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
151195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tag-select-0400
150775 151196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150776 151197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pTabList->nSrc; i++){
150777 151198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pTabList->a[i];
150778 151199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pPrior;
150779 151200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest dest;
151201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
150780 151202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSub;
150781 151203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
150782 151204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSavedAuthContext;
150783 151205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150784 151206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Issue SQLITE_READ authorizations with a fake column name for any
151207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Authorized unreferenced tables. tag-select-0410
151208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
151209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Issue SQLITE_READ authorizations with a fake column name for any
150786 151210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tables that are referenced but from which no values are extracted.
150787 151211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Examples of where these kinds of null SQLITE_READ authorizations
150788 151212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** would occur:
150789 151213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
150790 151214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT count(*) FROM t1; -- SQLITE_READ t1.""
@@ -150797,21 +151221,32 @@
150797 151221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** which would be unambiguous. But legacy authorization callbacks might
150798 151222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** assume the column name is non-NULL and segfault. The use of an empty
150799 151223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** string for the fake column name seems safer.
150800 151224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150801 151225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->colUsed==0 && pItem->zName!=0 ){
150802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", pItem->zDatabase);
151226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zDb;
151227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.fixedSchema ){
151228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDb = sqlite3SchemaToIndex(pParse->db, pItem->u4.pSchema);
151229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDb = db->aDb[iDb].zDbSName;
151230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pItem->fg.isSubquery ){
151231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDb = 0;
151232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
151233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDb = pItem->u4.zDatabase;
151234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
151235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", zDb);
150803 151236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150804 151237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150805 151238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
150806 151239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate code for all sub-queries in the FROM clause
150807 151240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub = pItem->pSelect;
150809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSub==0 || pItem->addrFillSub!=0 ) continue;
151241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isSubquery==0 ) continue;
151242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = pItem->u4.pSubq;
151243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq!=0 );
151244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub = pSubq->pSelect;
150810 151245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150811 151246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The code for a subquery should only be generated once. */
150812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->addrFillSub==0 );
151247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSubq->addrFillSub!=0 ) continue;
150813 151248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150814 151249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Increment Parse.nHeight by the height of the largest expression
150815 151250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tree referred to by this, the parent select. The child select
150816 151251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** may contain expression trees of at most
150817 151252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
@@ -150820,10 +151255,11 @@
150820 151255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150821 151256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nHeight += sqlite3SelectExprHeight(p);
150822 151257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150823 151258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Make copies of constant WHERE-clause terms in the outer query down
150824 151259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inside the subquery. This can help the subquery to run more efficiently.
151260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is the "predicate push-down optimization". tag-select-0420
150825 151261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150826 151262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OptimizationEnabled(db, SQLITE_PushDown)
150827 151263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pItem->fg.isCte==0
150828 151264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pItem->u2.pCteUse->eM10d!=M10d_Yes && pItem->u2.pCteUse->nUse<2))
150829 151265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pushDownWhereTerms(pParse, pSub, p->pWhere, pTabList, i)
@@ -150833,17 +151269,18 @@
150833 151269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x4000,pParse,p,
150834 151270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
("After WHERE-clause push-down into subquery %d:\n", pSub->selId));
150835 151271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
150836 151272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150837 151273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
151274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq->pSelect && (pSub->selFlags & SF_PushDown)!=0 );
150839 151275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
150840 151276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x4000,pParse,p,("WHERE-lcause push-down not possible\n"));
150841 151277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150842 151278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150843 151279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Convert unused result columns of the subquery into simple NULL
150844 151280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expressions, to avoid unneeded searching and computation.
151281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tag-select-0440
150845 151282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150846 151283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OptimizationEnabled(db, SQLITE_NullUnusedCols)
150847 151284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& disableUnusedSubqueryResultColumns(pItem)
150848 151285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
150849 151286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
@@ -150857,64 +151294,70 @@
150857 151294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150858 151295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150859 151296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSavedAuthContext = pParse->zAuthContext;
150860 151297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = pItem->zName;
150861 151298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Generate code to implement the subquery
151299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Generate byte-code to implement the subquery tag-select-0480
150863 151300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150864 151301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fromClauseTermCanBeCoroutine(pParse, pTabList, i, p->selFlags) ){
150865 151302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Implement a co-routine that will return a single row of the result
150866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** set on each invocation.
151303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set on each invocation. tag-select-0482
150867 151304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
150868 151305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrTop = sqlite3VdbeCurrentAddr(v)+1;
150869 151306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->regReturn = ++pParse->nMem;
150871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop);
151307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->regReturn = ++pParse->nMem;
151308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_InitCoroutine, pSubq->regReturn, 0, addrTop);
150872 151309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%!S", pItem));
150873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->addrFillSub = addrTop;
150874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn);
151310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->addrFillSub = addrTop;
151311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectDestInit(&dest, SRT_Coroutine, pSubq->regReturn);
150875 151312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlan((pParse, 1, "CO-ROUTINE %!S", pItem));
150876 151313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Select(pParse, pSub, &dest);
150877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pTab->nRowLogEst = pSub->nSelectRow;
151314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->pSTab->nRowLogEst = pSub->nSelectRow;
150878 151315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.viaCoroutine = 1;
150879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->regResult = dest.iSdst;
150880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeEndCoroutine(v, pItem->regReturn);
151316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->regResult = dest.iSdst;
151317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeEndCoroutine(v, pSubq->regReturn);
151318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "end %!S", pItem));
150881 151319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addrTop-1);
150882 151320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ClearTempRegCache(pParse);
150883 151321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){
150884 151322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This is a CTE for which materialization code has already been
150885 151323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** generated. Invoke the subroutine to compute the materialization,
150886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the make the pItem->iCursor be a copy of the ephemeral table that
150887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** holds the result of the materialization. */
151324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then make the pItem->iCursor be a copy of the ephemeral table that
151325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** holds the result of the materialization. tag-select-0484 */
150888 151326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CteUse *pCteUse = pItem->u2.pCteUse;
150889 151327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Gosub, pCteUse->regRtn, pCteUse->addrM9e);
150890 151328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->iCursor!=pCteUse->iCur ){
150891 151329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pCteUse->iCur);
150892 151330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%!S", pItem));
150893 151331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150894 151332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->nSelectRow = pCteUse->nRowEst;
150895 151333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( (pPrior = isSelfJoinView(pTabList, pItem, 0, i))!=0 ){
150896 151334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This view has already been materialized by a prior entry in
150897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this same FROM clause. Reuse it. */
150898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pPrior->addrFillSub ){
150899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Gosub, pPrior->regReturn, pPrior->addrFillSub);
151335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this same FROM clause. Reuse it. tag-select-0486 */
151336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pPriorSubq;
151337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPrior->fg.isSubquery );
151338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPriorSubq = pPrior->u4.pSubq;
151339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPriorSubq!=0 );
151340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pPriorSubq->addrFillSub ){
151341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Gosub, pPriorSubq->regReturn,
151342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPriorSubq->addrFillSub);
150900 151343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150901 151344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor);
150902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSub->nSelectRow = pPrior->pSelect->nSelectRow;
151345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSub->nSelectRow = pPriorSubq->pSelect->nSelectRow;
150903 151346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
150904 151347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Materialize the view. If the view is not correlated, generate a
150905 151348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** subroutine to do the materialization so that subsequent uses of
150906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the same view can reuse the materialization. */
151349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the same view can reuse the materialization. tag-select-0488 */
150907 151350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int topAddr;
150908 151351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int onceAddr = 0;
150909 151352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
150910 151353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrExplain;
150911 151354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150912 151355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->regReturn = ++pParse->nMem;
151356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->regReturn = ++pParse->nMem;
150914 151357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
topAddr = sqlite3VdbeAddOp0(v, OP_Goto);
150915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->addrFillSub = topAddr+1;
151358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->addrFillSub = topAddr+1;
150916 151359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.isMaterialized = 1;
150917 151360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isCorrelated==0 ){
150918 151361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the subquery is not correlated and if we are not inside of
150919 151362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a trigger, then we only need to compute the value of the subquery
150920 151363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** once. */
@@ -150925,21 +151368,21 @@
150925 151368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150926 151369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
150927 151370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150928 151371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlan2(addrExplain, (pParse, 1, "MATERIALIZE %!S", pItem));
150929 151372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Select(pParse, pSub, &dest);
150930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->pTab->nRowLogEst = pSub->nSelectRow;
151373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->pSTab->nRowLogEst = pSub->nSelectRow;
150931 151374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
150932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Return, pItem->regReturn, topAddr+1);
151375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Return, pSubq->regReturn, topAddr+1);
150933 151376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "end %!S", pItem));
150934 151377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
150935 151378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, topAddr);
150936 151379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ClearTempRegCache(pParse);
150937 151380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){
150938 151381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CteUse *pCteUse = pItem->u2.pCteUse;
150939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCteUse->addrM9e = pItem->addrFillSub;
150940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCteUse->regRtn = pItem->regReturn;
151382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCteUse->addrM9e = pSubq->addrFillSub;
151383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCteUse->regRtn = pSubq->regReturn;
150941 151384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCteUse->iCur = pItem->iCursor;
150942 151385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCteUse->nRowEst = pSub->nSelectRow;
150943 151386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150944 151387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150945 151388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) goto select_end;
@@ -150961,11 +151404,13 @@
150961 151404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x8000,pParse,p,("After all FROM-clause analysis:\n"));
150962 151405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
150963 151406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
150964 151407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
150965 151408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and
151409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* tag-select-0500
151410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
151411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the query is DISTINCT with an ORDER BY but is not an aggregate, and
150967 151412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if the select-list is the same as the ORDER BY list, then this query
150968 151413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can be rewritten as a GROUP BY. In other words, this:
150969 151414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
150970 151415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT DISTINCT xyz FROM ... ORDER BY xyz
150971 151416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -151011,11 +151456,11 @@
151011 151456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** do the sorting. But this sorting ephemeral index might end up
151012 151457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** being unused if the data can be extracted in pre-sorted order.
151013 151458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If that is the case, then the OP_OpenEphemeral instruction will be
151014 151459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** changed to an OP_Noop once we figure out that the sorting index is
151015 151460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not needed. The sSort.addrSortIndex variable is used to facilitate
151016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that change.
151461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that change. tag-select-0600
151017 151462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
151018 151463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sSort.pOrderBy ){
151019 151464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo;
151020 151465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pKeyInfo = sqlite3KeyInfoFromExprList(
151021 151466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse, sSort.pOrderBy, 0, pEList->nExpr);
@@ -151028,10 +151473,11 @@
151028 151473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
151029 151474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSort.addrSortIndex = -1;
151030 151475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151031 151476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151032 151477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the output is destined for a temporary table, open that table.
151478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tag-select-0630
151033 151479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
151034 151480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDest->eDest==SRT_EphemTab ){
151035 151481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iSDParm, pEList->nExpr);
151036 151482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_NestedFrom ){
151037 151483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Delete or NULL-out result columns that will never be used */
@@ -151045,11 +151491,11 @@
151045 151491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pEList->a[ii].fg.bUsed==0 ) pEList->a[ii].pExpr->op = TK_NULL;
151046 151492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151047 151493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151048 151494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151049 151495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Set the limiter.
151496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Set the limiter. tag-select-0650
151051 151497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
151052 151498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iEnd = sqlite3VdbeMakeLabel(pParse);
151053 151499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (p->selFlags & SF_FixedLimit)==0 ){
151054 151500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nSelectRow = 320; /* 4 billion rows */
151055 151501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -151057,11 +151503,11 @@
151057 151503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->iLimit==0 && sSort.addrSortIndex>=0 ){
151058 151504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen);
151059 151505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSort.sortFlags |= SORTFLAG_UseSorter;
151060 151506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151061 151507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Open an ephemeral index to use for the distinct set.
151508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Open an ephemeral index to use for the distinct set. tag-select-0680
151063 151509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
151064 151510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_Distinct ){
151065 151511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.tabTnct = pParse->nTab++;
151066 151512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
151067 151513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.tabTnct, 0, 0,
@@ -151072,11 +151518,11 @@
151072 151518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
151073 151519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.eTnctType = WHERE_DISTINCT_NOOP;
151074 151520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151075 151521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151076 151522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isAgg && pGroupBy==0 ){
151077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* No aggregate functions and no GROUP BY clause */
151523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* No aggregate functions and no GROUP BY clause. tag-select-0700 */
151078 151524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0)
151079 151525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
| (p->selFlags & SF_FixedLimit);
151080 151526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WINDOWFUNC
151081 151527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Window *pWin = p->pWin; /* Main window object (or NULL) */
151082 151528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWin ){
@@ -151145,12 +151591,12 @@
151145 151591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
151146 151592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x2,pParse,p,("WhereEnd\n"));
151147 151593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereEnd(pWInfo);
151148 151594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151149 151595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
151150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* This case when there exist aggregate functions or a GROUP BY clause
151151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or both */
151596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This case is for when there exist aggregate functions or a GROUP BY
151597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** clause or both. tag-select-0800 */
151152 151598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NameContext sNC; /* Name context for processing aggregate information */
151153 151599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iAMem; /* First Mem address for storing current GROUP BY */
151154 151600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iBMem; /* First Mem address for previous GROUP BY */
151155 151601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iUseFlag; /* Mem address holding flag indicating that at least
151156 151602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** one row of the input to the aggregator has been
@@ -151265,11 +151711,11 @@
151265 151711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151266 151712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
151267 151713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151268 151714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151269 151715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Processing for aggregates with GROUP BY is very different and
151270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** much more complex than aggregates without a GROUP BY.
151716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** much more complex than aggregates without a GROUP BY. tag-select-0810
151271 151717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
151272 151718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pGroupBy ){
151273 151719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo; /* Keying information for the group by clause */
151274 151720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addr1; /* A-vs-B comparison jump */
151275 151721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrOutputRow; /* Start of subroutine that outputs a result row */
@@ -151562,13 +152008,16 @@
151562 152008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func *pF = &pAggInfo->aFunc[0];
151563 152009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr);
151564 152010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151565 152011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} /* endif pGroupBy. Begin aggregate queries without GROUP BY: */
151566 152012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else {
152013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Aggregate functions without GROUP BY. tag-select-0820 */
151567 152014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
151568 152015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){
151569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If isSimpleCount() returns a pointer to a Table structure, then
152016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* tag-select-0821
152017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
152018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If isSimpleCount() returns a pointer to a Table structure, then
151570 152019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the SQL statement is of the form:
151571 152020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
151572 152021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT count(*) FROM <tbl>
151573 152022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
151574 152023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** where the Table structure returned represents table <tbl>.
@@ -151623,10 +152072,12 @@
151623 152072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assignAggregateRegisters(pParse, pAggInfo);
151624 152073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Count, iCsr, AggInfoFuncReg(pAggInfo,0));
151625 152074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, iCsr);
151626 152075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
explainSimpleCount(pParse, pTab, pBest);
151627 152076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
152077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The general case of an aggregate query without GROUP BY
152078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tag-select-0822 */
151628 152079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regAcc = 0; /* "populate accumulators" flag */
151629 152080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pDistinct = 0;
151630 152081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 distFlag = 0;
151631 152082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eDist;
151632 152083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -151711,11 +152162,11 @@
151711 152162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sDistinct.eTnctType==WHERE_DISTINCT_UNORDERED ){
151712 152163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
explainTempTable(pParse, "DISTINCT");
151713 152164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151714 152165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151715 152166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is an ORDER BY clause, then we need to sort the results
151716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and send them to the callback one by one.
152167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and send them to the callback one by one. tag-select-0900
151717 152168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
151718 152169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sSort.pOrderBy ){
151719 152170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pEList==pEList );
151720 152171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest);
151721 152172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -151734,10 +152185,11 @@
151734 152185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
select_end:
151735 152186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->mallocFailed==0 || db->mallocFailed==1 );
151736 152187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->mallocFailed==0 || pParse->nErr!=0 );
151737 152188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(db, pMinMaxOrderBy);
151738 152189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
152190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Internal self-checks. tag-select-1000 */
151739 152191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pAggInfo && !db->mallocFailed ){
151740 152192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
151741 152193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3TreeTrace & 0x20 ){
151742 152194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TREETRACE(0x20,pParse,p,("Finished with AggInfo\n"));
151743 152195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printAggInfo(pAggInfo);
@@ -152123,12 +152575,14 @@
152123 152575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
152124 152576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** To maintain backwards compatibility, ignore the database
152125 152577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name on pTableName if we are reparsing out of the schema table
152126 152578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
152127 152579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->init.busy && iDb!=1 ){
152128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, pTableName->a[0].zDatabase);
152129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTableName->a[0].zDatabase = 0;
152580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTableName->a[0].fg.fixedSchema==0 );
152581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTableName->a[0].fg.isSubquery==0 );
152582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pTableName->a[0].u4.zDatabase);
152583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTableName->a[0].u4.zDatabase = 0;
152130 152584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
152131 152585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
152132 152586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the trigger name was unqualified, and the table is a temp table,
152133 152587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then set iDb to 1 to create the trigger in the temporary database.
152134 152588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If sqlite3SrcListLookup() returns 0, indicating the table does not
@@ -152602,11 +153056,12 @@
152602 153056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
152603 153057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto drop_trigger_cleanup;
152604 153058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
152605 153059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
152606 153060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pName->nSrc==1 );
152607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDb = pName->a[0].zDatabase;
153061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pName->a[0].fg.fixedSchema==0 && pName->a[0].fg.isSubquery==0 );
153062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDb = pName->a[0].u4.zDatabase;
152608 153063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = pName->a[0].zName;
152609 153064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
152610 153065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=OMIT_TEMPDB; i<db->nDb; i++){
152611 153066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
152612 153067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zDb && sqlite3DbIsNamed(db, j, zDb)==0 ) continue;
@@ -152839,11 +153294,13 @@
152839 153294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zName || pSrc==0 );
152840 153295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc ){
152841 153296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Schema *pSchema = pStep->pTrig->pSchema;
152842 153297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc->a[0].zName = zName;
152843 153298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSchema!=db->aDb[1].pSchema ){
152844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc->a[0].pSchema = pSchema;
153299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->a[0].fg.fixedSchema || pSrc->a[0].u4.zDatabase==0 );
153300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->a[0].u4.pSchema = pSchema;
153301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->a[0].fg.fixedSchema = 1;
152845 153302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
152846 153303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStep->pFrom ){
152847 153304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pDup = sqlite3SrcListDup(db, pStep->pFrom, 0);
152848 153305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDup && pDup->nSrc>1 && !IN_RENAME_OBJECT ){
152849 153306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSubquery;
@@ -152952,11 +153409,11 @@
152952 153409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pSrc;
152953 153410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSelect!=0 );
152954 153411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = pSelect->pSrc;
152955 153412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc!=0 );
152956 153413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pSrc->nSrc; i++){
152957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSrc->a[i].pTab==pWalker->u.pTab ){
153414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSrc->a[i].pSTab==pWalker->u.pTab ){
152958 153415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pSelect->selFlags & SF_Correlated );
152959 153416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSelect->selFlags |= SF_Correlated;
152960 153417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWalker->eCode = 1;
152961 153418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
152962 153419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -153023,11 +153480,11 @@
153023 153480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sSelect, 0, sizeof(sSelect));
153024 153481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sFrom, 0, sizeof(sFrom));
153025 153482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSelect.pEList = sqlite3ExprListDup(db, pReturning->pReturnEL, 0);
153026 153483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSelect.pSrc = &sFrom;
153027 153484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sFrom.nSrc = 1;
153028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sFrom.a[0].pTab = pTab;
153485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sFrom.a[0].pSTab = pTab;
153029 153486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sFrom.a[0].zName = pTab->zName; /* tag-20240424-1 */
153030 153487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sFrom.a[0].iCursor = -1;
153031 153488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectPrep(pParse, &sSelect, 0);
153032 153489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr==0 ){
153033 153490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->mallocFailed==0 );
@@ -153734,11 +154191,11 @@
153734 154191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pList = 0;
153735 154192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pGrp = 0;
153736 154193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pLimit2 = 0;
153737 154194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy2 = 0;
153738 154195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db;
153739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pTabList->a[0].pTab;
154196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pTabList->a[0].pSTab;
153740 154197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pSrc;
153741 154198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pWhere2;
153742 154199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eDest;
153743 154200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
153744 154201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
@@ -153758,12 +154215,12 @@
153758 154215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
153759 154216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTabList->nSrc>1 );
153760 154217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc ){
153761 154218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc->a[0].fg.notCte );
153762 154219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc->a[0].iCursor = -1;
153763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc->a[0].pTab->nTabRef--;
153764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc->a[0].pTab = 0;
154220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->a[0].pSTab->nTabRef--;
154221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->a[0].pSTab = 0;
153765 154222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153766 154223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPk ){
153767 154224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pPk->nKeyCol; i++){
153768 154225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pNew = exprRowColumn(pParse, pPk->aiColumn[i]);
153769 154226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
@@ -155007,11 +155464,11 @@
155007 155464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NameContext sNC; /* Context for resolving symbolic names */
155008 155465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr sCol[2]; /* Index column converted into an Expr */
155009 155466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nClause = 0; /* Counter of ON CONFLICT clauses */
155010 155467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155011 155468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTabList->nSrc==1 );
155012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pTabList->a[0].pTab!=0 );
155469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTabList->a[0].pSTab!=0 );
155013 155470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pUpsert!=0 );
155014 155471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pUpsert->pUpsertTarget!=0 );
155015 155472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155016 155473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Resolve all symbolic names in the conflict-target clause, which
155017 155474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** includes both the list of columns and the optional partial-index
@@ -155026,11 +155483,11 @@
155026 155483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) return rc;
155027 155484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere);
155028 155485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) return rc;
155029 155486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155030 155487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check to see if the conflict target matches the rowid. */
155031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pTabList->a[0].pTab;
155488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pTabList->a[0].pSTab;
155032 155489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTarget = pUpsert->pUpsertTarget;
155033 155490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCursor = pTabList->a[0].iCursor;
155034 155491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( HasRowid(pTab)
155035 155492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pTarget->nExpr==1
155036 155493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pTerm = pTarget->a[0].pExpr)->op==TK_COLUMN
@@ -155397,10 +155854,13 @@
155397 155854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRes; /* Bytes of reserved space at the end of each page */
155398 155855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDb; /* Number of attached databases */
155399 155856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDbMain; /* Schema name of database to vacuum */
155400 155857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zOut; /* Name of output file */
155401 155858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 pgflags = PAGER_SYNCHRONOUS_OFF; /* sync flags for output db */
155859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 iRandom; /* Random value used for zDbVacuum[] */
155860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char zDbVacuum[42]; /* Name of the ATTACH-ed database used for vacuum */
155861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
155402 155862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155403 155863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db->autoCommit ){
155404 155864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
155405 155865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR; /* IMP: R-12218-18073 */
155406 155866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -155437,31 +155897,33 @@
155437 155897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155438 155898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDbMain = db->aDb[iDb].zDbSName;
155439 155899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMain = db->aDb[iDb].pBt;
155440 155900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain));
155441 155901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Attach the temporary database as 'vacuum_db'. The synchronous pragma
155902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Attach the temporary database as 'vacuum_XXXXXX'. The synchronous pragma
155443 155903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can be set to 'off' for this file, as it is not recovered if a crash
155444 155904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** occurs anyway. The integrity of the database is maintained by a
155445 155905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (possibly synchronous) transaction opened on the main database before
155446 155906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3BtreeCopyFile() is called.
155447 155907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
155448 155908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An optimization would be to use a non-journaled pager.
155449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but
155909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (Later:) I tried setting "PRAGMA vacuum_XXXXXX.journal_mode=OFF" but
155450 155910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that actually made the VACUUM run slower. Very little journalling
155451 155911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** actually occurs when doing a vacuum since the vacuum_db is initially
155452 155912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** empty. Only the journal header is written. Apparently it takes more
155453 155913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** time to parse and run the PRAGMA to turn journalling off than it does
155454 155914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to write the journal header file.
155455 155915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
155916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_randomness(sizeof(iRandom),&iRandom);
155917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_snprintf(sizeof(zDbVacuum), zDbVacuum, "vacuum_%016llx", iRandom);
155456 155918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nDb = db->nDb;
155457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = execSqlF(db, pzErrMsg, "ATTACH %Q AS vacuum_db", zOut);
155919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = execSqlF(db, pzErrMsg, "ATTACH %Q AS %s", zOut, zDbVacuum);
155458 155920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->openFlags = saved_openFlags;
155459 155921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) goto end_of_vacuum;
155460 155922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (db->nDb-1)==nDb );
155461 155923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDb = &db->aDb[nDb];
155462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( strcmp(pDb->zDbSName,"vacuum_db")==0 );
155924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( strcmp(pDb->zDbSName,zDbVacuum)==0 );
155463 155925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTemp = pDb->pBt;
155464 155926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOut ){
155465 155927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_file *id = sqlite3PagerFile(sqlite3BtreePager(pTemp));
155466 155928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 sz = 0;
155467 155929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( id->pMethods!=0 && (sqlite3OsFileSize(id, &sz)!=SQLITE_OK || sz>0) ){
@@ -155534,15 +155996,15 @@
155534 155996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through the tables in the main database. For each, do
155535 155997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an "INSERT INTO vacuum_db.xxx SELECT * FROM main.xxx;" to copy
155536 155998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the contents to the temporary database.
155537 155999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
155538 156000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = execSqlF(db, pzErrMsg,
155539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "SELECT'INSERT INTO vacuum_db.'||quote(name)"
156001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT'INSERT INTO %s.'||quote(name)"
155540 156002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"||' SELECT*FROM\"%w\".'||quote(name)"
155541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "FROM vacuum_db.sqlite_schema "
156003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "FROM %s.sqlite_schema "
155542 156004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"WHERE type='table'AND coalesce(rootpage,1)>0",
155543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDbMain
156005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDbVacuum, zDbMain, zDbVacuum
155544 156006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
155545 156007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (db->mDbFlags & DBFLAG_Vacuum)!=0 );
155546 156008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->mDbFlags &= ~DBFLAG_Vacuum;
155547 156009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) goto end_of_vacuum;
155548 156010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -155550,15 +156012,15 @@
155550 156012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** over to the temporary database. None of these objects has any
155551 156013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** associated storage, so all we have to do is copy their entries
155552 156014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from the schema table.
155553 156015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
155554 156016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = execSqlF(db, pzErrMsg,
155555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT INTO vacuum_db.sqlite_schema"
156017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT INTO %s.sqlite_schema"
155556 156018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT*FROM \"%w\".sqlite_schema"
155557 156019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE type IN('view','trigger')"
155558 156020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" OR(type='table'AND rootpage=0)",
155559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDbMain
156021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDbVacuum, zDbMain
155560 156022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
155561 156023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) goto end_of_vacuum;
155562 156024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
155563 156025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* At this point, there is a write transaction open on both the
155564 156026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** vacuum database and the main database. Assuming no error occurs,
@@ -157198,10 +157660,11 @@
157198 157660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} btree;
157199 157661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct { /* Information for virtual tables */
157200 157662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idxNum; /* Index number */
157201 157663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 needFree : 1; /* True if sqlite3_free(idxStr) is needed */
157202 157664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 bOmitOffset : 1; /* True to let virtual table handle offset */
157665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 bIdxNumHex : 1; /* Show idxNum as hex in EXPLAIN QUERY PLAN */
157203 157666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i8 isOrdered; /* True if satisfies ORDER BY */
157204 157667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 omitMask; /* Terms that may be omitted */
157205 157668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *idxStr; /* Index identifier string */
157206 157669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 mHandleIn; /* Terms to handle as IN(...) instead of == */
157207 157670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} vtab;
@@ -157832,11 +158295,11 @@
157832 158295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx;
157833 158296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
157834 158297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLoop->u.btree.pIndex!=0 );
157835 158298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdx = pLoop->u.btree.pIndex;
157836 158299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !(flags&WHERE_AUTO_INDEX) || (flags&WHERE_IDX_ONLY) );
157837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !HasRowid(pItem->pTab) && IsPrimaryKeyIndex(pIdx) ){
158300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !HasRowid(pItem->pSTab) && IsPrimaryKeyIndex(pIdx) ){
157838 158301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isSearch ){
157839 158302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFmt = "PRIMARY KEY";
157840 158303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157841 158304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & WHERE_PARTIALIDX ){
157842 158305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFmt = "AUTOMATIC PARTIAL COVERING INDEX";
@@ -157875,11 +158338,13 @@
157875 158338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157876 158339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&str, "%c?)", cRangeOp);
157877 158340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157878 158341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
157879 158342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( (flags & WHERE_VIRTUALTABLE)!=0 ){
157880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_str_appendf(&str, " VIRTUAL TABLE INDEX %d:%s",
158343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_appendall(&str, " VIRTUAL TABLE INDEX ");
158344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_appendf(&str,
158345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLoop->u.vtab.bIdxNumHex ? "0x%x:%s" : "%d:%s",
157881 158346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->u.vtab.idxNum, pLoop->u.vtab.idxStr);
157882 158347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157883 158348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
157884 158349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.jointype & JT_LEFT ){
157885 158350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&str, " LEFT-JOIN");
@@ -157929,11 +158394,11 @@
157929 158394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH);
157930 158395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
str.printfFlags = SQLITE_PRINTF_INTERNAL;
157931 158396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&str, "BLOOM FILTER ON %S (", pItem);
157932 158397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop = pLevel->pWLoop;
157933 158398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLoop->wsFlags & WHERE_IPK ){
157934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const Table *pTab = pItem->pTab;
158399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Table *pTab = pItem->pSTab;
157935 158400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab->iPKey>=0 ){
157936 158401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&str, "%s=?", pTab->aCol[pTab->iPKey].zCnName);
157937 158402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
157938 158403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&str, "rowid=?");
157939 158404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -157992,11 +158457,13 @@
157992 158457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157993 158458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( wsFlags & WHERE_INDEXED ){
157994 158459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iIdxCur);
157995 158460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157996 158461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
157997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr = pSrclist->a[pLvl->iFrom].addrFillSub;
158462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addr;
158463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrclist->a[pLvl->iFrom].fg.isSubquery );
158464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = pSrclist->a[pLvl->iFrom].u4.pSubq->addrFillSub;
157998 158465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pOp = sqlite3VdbeGetOp(v, addr-1);
157999 158466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3VdbeDb(v)->mallocFailed || pOp->opcode==OP_InitCoroutine );
158000 158467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3VdbeDb(v)->mallocFailed || pOp->p2>addr );
158001 158468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeScanStatusRange(v, addrExplain, addr, pOp->p2-1);
158002 158469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -159129,11 +159596,12 @@
159129 159596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop = pLevel->pWLoop;
159130 159597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
159131 159598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCur = pTabItem->iCursor;
159132 159599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel->notReady = notReady & ~sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur);
159133 159600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bRev = (pWInfo->revMask>>iLevel)&1;
159134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeModuleComment((v, "Begin WHERE-loop%d: %s",iLevel,pTabItem->pTab->zName));
159601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeModuleComment((v, "Begin WHERE-loop%d: %s",
159602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iLevel, pTabItem->pSTab->zName));
159135 159603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if WHERETRACE_ENABLED /* 0x4001 */
159136 159604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace & 0x1 ){
159137 159605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("Coding level %d of %d: notReady=%llx iFrom=%d\n",
159138 159606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLevel, pWInfo->nLevel, (u64)notReady, pLevel->iFrom);
159139 159607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace & 0x1000 ){
@@ -159184,15 +159652,19 @@
159184 159652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159185 159653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrHalt = pWInfo->a[j].addrBrk;
159186 159654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159187 159655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Special case of a FROM clause subquery implemented as a co-routine */
159188 159656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTabItem->fg.viaCoroutine ){
159189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regYield = pTabItem->regReturn;
159190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pTabItem->addrFillSub);
159657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regYield;
159658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
159659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTabItem->fg.isSubquery && pTabItem->u4.pSubq!=0 );
159660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = pTabItem->u4.pSubq;
159661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regYield = pSubq->regReturn;
159662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pSubq->addrFillSub);
159191 159663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel->p2 = sqlite3VdbeAddOp2(v, OP_Yield, regYield, addrBrk);
159192 159664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
159193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeComment((v, "next row of %s", pTabItem->pTab->zName));
159665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "next row of %s", pTabItem->pSTab->zName));
159194 159666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel->op = OP_Goto;
159195 159667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
159196 159668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159197 159669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
159198 159670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ){
@@ -159917,11 +160389,11 @@
159917 160389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLoopBody = sqlite3VdbeMakeLabel(pParse);/* Start of loop body */
159918 160390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iRetInit; /* Address of regReturn init */
159919 160391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int untestedTerms = 0; /* Some terms not completely tested */
159920 160392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii; /* Loop counter */
159921 160393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pAndExpr = 0; /* An ".. AND (...)" expression */
159922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pTabItem->pTab;
160394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pTabItem->pSTab;
159923 160395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159924 160396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm = pLoop->aLTerm[0];
159925 160397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTerm!=0 );
159926 160398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTerm->eOperator & WO_OR );
159927 160399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pTerm->wtFlags & TERM_ORINFO)!=0 );
@@ -160376,11 +160848,11 @@
160376 160848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pTab is the right-hand table of the RIGHT JOIN. Generate code that
160377 160849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will record that the current row of that table has been matched at
160378 160850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** least once. This is accomplished by storing the PK for the row in
160379 160851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** both the iMatch index and the regBloom Bloom filter.
160380 160852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
160381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pWInfo->pTabList->a[pLevel->iFrom].pTab;
160853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pWInfo->pTabList->a[pLevel->iFrom].pSTab;
160382 160854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( HasRowid(pTab) ){
160383 160855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r = sqlite3GetTempRange(pParse, 2);
160384 160856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCodeGetColumnOfTable(v, pTab, pLevel->iTabCur, -1, r+1);
160385 160857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nPk = 1;
160386 160858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -160483,23 +160955,27 @@
160483 160955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
160484 160956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList sFrom;
160485 160957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask mAll = 0;
160486 160958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int k;
160487 160959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
160488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ExplainQueryPlan((pParse, 1, "RIGHT-JOIN %s", pTabItem->pTab->zName));
160960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExplainQueryPlan((pParse, 1, "RIGHT-JOIN %s", pTabItem->pSTab->zName));
160489 160961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeNoJumpsOutsideSubrtn(v, pRJ->addrSubrtn, pRJ->endSubrtn,
160490 160962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRJ->regReturn);
160491 160963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(k=0; k<iLevel; k++){
160492 160964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iIdxCur;
160493 160965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pRight;
160494 160966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pWInfo->a[k].pWLoop->iTab == pWInfo->a[k].iFrom );
160495 160967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRight = &pWInfo->pTabList->a[pWInfo->a[k].iFrom];
160496 160968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mAll |= pWInfo->a[k].pWLoop->maskSelf;
160497 160969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRight->fg.viaCoroutine ){
160970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
160971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pRight->fg.isSubquery && pRight->u4.pSubq!=0 );
160972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = pRight->u4.pSubq;
160973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq->pSelect!=0 && pSubq->pSelect->pEList!=0 );
160498 160974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(
160499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- v, OP_Null, 0, pRight->regResult,
160500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRight->regResult + pRight->pSelect->pEList->nExpr-1
160975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v, OP_Null, 0, pSubq->regResult,
160976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq->regResult + pSubq->pSelect->pEList->nExpr-1
160501 160977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
160502 160978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160503 160979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_NullRow, pWInfo->a[k].iTabCur);
160504 160980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIdxCur = pWInfo->a[k].iIdxCur;
160505 160981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iIdxCur ){
@@ -160533,11 +161009,11 @@
160533 161009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCur = pLevel->iTabCur;
160534 161010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int r = ++pParse->nMem;
160535 161011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nPk;
160536 161012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jmp;
160537 161013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrCont = sqlite3WhereContinueLabel(pSubWInfo);
160538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pTabItem->pTab;
161014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pTabItem->pSTab;
160539 161015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( HasRowid(pTab) ){
160540 161016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, -1, r);
160541 161017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nPk = 1;
160542 161018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
160543 161019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iPk;
@@ -160785,15 +161261,24 @@
160785 161261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pRight, EP_IntValue) );
160786 161262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = (u8*)pRight->u.zToken;
160787 161263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160788 161264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z ){
160789 161265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
160790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Count the number of prefix characters prior to the first wildcard */
161266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Count the number of prefix characters prior to the first wildcard.
161267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the underlying database has a UTF16LE encoding, then only consider
161268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ASCII characters. Note that the encoding of z[] is UTF8 - we are
161269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** dealing with only UTF8 here in this code, but the database engine
161270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** itself might be processing content using a different encoding. */
160791 161271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cnt = 0;
160792 161272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
160793 161273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cnt++;
160794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c==wc[3] && z[cnt]!=0 ) cnt++;
161274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c==wc[3] && z[cnt]!=0 ){
161275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cnt++;
161276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( c>=0x80 && ENC(db)==SQLITE_UTF16LE ){
161277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cnt--;
161278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
161279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
160795 161280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160796 161281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
160797 161282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The optimization is possible only if (1) the pattern does not begin
160798 161283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with a wildcard and if (2) the non-wildcard prefix does not end with
160799 161284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an (illegal 0xff) character, or (3) the pattern does not consist of
@@ -160804,11 +161289,11 @@
160804 161289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** removed. */
160805 161290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (cnt>1 || (cnt>0 && z[0]!=wc[3])) && 255!=(u8)z[cnt-1] ){
160806 161291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pPrefix;
160807 161292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
160808 161293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A "complete" match if the pattern ends with "*" or "%" */
160809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pisComplete = c==wc[0] && z[cnt+1]==0;
161294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pisComplete = c==wc[0] && z[cnt+1]==0 && ENC(db)!=SQLITE_UTF16LE;
160810 161295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
160811 161296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Get the pattern prefix. Remove all escapes from the prefix. */
160812 161297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrefix = sqlite3Expr(db, TK_STRING, (char*)z);
160813 161298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPrefix ){
160814 161299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iFrom, iTo;
@@ -161523,11 +162008,13 @@
161523 162008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mask |= sqlite3WhereExprUsage(pMaskSet, pS->pWhere);
161524 162009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mask |= sqlite3WhereExprUsage(pMaskSet, pS->pHaving);
161525 162010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pSrc!=0) ){
161526 162011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
161527 162012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pSrc->nSrc; i++){
161528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mask |= exprSelectUsage(pMaskSet, pSrc->a[i].pSelect);
162013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSrc->a[i].fg.isSubquery ){
162014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mask |= exprSelectUsage(pMaskSet, pSrc->a[i].u4.pSubq->pSelect);
162015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
161529 162016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->a[i].fg.isUsing==0 ){
161530 162017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mask |= sqlite3WhereExprUsage(pMaskSet, pSrc->a[i].u3.pOn);
161531 162018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161532 162019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->a[i].fg.isTabFunc ){
161533 162020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mask |= sqlite3WhereExprListUsage(pMaskSet, pSrc->a[i].u1.pFuncArg);
@@ -161561,11 +162048,11 @@
161561 162048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx;
161562 162049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
161563 162050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCur;
161564 162051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
161565 162052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCur = pFrom->a[j].iCursor;
161566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(pIdx=pFrom->a[j].pTab->pIndex; pIdx; pIdx=pIdx->pNext){
162053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pIdx=pFrom->a[j].pSTab->pIndex; pIdx; pIdx=pIdx->pNext){
161567 162054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->aColExpr==0 ) continue;
161568 162055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pIdx->nKeyCol; i++){
161569 162056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->aiColumn[i]!=XN_EXPR ) continue;
161570 162057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIdx->bHasExpr );
161571 162058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ExprCompareSkip(pExpr,pIdx->aColExpr->a[i].pExpr,iCur)==0
@@ -161605,11 +162092,11 @@
161605 162092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
161606 162093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161607 162094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
161608 162095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pFrom->nSrc; i++){
161609 162096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx;
161610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(pIdx=pFrom->a[i].pTab->pIndex; pIdx; pIdx=pIdx->pNext){
162097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pIdx=pFrom->a[i].pSTab->pIndex; pIdx; pIdx=pIdx->pNext){
161611 162098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->aColExpr ){
161612 162099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return exprMightBeIndexed2(pFrom,aiCurCol,pExpr,i);
161613 162100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161614 162101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161615 162102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -162193,11 +162680,11 @@
162193 162680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
162194 162681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Select *p){
162195 162682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p!=0 && p->pLimit!=0 ); /* 1 -- checked by caller */
162196 162683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pGroupBy==0
162197 162684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (p->selFlags & (SF_Distinct|SF_Aggregate))==0 /* 2 */
162198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (p->pSrc->nSrc==1 && IsVirtual(p->pSrc->a[0].pTab)) /* 3 */
162685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (p->pSrc->nSrc==1 && IsVirtual(p->pSrc->a[0].pSTab)) /* 3 */
162199 162686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
162200 162687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy = p->pOrderBy;
162201 162688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCsr = p->pSrc->a[0].iCursor;
162202 162689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
162203 162690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -162414,11 +162901,11 @@
162414 162901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j, k;
162415 162902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pArgs;
162416 162903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pColRef;
162417 162904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pTerm;
162418 162905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isTabFunc==0 ) return;
162419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pItem->pTab;
162906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pItem->pSTab;
162420 162907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
162421 162908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pArgs = pItem->u1.pFuncArg;
162422 162909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pArgs==0 ) return;
162423 162910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=k=0; j<pArgs->nExpr; j++){
162424 162911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pRhs;
@@ -163098,11 +163585,11 @@
163098 163585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is more than one table or sub-select in the FROM clause of
163099 163586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this query, then it will not be possible to show that the DISTINCT
163100 163587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** clause is redundant. */
163101 163588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTabList->nSrc!=1 ) return 0;
163102 163589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iBase = pTabList->a[0].iCursor;
163103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pTabList->a[0].pTab;
163590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pTabList->a[0].pSTab;
163104 163591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
163105 163592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If any of the expressions is an IPK column on table iBase, then return
163106 163593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** true. Note: The (p->iTable==iBase) part of this test may be false if the
163107 163594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** current SELECT is a correlated sub-query.
163108 163595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -163362,14 +163849,14 @@
163362 163849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
163363 163850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTerm->prereqRight & notReady)!=0 ) return 0;
163364 163851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 );
163365 163852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
leftCol = pTerm->u.x.leftColumn;
163366 163853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( leftCol<0 ) return 0;
163367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aff = pSrc->pTab->aCol[leftCol].affinity;
163854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aff = pSrc->pSTab->aCol[leftCol].affinity;
163368 163855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0;
163369 163856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->pExpr->op==TK_IS );
163370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return columnIsGoodIndexCandidate(pSrc->pTab, leftCol);
163857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return columnIsGoodIndexCandidate(pSrc->pSTab, leftCol);
163371 163858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
163372 163859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
163373 163860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
163374 163861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
163375 163862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOMATIC_INDEX
@@ -163473,11 +163960,11 @@
163473 163960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Count the number of columns that will be added to the index
163474 163961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and used to match WHERE clause constraints */
163475 163962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nKeyCol = 0;
163476 163963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList = pWC->pWInfo->pTabList;
163477 163964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = &pTabList->a[pLevel->iFrom];
163478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTable = pSrc->pTab;
163965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTable = pSrc->pSTab;
163479 163966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWCEnd = &pWC->a[pWC->nTerm];
163480 163967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop = pLevel->pWLoop;
163481 163968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idxCols = 0;
163482 163969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
163483 163970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr = pTerm->pExpr;
@@ -163615,16 +164102,21 @@
163615 164102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
163616 164103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
163617 164104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Fill the automatic index with content */
163618 164105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc == &pWC->pWInfo->pTabList->a[pLevel->iFrom] );
163619 164106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.viaCoroutine ){
163620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regYield = pSrc->regReturn;
164107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regYield;
164108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
164109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->fg.isSubquery );
164110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = pSrc->u4.pSubq;
164111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSubq!=0 );
164112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regYield = pSubq->regReturn;
163621 164113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrCounter = sqlite3VdbeAddOp2(v, OP_Integer, 0, 0);
163622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pSrc->addrFillSub);
164114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pSubq->addrFillSub);
163623 164115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrTop = sqlite3VdbeAddOp1(v, OP_Yield, regYield);
163624 164116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
163625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeComment((v, "next row of %s", pSrc->pTab->zName));
164117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "next row of %s", pSrc->pSTab->zName));
163626 164118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
163627 164119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v);
163628 164120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
163629 164121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPartial ){
163630 164122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iContinue = sqlite3VdbeMakeLabel(pParse);
@@ -163642,15 +164134,16 @@
163642 164134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeScanStatusCounters(v, addrExp, addrExp, sqlite3VdbeCurrentAddr(v));
163643 164135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
163644 164136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
163645 164137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
163646 164138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.viaCoroutine ){
164139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->fg.isSubquery && pSrc->u4.pSubq!=0 );
163647 164140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP2(v, addrCounter, regBase+n);
163648 164141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pParse->db->mallocFailed );
163649 164142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLevel->iIdxCur>0 );
163650 164143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
translateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
163651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc->regResult, pLevel->iIdxCur);
164144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc->u4.pSubq->regResult, pLevel->iIdxCur);
163652 164145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeGoto(v, addrTop);
163653 164146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc->fg.viaCoroutine = 0;
163654 164147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
163655 164148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
163656 164149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
@@ -163737,11 +164230,11 @@
163737 164230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
163738 164231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList = pWInfo->pTabList;
163739 164232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSrc = pLevel->iFrom;
163740 164233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem = &pTabList->a[iSrc];
163741 164234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem!=0 );
163742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pItem->pTab;
164235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pItem->pSTab;
163743 164236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
163744 164237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sz = sqlite3LogEstToInt(pTab->nRowLogEst);
163745 164238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sz<10000 ){
163746 164239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sz = 10000;
163747 164240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( sz>10000000 ){
@@ -163768,11 +164261,11 @@
163768 164261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx = pLoop->u.btree.pIndex;
163769 164262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n = pLoop->u.btree.nEq;
163770 164263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int r1 = sqlite3GetTempRange(pParse, n);
163771 164264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jj;
163772 164265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=0; jj<n; jj++){
163773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pIdx->pTable==pItem->pTab );
164266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIdx->pTable==pItem->pSTab );
163774 164267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iCur, jj, r1+jj);
163775 164268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
163776 164269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, n);
163777 164270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempRange(pParse, r1, n);
163778 164271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -163849,11 +164342,11 @@
163849 164342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eDistinct = 0;
163850 164343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy = pWInfo->pOrderBy;
163851 164344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *p;
163852 164345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
163853 164346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc!=0 );
163854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pSrc->pTab;
164347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pSrc->pSTab;
163855 164348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
163856 164349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( IsVirtual(pTab) );
163857 164350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
163858 164351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Find all WHERE clause constraints referring to this virtual table.
163859 164352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Mark each term with the TERM_OK flag. Set nTerm to the number of
@@ -164857,11 +165350,11 @@
164857 165350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3WhereLoopPrint(const WhereLoop *p, const WhereClause *pWC){
164858 165351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWC ){
164859 165352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereInfo *pWInfo = pWC->pWInfo;
164860 165353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nb = 1+(pWInfo->pTabList->nSrc+3)/4;
164861 165354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = pWInfo->pTabList->a + p->iTab;
164862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pItem->pTab;
165355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pItem->pSTab;
164863 165356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask mAll = (((Bitmask)1)<<(nb*4)) - 1;
164864 165357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("%c%2d.%0*llx.%0*llx", p->cId,
164865 165358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iTab, nb, p->maskSelf, nb, p->prereq & mAll);
164866 165359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(" %12s",
164867 165360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->zAlias ? pItem->zAlias : pTab->zName);
@@ -165845,19 +166338,19 @@
165845 166338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 1. The cost of doing one search-by-key to find the first matching
165846 166339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** entry
165847 166340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2. Stepping forward in the index pNew->nOut times to find all
165848 166341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** additional matching entries.
165849 166342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
165850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSrc->pTab->szTabRow>0 );
166343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->pSTab->szTabRow>0 );
165851 166344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){
165852 166345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The pProbe->szIdxRow is low for an IPK table since the interior
165853 166346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pages are small. Thus szIdxRow gives a good estimate of seek cost.
165854 166347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** But the leaf pages are full-size, so pProbe->szIdxRow would badly
165855 166348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** under-estimate the scanning cost. */
165856 166349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rCostIdx = pNew->nOut + 16;
165857 166350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
165858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
166351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pSTab->szTabRow;
165859 166352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
165860 166353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rCostIdx = sqlite3LogEstAdd(rLogSize, rCostIdx);
165861 166354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
165862 166355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Estimate the cost of running the loop. If all data is coming
165863 166356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from the index, then this is just the cost of doing the index
@@ -166318,13 +166811,13 @@
166318 166811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
166319 166812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = pBuilder->pNew;
166320 166813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo = pBuilder->pWInfo;
166321 166814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList = pWInfo->pTabList;
166322 166815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = pTabList->a + pNew->iTab;
166323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pSrc->pTab;
166816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pSrc->pSTab;
166324 166817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWC = pBuilder->pWC;
166325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( !IsVirtual(pSrc->pTab) );
166818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !IsVirtual(pSrc->pSTab) );
166326 166819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
166327 166820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.isIndexedBy ){
166328 166821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc->fg.isCte==0 );
166329 166822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* An INDEXED BY clause specifies a particular index to use */
166330 166823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pProbe = pSrc->u2.pIBIndex;
@@ -166345,11 +166838,11 @@
166345 166838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.pTable = pTab;
166346 166839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.szIdxRow = 3; /* TUNING: Interior rows of IPK table are very small */
166347 166840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.idxType = SQLITE_IDXTYPE_IPK;
166348 166841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiRowEstPk[0] = pTab->nRowLogEst;
166349 166842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiRowEstPk[1] = 0;
166350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFirst = pSrc->pTab->pIndex;
166843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFirst = pSrc->pSTab->pIndex;
166351 166844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.notIndexed==0 ){
166352 166845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The real indices of the table are only considered if the
166353 166846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NOT INDEXED qualifier is omitted from the FROM clause */
166354 166847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.pNext = pFirst;
166355 166848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -166435,10 +166928,11 @@
166435 166928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->iSortIdx = 0;
166436 166929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rSetup = 0;
166437 166930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->prereq = mPrereq;
166438 166931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = rSize;
166439 166932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->u.btree.pIndex = pProbe;
166933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->u.btree.pOrderBy = 0;
166440 166934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b = indexMightHelpWithOrderBy(pBuilder, pProbe, pSrc->iCursor);
166441 166935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
166442 166936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The ONEPASS_DESIRED flags never occurs together with ORDER BY */
166443 166937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || b==0 );
166444 166938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){
@@ -166464,13 +166958,13 @@
166464 166958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
166465 166959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = rSize + 16;
166466 166960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
166467 166961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ApplyCostMultiplier(pNew->rRun, pTab->costMult);
166468 166962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereLoopOutputAdjust(pWC, pNew, rSize);
166469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSrc->pSelect ){
166963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSrc->fg.isSubquery ){
166470 166964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.viaCoroutine ) pNew->wsFlags |= WHERE_COROUTINE;
166471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->u.btree.pOrderBy = pSrc->pSelect->pOrderBy;
166965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->u.btree.pOrderBy = pSrc->u4.pSubq->pSelect->pOrderBy;
166472 166966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
166473 166967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopInsert(pBuilder, pNew);
166474 166968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = rSize;
166475 166969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) break;
166476 166970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -166692,11 +167186,11 @@
166692 167186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->estimatedRows = 25;
166693 167187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->idxFlags = 0;
166694 167188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pHidden->mHandleIn = 0;
166695 167189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
166696 167190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Invoke the virtual table xBestIndex() method */
166697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = vtabBestIndex(pParse, pSrc->pTab, pIdxInfo);
167191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vtabBestIndex(pParse, pSrc->pSTab, pIdxInfo);
166698 167192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
166699 167193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_CONSTRAINT ){
166700 167194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the xBestIndex method returns SQLITE_CONSTRAINT, that means
166701 167195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the particular combination of parameters provided is unusable.
166702 167196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Make no entries in the loop table.
@@ -166722,11 +167216,11 @@
166722 167216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| j<0
166723 167217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pTerm = termFromWhereClause(pWC, j))==0
166724 167218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pNew->aLTerm[iTerm]!=0
166725 167219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pIdxCons->usable==0
166726 167220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
166727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pTab->zName);
167221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pSTab->zName);
166728 167222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeIdxStr(pIdxInfo);
166729 167223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
166730 167224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
166731 167225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( iTerm==nConstraint-1 );
166732 167226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( j==0 );
@@ -166785,11 +167279,11 @@
166785 167279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nLTerm = mxTerm+1;
166786 167280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<=mxTerm; i++){
166787 167281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew->aLTerm[i]==0 ){
166788 167282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The non-zero argvIdx values must be contiguous. Raise an
166789 167283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** error if they are not */
166790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pTab->zName);
167284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pSTab->zName);
166791 167285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeIdxStr(pIdxInfo);
166792 167286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
166793 167287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
166794 167288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
166795 167289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNew->nLTerm<=pNew->nLSlot );
@@ -166797,10 +167291,11 @@
166797 167291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->u.vtab.needFree = pIdxInfo->needToFreeIdxStr;
166798 167292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->needToFreeIdxStr = 0;
166799 167293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->u.vtab.idxStr = pIdxInfo->idxStr;
166800 167294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->u.vtab.isOrdered = (i8)(pIdxInfo->orderByConsumed ?
166801 167295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->nOrderBy : 0);
167296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->u.vtab.bIdxNumHex = (pIdxInfo->idxFlags&SQLITE_INDEX_SCAN_HEX)!=0;
166802 167297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rSetup = 0;
166803 167298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = sqlite3LogEstFromDouble(pIdxInfo->estimatedCost);
166804 167299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = sqlite3LogEst(pIdxInfo->estimatedRows);
166805 167300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
166806 167301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the WHERE_ONEROW flag if the xBestIndex() method indicated
@@ -166987,11 +167482,11 @@
166987 167482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo = pBuilder->pWInfo;
166988 167483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse = pWInfo->pParse;
166989 167484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWC = pBuilder->pWC;
166990 167485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = pBuilder->pNew;
166991 167486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = &pWInfo->pTabList->a[pNew->iTab];
166992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( IsVirtual(pSrc->pTab) );
167487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( IsVirtual(pSrc->pSTab) );
166993 167488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = allocateIndexInfo(pWInfo, pWC, mUnusable, pSrc, &mNoOmit);
166994 167489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==0 ) return SQLITE_NOMEM_BKPT;
166995 167490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rSetup = 0;
166996 167491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->wsFlags = WHERE_VIRTUALTABLE;
166997 167492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nLTerm = 0;
@@ -167001,11 +167496,11 @@
167001 167496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeIndexInfo(pParse->db, p);
167002 167497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM_BKPT;
167003 167498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167004 167499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
167005 167500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* First call xBestIndex() with all constraints usable. */
167006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x800, ("BEGIN %s.addVirtual()\n", pSrc->pTab->zName));
167501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x800, ("BEGIN %s.addVirtual()\n", pSrc->pSTab->zName));
167007 167502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE(0x800, (" VirtualOne: all usable\n"));
167008 167503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddVirtualOne(
167009 167504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn, &bRetry
167010 167505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
167011 167506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bRetry ){
@@ -167083,11 +167578,11 @@
167083 167578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder, mPrereq, mPrereq, WO_IN, p, mNoOmit, &bIn, 0);
167084 167579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167085 167580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167086 167581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
167087 167582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeIndexInfo(pParse->db, p);
167088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x800, ("END %s.addVirtual(), rc=%d\n", pSrc->pTab->zName, rc));
167583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x800, ("END %s.addVirtual(), rc=%d\n", pSrc->pSTab->zName, rc));
167089 167584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
167090 167585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167091 167586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_VIRTUALTABLE */
167092 167587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
167093 167588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -167155,11 +167650,11 @@
167155 167650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace & 0x20000 ){
167156 167651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereClausePrint(sSubBuild.pWC);
167157 167652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167158 167653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
167159 167654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
167160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( IsVirtual(pItem->pTab) ){
167655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsVirtual(pItem->pSTab) ){
167161 167656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddVirtual(&sSubBuild, mPrereq, mUnusable);
167162 167657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
167163 167658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
167164 167659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
167165 167660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddBtree(&sSubBuild, mPrereq);
@@ -167269,11 +167764,11 @@
167269 167764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0;
167270 167765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( !hasRightJoin ){
167271 167766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mPrereq = 0;
167272 167767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167273 167768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
167274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( IsVirtual(pItem->pTab) ){
167769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsVirtual(pItem->pSTab) ){
167275 167770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *p;
167276 167771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=&pItem[1]; p<pEnd; p++){
167277 167772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mUnusable || (p->fg.jointype & (JT_OUTER|JT_CROSS)) ){
167278 167773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mUnusable |= sqlite3WhereGetMask(&pWInfo->sMaskSet, p->iCursor);
167279 167774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -167905,11 +168400,11 @@
167905 168400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rDelta = 15*(nDep-3);
167906 168401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef WHERETRACE_ENABLED /* 0x4 */
167907 168402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace&0x4 ){
167908 168403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = pWInfo->pTabList->a + iLoop;
167909 168404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("Fact-table %s: %d dimensions, cost reduced %d\n",
167910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->zAlias ? pItem->zAlias : pItem->pTab->zName,
168405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->zAlias ? pItem->zAlias : pItem->pSTab->zName,
167911 168406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nDep, rDelta);
167912 168407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
167913 168408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
167914 168409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo->nOutStarDelta==0 ){
167915 168410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
@@ -168455,11 +168950,11 @@
168455 168950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
168456 168951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo = pBuilder->pWInfo;
168457 168952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0;
168458 168953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pWInfo->pTabList->nSrc>=1 );
168459 168954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem = pWInfo->pTabList->a;
168460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pItem->pTab;
168955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pItem->pSTab;
168461 168956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IsVirtual(pTab) ) return 0;
168462 168957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isIndexedBy || pItem->fg.notIndexed ){
168463 168958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pItem->fg.isIndexedBy );
168464 168959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pItem->fg.notIndexed );
168465 168960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
@@ -168718,11 +169213,11 @@
168718 169213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OptimizationEnabled(pWInfo->pParse->db, SQLITE_BloomFilter) );
168719 169214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pWInfo->nLevel; i++){
168720 169215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop *pLoop = pWInfo->a[i].pWLoop;
168721 169216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const unsigned int reqFlags = (WHERE_SELFCULL|WHERE_COLUMN_EQ);
168722 169217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab];
168723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pItem->pTab;
169218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pItem->pSTab;
168724 169219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTab->tabFlags & TF_HasStat1)==0 ) break;
168725 169220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->tabFlags |= TF_MaybeReanalyze;
168726 169221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=1
168727 169222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pLoop->wsFlags & reqFlags)==reqFlags
168728 169223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* vvvvvv--- Always the case if WHERE_COLUMN_EQ is defined */
@@ -168875,12 +169370,12 @@
168875 169370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
168876 169371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pWInfo->pTabList->nSrc; ii++){
168877 169372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = &pWInfo->pTabList->a[ii];
168878 169373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pItem->fg.isCte
168879 169374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pItem->u2.pCteUse->eM10d!=M10d_Yes
168880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || NEVER(pItem->pSelect==0)
168881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || pItem->pSelect->pOrderBy==0
169375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || NEVER(pItem->fg.isSubquery==0)
169376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pItem->u4.pSubq->pSelect->pOrderBy==0
168882 169377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
168883 169378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->revMask |= MASKBIT(ii);
168884 169379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
168885 169380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
168886 169381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -169366,19 +169861,19 @@
169366 169861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
169367 169862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 );
169368 169863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 ){
169369 169864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int wsFlags = pWInfo->a[0].pWLoop->wsFlags;
169370 169865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bOnerow = (wsFlags & WHERE_ONEROW)!=0;
169371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( !(wsFlags & WHERE_VIRTUALTABLE) || IsVirtual(pTabList->a[0].pTab) );
169866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !(wsFlags&WHERE_VIRTUALTABLE) || IsVirtual(pTabList->a[0].pSTab) );
169372 169867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bOnerow || (
169373 169868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0!=(wctrlFlags & WHERE_ONEPASS_MULTIROW)
169374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && !IsVirtual(pTabList->a[0].pTab)
169869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && !IsVirtual(pTabList->a[0].pSTab)
169375 169870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (0==(wsFlags & WHERE_MULTI_OR) || (wctrlFlags & WHERE_DUPLICATES_OK))
169376 169871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& OptimizationEnabled(db, SQLITE_OnePass)
169377 169872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)){
169378 169873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI;
169379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( HasRowid(pTabList->a[0].pTab) && (wsFlags & WHERE_IDX_ONLY) ){
169874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( HasRowid(pTabList->a[0].pSTab) && (wsFlags & WHERE_IDX_ONLY) ){
169380 169875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( wctrlFlags & WHERE_ONEPASS_MULTIROW ){
169381 169876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bFordelete = OPFLAG_FORDELETE;
169382 169877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169383 169878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->a[0].pWLoop->wsFlags = (wsFlags & ~WHERE_IDX_ONLY);
169384 169879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -169392,11 +169887,11 @@
169392 169887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab; /* Table to open */
169393 169888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb; /* Index of database containing table/index */
169394 169889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pTabItem;
169395 169890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
169396 169891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabItem = &pTabList->a[pLevel->iFrom];
169397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab = pTabItem->pTab;
169892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pTabItem->pSTab;
169398 169893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
169399 169894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop = pLevel->pWLoop;
169400 169895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTab->tabFlags & TF_Ephemeral)!=0 || IsView(pTab) ){
169401 169896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Do nothing */
169402 169897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
@@ -169463,11 +169958,11 @@
169463 169958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This is one term of an OR-optimization using the PRIMARY KEY of a
169464 169959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WITHOUT ROWID table. No need for a separate index */
169465 169960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIndexCur = pLevel->iTabCur;
169466 169961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = 0;
169467 169962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pWInfo->eOnePass!=ONEPASS_OFF ){
169468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Index *pJ = pTabItem->pTab->pIndex;
169963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pJ = pTabItem->pSTab->pIndex;
169469 169964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIndexCur = iAuxArg;
169470 169965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( wctrlFlags & WHERE_ONEPASS_DESIRED );
169471 169966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( ALWAYS(pJ) && pJ!=pIx ){
169472 169967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIndexCur++;
169473 169968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pJ = pJ->pNext;
@@ -169530,11 +170025,11 @@
169530 170025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRJ->iMatch = pParse->nTab++;
169531 170026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRJ->regBloom = ++pParse->nMem;
169532 170027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Blob, 65536, pRJ->regBloom);
169533 170028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRJ->regReturn = ++pParse->nMem;
169534 170029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Null, 0, pRJ->regReturn);
169535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pTab==pTabItem->pTab );
170030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTab==pTabItem->pSTab );
169536 170031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( HasRowid(pTab) ){
169537 170032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pInfo;
169538 170033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRJ->iMatch, 1);
169539 170034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pInfo = sqlite3KeyInfoAlloc(pParse->db, 1, 0);
169540 170035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pInfo ){
@@ -169569,17 +170064,22 @@
169569 170064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ) goto whereBeginError;
169570 170065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel = &pWInfo->a[ii];
169571 170066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsFlags = pLevel->pWLoop->wsFlags;
169572 170067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc = &pTabList->a[pLevel->iFrom];
169573 170068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.isMaterialized ){
169574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSrc->fg.isCorrelated ){
169575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Gosub, pSrc->regReturn, pSrc->addrFillSub);
170069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Subquery *pSubq;
170070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOnce = 0;
170071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->fg.isSubquery );
170072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubq = pSrc->u4.pSubq;
170073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSrc->fg.isCorrelated==0 ){
170074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
169576 170075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
169577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
169578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Gosub, pSrc->regReturn, pSrc->addrFillSub);
169579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, iOnce);
170076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iOnce = 0;
169580 170077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
170078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Gosub, pSubq->regReturn, pSubq->addrFillSub);
170079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "materialize %!S", pSrc));
170080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iOnce ) sqlite3VdbeJumpHere(v, iOnce);
169581 170081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169582 170082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTabList == pWInfo->pTabList );
169583 170083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (wsFlags & (WHERE_AUTO_INDEX|WHERE_BLOOMFILTER))!=0 ){
169584 170084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (wsFlags & WHERE_AUTO_INDEX)!=0 ){
169585 170085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOMATIC_INDEX
@@ -169788,13 +170288,14 @@
169788 170288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (ws & WHERE_IDX_ONLY)==0 ){
169789 170289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pSrc = &pTabList->a[pLevel->iFrom];
169790 170290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLevel->iTabCur==pSrc->iCursor );
169791 170291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.viaCoroutine ){
169792 170292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int m, n;
169793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = pSrc->regResult;
169794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSrc->pTab!=0 );
169795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- m = pSrc->pTab->nCol;
170293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->fg.isSubquery );
170294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = pSrc->u4.pSubq->regResult;
170295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSrc->pSTab!=0 );
170296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ m = pSrc->pSTab->nCol;
169796 170297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Null, 0, n, n+m-1);
169797 170298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169798 170299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur);
169799 170300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169800 170301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (ws & WHERE_INDEXED)
@@ -169814,20 +170315,20 @@
169814 170315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeGoto(v, pLevel->addrFirst);
169815 170316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169816 170317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addr);
169817 170318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169818 170319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeModuleComment((v, "End WHERE-loop%d: %s", i,
169819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWInfo->pTabList->a[pLevel->iFrom].pTab->zName));
170320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo->pTabList->a[pLevel->iFrom].pSTab->zName));
169820 170321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169821 170322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
169822 170323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pWInfo->nLevel<=pTabList->nSrc );
169823 170324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pLevel=pWInfo->a; i<pWInfo->nLevel; i++, pLevel++){
169824 170325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int k, last;
169825 170326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pOp, *pLastOp;
169826 170327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx = 0;
169827 170328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pTabItem = &pTabList->a[pLevel->iFrom];
169828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab = pTabItem->pTab;
170329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pTabItem->pSTab;
169829 170330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
169830 170331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop = pLevel->pWLoop;
169831 170332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
169832 170333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Do RIGHT JOIN processing. Generate code that will output the
169833 170334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unmatched rows of the right operand of the RIGHT JOIN with
@@ -169842,13 +170343,14 @@
169842 170343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the co-routine into OP_Copy of result contained in a register.
169843 170344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** OP_Rowid becomes OP_Null.
169844 170345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
169845 170346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTabItem->fg.viaCoroutine ){
169846 170347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pParse->db->mallocFailed );
169847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pTabItem->regResult>=0 );
170348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTabItem->fg.isSubquery );
170349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTabItem->u4.pSubq->regResult>=0 );
169848 170350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur,
169849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTabItem->regResult, 0);
170351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTabItem->u4.pSubq->regResult, 0);
169850 170352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
169851 170353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
169852 170354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
169853 170355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this scan uses an index, make VDBE code substitutions to read data
169854 170356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from the index instead of from the table where possible. In some cases
@@ -171054,13 +171556,14 @@
171054 171556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->selId, p));
171055 171557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
171056 171558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSub!=0 || p->pSrc==0 ); /* Due to db->mallocFailed test inside
171057 171559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of sqlite3DbMallocRawNN() called from
171058 171560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3SrcListAppend() */
171059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pSrc ){
171561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pSrc==0 ){
171562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SelectDelete(db, pSub);
171563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( sqlite3SrcItemAttachSubquery(pParse, &p->pSrc->a[0], pSub, 0) ){
171060 171564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab2;
171061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pSrc->a[0].pSelect = pSub;
171062 171565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pSrc->a[0].fg.isCorrelated = 1;
171063 171566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SrcListAssignCursors(pParse, p->pSrc);
171064 171567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->selFlags |= SF_Expanded|SF_OrderByReqd;
171065 171568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab2 = sqlite3ResultSetOfSelect(pParse, pSub, SQLITE_AFF_NONE);
171066 171569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->selFlags |= (selFlags & SF_Aggregate);
@@ -171070,20 +171573,18 @@
171070 171573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the correct error message regardless. */
171071 171574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
171072 171575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
171073 171576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pTab, pTab2, sizeof(Table));
171074 171577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->tabFlags |= TF_Ephemeral;
171075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pSrc->a[0].pTab = pTab;
171578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pSrc->a[0].pSTab = pTab;
171076 171579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = pTab2;
171077 171580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&w, 0, sizeof(w));
171078 171581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xExprCallback = sqlite3WindowExtraAggFuncDepth;
171079 171582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xSelectCallback = sqlite3WalkerDepthIncrease;
171080 171583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xSelectCallback2 = sqlite3WalkerDepthDecrease;
171081 171584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkSelect(&w, pSub);
171082 171585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
171083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
171084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectDelete(db, pSub);
171085 171586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
171086 171587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) rc = SQLITE_NOMEM;
171087 171588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
171088 171589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Defer deleting the temporary table pTab because if an error occurred,
171089 171590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** there could still be references to that table embedded in the
@@ -171366,14 +171867,19 @@
171366 171867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is called by code in select.c before it calls sqlite3WhereBegin()
171367 171868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to begin iterating through the sub-query results. It is used to allocate
171368 171869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and initialize registers and cursors used by sqlite3WindowCodeStep().
171369 171870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
171370 171871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse *pParse, Select *pSelect){
171371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nEphExpr = pSelect->pSrc->a[0].pSelect->pEList->nExpr;
171372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Window *pMWin = pSelect->pWin;
171373 171872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Window *pWin;
171374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Vdbe *v = sqlite3GetVdbe(pParse);
171873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nEphExpr;
171874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Window *pMWin;
171875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v;
171876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
171877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSelect->pSrc->a[0].fg.isSubquery );
171878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEphExpr = pSelect->pSrc->a[0].u4.pSubq->pSelect->pEList->nExpr;
171879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMWin = pSelect->pWin;
171880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v = sqlite3GetVdbe(pParse);
171375 171881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
171376 171882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, nEphExpr);
171377 171883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+1, pMWin->iEphCsr);
171378 171884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+2, pMWin->iEphCsr);
171379 171885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+3, pMWin->iEphCsr);
@@ -172766,11 +173272,11 @@
172766 173272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Window *pMWin = p->pWin;
172767 173273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy = pMWin->pOrderBy;
172768 173274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = sqlite3GetVdbe(pParse);
172769 173275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int csrWrite; /* Cursor used to write to eph. table */
172770 173276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int csrInput = p->pSrc->a[0].iCursor; /* Cursor of sub-select */
172771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nInput = p->pSrc->a[0].pTab->nCol; /* Number of cols returned by sub */
173277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nInput = p->pSrc->a[0].pSTab->nCol; /* Number of cols returned by sub */
172772 173278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iInput; /* To iterate through sub cols */
172773 173279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrNe; /* Address of OP_Ne */
172774 173280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrGosubFlush = 0; /* Address of OP_Gosub to flush: */
172775 173281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrInteger = 0; /* Address of OP_Integer */
172776 173282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrEmpty; /* Address of OP_Rewind in flush: */
@@ -177217,24 +177723,33 @@
177217 177723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( ALWAYS(yymsp[-3].minor.yy203!=0) && yymsp[-3].minor.yy203->nSrc==1 ){
177218 177724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy269);
177219 177725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( yymsp[-5].minor.yy203 ){
177220 177726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pNew = &yymsp[-5].minor.yy203->a[yymsp[-5].minor.yy203->nSrc-1];
177221 177727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pOld = yymsp[-3].minor.yy203->a;
177728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOld->fg.fixedSchema==0 );
177222 177729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->zName = pOld->zName;
177223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->zDatabase = pOld->zDatabase;
177224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->pSelect = pOld->pSelect;
177225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNew->pSelect && (pNew->pSelect->selFlags & SF_NestedFrom)!=0 ){
177226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->fg.isNestedFrom = 1;
177730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOld->fg.fixedSchema==0 );
177731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOld->fg.isSubquery ){
177732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->fg.isSubquery = 1;
177733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->u4.pSubq = pOld->u4.pSubq;
177734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOld->u4.pSubq = 0;
177735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOld->fg.isSubquery = 0;
177736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pNew->u4.pSubq!=0 && pNew->u4.pSubq->pSelect!=0 );
177737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pNew->u4.pSubq->pSelect->selFlags & SF_NestedFrom)!=0 ){
177738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->fg.isNestedFrom = 1;
177739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
177740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
177741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->u4.zDatabase = pOld->u4.zDatabase;
177742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOld->u4.zDatabase = 0;
177227 177743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
177228 177744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOld->fg.isTabFunc ){
177229 177745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->u1.pFuncArg = pOld->u1.pFuncArg;
177230 177746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOld->u1.pFuncArg = 0;
177231 177747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOld->fg.isTabFunc = 0;
177232 177748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->fg.isTabFunc = 1;
177233 177749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
177234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOld->zName = pOld->zDatabase = 0;
177235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOld->pSelect = 0;
177750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOld->zName = 0;
177236 177751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
177237 177752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy203);
177238 177753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
177239 177754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSubquery;
177240 177755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy203);
@@ -182324,11 +182839,12 @@
182324 182839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
182325 182840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
182326 182841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( SQLITE_FUNC_CONSTANT==SQLITE_DETERMINISTIC );
182327 182842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( SQLITE_FUNC_DIRECT==SQLITE_DIRECTONLY );
182328 182843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
extraFlags = enc & (SQLITE_DETERMINISTIC|SQLITE_DIRECTONLY|
182329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_SUBTYPE|SQLITE_INNOCUOUS|SQLITE_RESULT_SUBTYPE);
182844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_SUBTYPE|SQLITE_INNOCUOUS|
182845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_RESULT_SUBTYPE|SQLITE_SELFORDER1);
182330 182846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
enc &= (SQLITE_FUNC_ENCMASK|SQLITE_ANY);
182331 182847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
182332 182848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The SQLITE_INNOCUOUS flag is the same bit as SQLITE_FUNC_UNSAFE. But
182333 182849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the meaning is inverted. So flip the bit. */
182334 182850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( SQLITE_FUNC_UNSAFE==SQLITE_INNOCUOUS );
@@ -184790,10 +185306,22 @@
184790 185306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_TESTCTRL_OPTIMIZATIONS: {
184791 185307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = va_arg(ap, sqlite3*);
184792 185308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->dbOptFlags = va_arg(ap, u32);
184793 185309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
184794 185310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
185311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
185312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* sqlite3_test_control(SQLITE_TESTCTRL_GETOPT, sqlite3 *db, int *N)
185313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
185314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Write the current optimization settings into *N. A zero bit means that
185315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the optimization is on, and a 1 bit means that the optimization is off.
185316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
185317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_TESTCTRL_GETOPT: {
185318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db = va_arg(ap, sqlite3*);
185319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pN = va_arg(ap, int*);
185320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pN = db->dbOptFlags;
185321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
185322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
184795 185323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
184796 185324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, onoff, xAlt);
184797 185325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
184798 185326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If parameter onoff is 1, subsequent calls to localtime() fail.
184799 185327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If 2, then invoke xAlt() instead of localtime(). If 0, normal
@@ -224464,10 +224992,11 @@
224464 224992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
224465 224993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
224466 224994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->orderByConsumed = 1;
224467 224995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->idxNum |= 0x08;
224468 224996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
224997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->idxFlags |= SQLITE_INDEX_SCAN_HEX;
224469 224998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
224470 224999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
224471 225000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
224472 225001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
224473 225002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -232374,13 +232903,36 @@
232374 232903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It is the output of the tokenizer module. For tokendata=1 tables, this
232375 232904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** includes any embedded 0x00 and trailing data.
232376 232905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232377 232906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This API can be quite slow if used with an FTS5 table created with the
232378 232907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "detail=none" or "detail=column" option.
232908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
232909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xColumnLocale(pFts5, iIdx, pzLocale, pnLocale)
232910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter iCol is less than zero, or greater than or equal to the
232911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** number of columns in the table, SQLITE_RANGE is returned.
232912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
232913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, this function attempts to retrieve the locale associated
232914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with column iCol of the current row. Usually, there is no associated
232915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** locale, and output parameters (*pzLocale) and (*pnLocale) are set
232916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to NULL and 0, respectively. However, if the fts5_locale() function
232917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** was used to associate a locale with the value when it was inserted
232918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into the fts5 table, then (*pzLocale) is set to point to a nul-terminated
232919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** buffer containing the name of the locale in utf-8 encoding. (*pnLocale)
232920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is set to the size in bytes of the buffer, not including the
232921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nul-terminator.
232922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
232923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If successful, SQLITE_OK is returned. Or, if an error occurs, an
232924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite error code is returned. The final value of the output parameters
232925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is undefined in this case.
232926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
232927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xTokenize_v2:
232928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Tokenize text using the tokenizer belonging to the FTS5 table. This
232929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** API is the same as the xTokenize() API, except that it allows a tokenizer
232930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** locale to be specified.
232379 232931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
232380 232932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5ExtensionApi {
232381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iVersion; /* Currently always set to 3 */
232933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iVersion; /* Currently always set to 4 */
232382 232934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232383 232935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *(*xUserData)(Fts5Context*);
232384 232936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232385 232937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xColumnCount)(Fts5Context*);
232386 232938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xRowCount)(Fts5Context*, sqlite3_int64 *pnRow);
@@ -232418,10 +232970,19 @@
232418 232970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xQueryToken)(Fts5Context*,
232419 232971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iPhrase, int iToken,
232420 232972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **ppToken, int *pnToken
232421 232973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
232422 232974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*);
232975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
232976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Below this point are iVersion>=4 only */
232977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xColumnLocale)(Fts5Context*, int iCol, const char **pz, int *pn);
232978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xTokenize_v2)(Fts5Context*,
232979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText, int nText, /* Text to tokenize */
232980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLocale, int nLocale, /* Locale to pass to tokenizer */
232981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx, /* Context passed to xToken() */
232982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xToken)(void*, int, const char*, int, int, int) /* Callback */
232983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
232423 232984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
232424 232985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232425 232986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
232426 232987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CUSTOM AUXILIARY FUNCTIONS
232427 232988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************/
@@ -232430,19 +232991,20 @@
232430 232991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CUSTOM TOKENIZERS
232431 232992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232432 232993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Applications may also register custom tokenizer types. A tokenizer
232433 232994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is registered by providing fts5 with a populated instance of the
232434 232995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** following structure. All structure methods must be defined, setting
232996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
232435 232997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** any member of the fts5_tokenizer struct to NULL leads to undefined
232436 232998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** behaviour. The structure methods are expected to function as follows:
232437 232999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232438 233000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xCreate:
232439 233001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is used to allocate and initialize a tokenizer instance.
232440 233002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A tokenizer instance is required to actually tokenize text.
232441 233003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232442 233004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The first argument passed to this function is a copy of the (void*)
232443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pointer provided by the application when the fts5_tokenizer object
233005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pointer provided by the application when the fts5_tokenizer_v2 object
232444 233006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** was registered with FTS5 (the third argument to xCreateTokenizer()).
232445 233007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The second and third arguments are an array of nul-terminated strings
232446 233008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** containing the tokenizer arguments, if any, specified following the
232447 233009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tokenizer name as part of the CREATE VIRTUAL TABLE statement used
232448 233010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to create the FTS5 table.
@@ -232462,11 +233024,11 @@
232462 233024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is expected to tokenize the nText byte string indicated
232463 233025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by argument pText. pText may or may not be nul-terminated. The first
232464 233026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** argument passed to this function is a pointer to an Fts5Tokenizer object
232465 233027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned by an earlier call to xCreate().
232466 233028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The second argument indicates the reason that FTS5 is requesting
233029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The third argument indicates the reason that FTS5 is requesting
232468 233030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tokenization of the supplied text. This is always one of the following
232469 233031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** four values:
232470 233032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232471 233033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul><li> <b>FTS5_TOKENIZE_DOCUMENT</b> - A document is being inserted into
232472 233034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or removed from the FTS table. The tokenizer is being invoked to
@@ -232485,10 +233047,17 @@
232485 233047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> <b>FTS5_TOKENIZE_AUX</b> - The tokenizer is being invoked to
232486 233048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** satisfy an fts5_api.xTokenize() request made by an auxiliary
232487 233049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function. Or an fts5_api.xColumnSize() request made by the same
232488 233050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on a columnsize=0 database.
232489 233051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
233052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
233053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sixth and seventh arguments passed to xTokenize() - pLocale and
233054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nLocale - are a pointer to a buffer containing the locale to use for
233055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tokenization (e.g. "en_US") and its size in bytes, respectively. The
233056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pLocale buffer is not nul-terminated. pLocale may be passed NULL (in
233057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** which case nLocale is always 0) to indicate that the tokenizer should
233058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** use its default locale.
232490 233059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232491 233060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For each token in the input string, the supplied callback xToken() must
232492 233061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be invoked. The first argument to it should be a copy of the pointer
232493 233062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** passed as the second argument to xTokenize(). The third and fourth
232494 233063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** arguments are a pointer to a buffer containing the token text, and the
@@ -232508,10 +233077,34 @@
232508 233077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** immediately return a copy of the xToken() return value. Or, if the
232509 233078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** input buffer is exhausted, xTokenize() should return SQLITE_OK. Finally,
232510 233079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if an error occurs with the xTokenize() implementation itself, it
232511 233080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** may abandon the tokenization and return any error code other than
232512 233081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OK or SQLITE_DONE.
233082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
233083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the tokenizer is registered using an fts5_tokenizer_v2 object,
233084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the xTokenize() method has two additional arguments - pLocale
233085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and nLocale. These specify the locale that the tokenizer should use
233086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for the current request. If pLocale and nLocale are both 0, then the
233087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tokenizer should use its default locale. Otherwise, pLocale points to
233088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an nLocale byte buffer containing the name of the locale to use as utf-8
233089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** text. pLocale is not nul-terminated.
233090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
233091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FTS5_TOKENIZER
233092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
233093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There is also an fts5_tokenizer object. This is an older, deprecated,
233094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version of fts5_tokenizer_v2. It is similar except that:
233095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
233096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <ul>
233097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> There is no "iVersion" field, and
233098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> The xTokenize() method does not take a locale argument.
233099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>
233100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
233101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Legacy fts5_tokenizer tokenizers must be registered using the
233102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** legacy xCreateTokenizer() function, instead of xCreateTokenizer_v2().
233103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
233104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Tokenizer implementations registered using either API may be retrieved
233105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** using both xFindTokenizer() and xFindTokenizer_v2().
232513 233106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232514 233107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SYNONYM SUPPORT
232515 233108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232516 233109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Custom tokenizers may also support synonyms. Consider a case in which a
232517 233110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** user wishes to query for a phrase such as "first place". Using the
@@ -232617,10 +233210,37 @@
232617 233210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** provide synonyms when tokenizing document text (method (3)) or query
232618 233211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** text (method (2)), not both. Doing so will not cause any errors, but is
232619 233212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inefficient.
232620 233213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
232621 233214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts5Tokenizer Fts5Tokenizer;
233215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct fts5_tokenizer_v2 fts5_tokenizer_v2;
233216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct fts5_tokenizer_v2 {
233217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iVersion; /* Currently always 2 */
233218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut);
233220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDelete)(Fts5Tokenizer*);
233221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xTokenize)(Fts5Tokenizer*,
233222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx,
233223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int flags, /* Mask of FTS5_TOKENIZE_* flags */
233224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText, int nText,
233225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLocale, int nLocale,
233226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xToken)(
233227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx, /* Copy of 2nd argument to xTokenize() */
233228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tflags, /* Mask of FTS5_TOKEN_* flags */
233229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pToken, /* Pointer to buffer containing token */
233230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nToken, /* Size of token in bytes */
233231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iStart, /* Byte offset of token within input text */
233232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iEnd /* Byte offset of end of token within input text */
233233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
233234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
233235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
233236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
233238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** New code should use the fts5_tokenizer_v2 type to define tokenizer
233239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** implementations. The following type is included for legacy applications
233240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that still use it.
233241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
232622 233242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct fts5_tokenizer fts5_tokenizer;
232623 233243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct fts5_tokenizer {
232624 233244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut);
232625 233245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDelete)(Fts5Tokenizer*);
232626 233246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xTokenize)(Fts5Tokenizer*,
@@ -232635,10 +233255,11 @@
232635 233255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iStart, /* Byte offset of token within input text */
232636 233256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iEnd /* Byte offset of end of token within input text */
232637 233257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
232638 233258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
232639 233259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
233260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
232640 233261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232641 233262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Flags that may be passed as the third argument to xTokenize() */
232642 233263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_TOKENIZE_QUERY 0x0001
232643 233264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_TOKENIZE_PREFIX 0x0002
232644 233265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_TOKENIZE_DOCUMENT 0x0004
@@ -232655,11 +233276,11 @@
232655 233276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*************************************************************************
232656 233277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** FTS5 EXTENSION REGISTRATION API
232657 233278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
232658 233279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct fts5_api fts5_api;
232659 233280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct fts5_api {
232660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iVersion; /* Currently always set to 2 */
233281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iVersion; /* Currently always set to 3 */
232661 233282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232662 233283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Create a new tokenizer */
232663 233284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xCreateTokenizer)(
232664 233285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_api *pApi,
232665 233286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName,
@@ -232682,10 +233303,29 @@
232682 233303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName,
232683 233304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserData,
232684 233305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_extension_function xFunction,
232685 233306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDestroy)(void*)
232686 233307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
233308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* APIs below this point are only available if iVersion>=3 */
233310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Create a new tokenizer */
233312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xCreateTokenizer_v2)(
233313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_api *pApi,
233314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName,
233315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUserData,
233316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 *pTokenizer,
233317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDestroy)(void*)
233318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
233319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Find an existing tokenizer */
233321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xFindTokenizer_v2)(
233322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_api *pApi,
233323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName,
233324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void **ppUserData,
233325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 **ppTokenizer
233326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
232687 233327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
232688 233328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232689 233329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
232690 233330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** END OF REGISTRATION API
232691 233331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************/
@@ -232858,14 +233498,17 @@
232858 233498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts5Config Fts5Config;
232859 233499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts5TokenizerConfig Fts5TokenizerConfig;
232860 233500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232861 233501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5TokenizerConfig {
232862 233502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Tokenizer *pTok;
232863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5_tokenizer *pTokApi;
233503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 *pApi2;
233504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer *pApi1;
232864 233505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **azArg;
232865 233506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg;
232866 233507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ePattern; /* FTS_PATTERN_XXX constant */
233508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLocale; /* Current locale to use */
233509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLocale; /* Size of pLocale in bytes */
232867 233510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
232868 233511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232869 233512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
232870 233513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An instance of the following structure encodes all information that can
232871 233514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be gleaned from the CREATE VIRTUAL TABLE statement.
@@ -232902,10 +233545,12 @@
232902 233545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is only used for debugging. If set to false, any prefix indexes
232903 233546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are ignored. This value is configured using:
232904 233547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
232905 233548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** INSERT INTO tbl(tbl, rank) VALUES('prefix-index', $bPrefixIndex);
232906 233549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
233550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bLocale:
233551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set to true if locale=1 was specified when the table was created.
232907 233552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
232908 233553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5Config {
232909 233554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db; /* Database handle */
232910 233555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Global *pGlobal; /* Global fts5 object for handle db */
232911 233556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zDb; /* Database holding FTS index (e.g. "main") */
@@ -232919,14 +233564,16 @@
232919 233564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bContentlessDelete; /* "contentless_delete=" option (dflt==0) */
232920 233565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zContent; /* content table */
232921 233566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zContentRowid; /* "content_rowid=" option value */
232922 233567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bColumnsize; /* "columnsize=" option value (dflt==1) */
232923 233568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bTokendata; /* "tokendata=" option value (dflt==0) */
233569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bLocale; /* "locale=" option value (dflt==0) */
232924 233570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eDetail; /* FTS5_DETAIL_XXX value */
232925 233571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zContentExprlist;
232926 233572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5TokenizerConfig t;
232927 233573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bLock; /* True when table is preparing statement */
233574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
232928 233575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232929 233576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Values loaded from the %_config table */
232930 233577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iVersion; /* fts5 file format 'version' */
232931 233578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCookie; /* Incremented when %_config is modified */
232932 233579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pgsz; /* Approximate page size used in %_data */
@@ -232988,10 +233635,12 @@
232988 233635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the value of a single config attribute */
232989 233636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5ConfigSetValue(Fts5Config*, const char*, sqlite3_value*, int*);
232990 233637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232991 233638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5ConfigParseRank(const char*, char**, char**);
232992 233639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3Fts5ConfigErrmsg(Fts5Config *pConfig, const char *zFmt, ...);
233641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
232993 233642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
232994 233643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** End of interface to code in fts5_config.c.
232995 233644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**************************************************************************/
232996 233645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
232997 233646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**************************************************************************
@@ -233032,11 +233681,11 @@
233032 233681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233033 233682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Write and decode big-endian 32-bit integer values */
233034 233683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void sqlite3Fts5Put32(u8*, int);
233035 233684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5Get32(const u8*);
233036 233685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_POS2COLUMN(iPos) (int)(iPos >> 32)
233686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_POS2COLUMN(iPos) (int)((iPos >> 32) & 0x7FFFFFFF)
233038 233687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_POS2OFFSET(iPos) (int)(iPos & 0x7FFFFFFF)
233039 233688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233040 233689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts5PoslistReader Fts5PoslistReader;
233041 233690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5PoslistReader {
233042 233691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Variables used only by sqlite3Fts5PoslistIterXXX() functions. */
@@ -233323,10 +233972,21 @@
233323 233972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233324 233973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static Fts5Table *sqlite3Fts5TableFromCsrid(Fts5Global*, i64);
233325 233974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233326 233975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5FlushToDisk(Fts5Table*);
233327 233976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3Fts5ExtractText(
233978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Config *pConfig,
233979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal, /* Value to extract text from */
233980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bContent, /* Loaded from content table */
233981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pbResetTokenizer, /* OUT: True if ClearLocale() required */
233982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char **ppText, /* OUT: Pointer to text buffer */
233983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pnText /* OUT: Size of (*ppText) in bytes */
233984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
233985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3Fts5ClearLocale(Fts5Config *pConfig);
233987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233328 233988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
233329 233989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** End of interface to code in fts5.c.
233330 233990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**************************************************************************/
233331 233991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233332 233992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**************************************************************************
@@ -233402,11 +234062,11 @@
233402 234062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageRename(Fts5Storage*, const char *zName);
233403 234063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233404 234064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5DropAll(Fts5Config*);
233405 234065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5CreateTable(Fts5Config*, const char*, const char*, int, char **);
233406 234066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int sqlite3Fts5StorageDelete(Fts5Storage *p, i64, sqlite3_value**);
234067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3Fts5StorageDelete(Fts5Storage *p, i64, sqlite3_value**, int);
233408 234068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageContentInsert(Fts5Storage *p, sqlite3_value**, i64*);
233409 234069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageIndexInsert(Fts5Storage *p, sqlite3_value**, i64);
233410 234070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233411 234071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageIntegrity(Fts5Storage *p, int iArg);
233412 234072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -233428,10 +234088,13 @@
233428 234088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageRebuild(Fts5Storage *p);
233429 234089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageOptimize(Fts5Storage *p);
233430 234090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageMerge(Fts5Storage *p, int nMerge);
233431 234091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5StorageReset(Fts5Storage *p);
233432 234092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
234093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3Fts5StorageReleaseDeleteRow(Fts5Storage*);
234094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3Fts5StorageFindDeleteRow(Fts5Storage *p, i64 iDel);
234095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233433 234096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
233434 234097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** End of interface to code in fts5_storage.c.
233435 234098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**************************************************************************/
233436 234099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
233437 234100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -235357,10 +236020,11 @@
235357 236020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iOff = iEndOff;
235358 236021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235359 236022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235360 236023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
235361 236024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
236025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
235362 236026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235363 236027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
235364 236028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of highlight() function.
235365 236029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
235366 236030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts5HighlightFunction(
@@ -235388,16 +236052,23 @@
235388 236052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pApi->xColumnText(pFts, iCol, &ctx.zIn, &ctx.nIn);
235389 236053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_RANGE ){
235390 236054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_text(pCtx, "", -1, SQLITE_STATIC);
235391 236055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
235392 236056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( ctx.zIn ){
236057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLoc = 0; /* Locale of column iCol */
236058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLoc = 0; /* Size of pLoc in bytes */
235393 236059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
235394 236060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts5CInstIterInit(pApi, pFts, iCol, &ctx.iter);
235395 236061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235396 236062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235397 236063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
235398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pApi->xTokenize(pFts, ctx.zIn, ctx.nIn, (void*)&ctx,fts5HighlightCb);
236064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xColumnLocale(pFts, iCol, &pLoc, &nLoc);
236065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
236067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xTokenize_v2(
236068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFts, ctx.zIn, ctx.nIn, pLoc, nLoc, (void*)&ctx, fts5HighlightCb
236069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
235399 236070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235400 236071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ctx.bOpen ){
235401 236072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5HighlightAppend(&rc, &ctx, ctx.zClose, -1);
235402 236073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235403 236074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5HighlightAppend(&rc, &ctx, &ctx.zIn[ctx.iOff], ctx.nIn - ctx.iOff);
@@ -235590,19 +236261,23 @@
235590 236261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235591 236262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235592 236263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sFinder, 0, sizeof(Fts5SFinder));
235593 236264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nCol; i++){
235594 236265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCol<0 || iCol==i ){
236266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLoc = 0; /* Locale of column iCol */
236267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLoc = 0; /* Size of pLoc in bytes */
235595 236268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDoc;
235596 236269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDocsize;
235597 236270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
235598 236271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sFinder.iPos = 0;
235599 236272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sFinder.nFirst = 0;
235600 236273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pApi->xColumnText(pFts, i, &sFinder.zDoc, &nDoc);
235601 236274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) break;
235602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pApi->xTokenize(pFts,
235603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sFinder.zDoc, nDoc, (void*)&sFinder,fts5SentenceFinderCb
236275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xColumnLocale(pFts, i, &pLoc, &nLoc);
236276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) break;
236277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xTokenize_v2(pFts,
236278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sFinder.zDoc, nDoc, pLoc, nLoc, (void*)&sFinder, fts5SentenceFinderCb
235604 236279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
235605 236280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) break;
235606 236281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pApi->xColumnSize(pFts, i, &nDocsize);
235607 236282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) break;
235608 236283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -235656,10 +236331,13 @@
235656 236331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235657 236332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && nColSize==0 ){
235658 236333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pApi->xColumnSize(pFts, iBestCol, &nColSize);
235659 236334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235660 236335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ctx.zIn ){
236336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLoc = 0; /* Locale of column iBestCol */
236337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLoc = 0; /* Bytes in pLoc */
236338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
235661 236339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
235662 236340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts5CInstIterInit(pApi, pFts, iBestCol, &ctx.iter);
235663 236341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235664 236342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235665 236343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.iRangeStart = iBestStart;
@@ -235674,11 +236352,16 @@
235674 236352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( ctx.iter.iStart>=0 && ctx.iter.iStart<iBestStart && rc==SQLITE_OK ){
235675 236353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts5CInstIterNext(&ctx.iter);
235676 236354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235677 236355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235678 236356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
235679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pApi->xTokenize(pFts, ctx.zIn, ctx.nIn, (void*)&ctx,fts5HighlightCb);
236357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xColumnLocale(pFts, iBestCol, &pLoc, &nLoc);
236358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
236360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xTokenize_v2(
236361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFts, ctx.zIn, ctx.nIn, pLoc, nLoc, (void*)&ctx,fts5HighlightCb
236362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
235680 236363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235681 236364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ctx.bOpen ){
235682 236365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5HighlightAppend(&rc, &ctx, ctx.zClose, -1);
235683 236366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235684 236367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ctx.iRangeEnd>=(nColSize-1) ){
@@ -235857,21 +236540,69 @@
235857 236540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_double(pCtx, -1.0 * score);
235858 236541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
235859 236542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error_code(pCtx, rc);
235860 236543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235861 236544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
236545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
236547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of fts5_get_locale() function.
236548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
236549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts5GetLocaleFunction(
236550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Fts5ExtensionApi *pApi, /* API offered by current FTS version */
236551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pFts, /* First arg to pass to pApi functions */
236552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx, /* Context for returning result/error */
236553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVal, /* Number of values in apVal[] array */
236554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal /* Array of trailing arguments */
236555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
236556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol = 0;
236557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eType = 0;
236558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
236559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zLocale = 0;
236560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLocale = 0;
236561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* xColumnLocale() must be available */
236563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pApi->iVersion>=4 );
236564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nVal!=1 ){
236566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z = "wrong number of arguments to function fts5_get_locale()";
236567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error(pCtx, z, -1);
236568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
236569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType = sqlite3_value_numeric_type(apVal[0]);
236572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType!=SQLITE_INTEGER ){
236573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z = "non-integer argument passed to function fts5_get_locale()";
236574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error(pCtx, z, -1);
236575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
236576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCol = sqlite3_value_int(apVal[0]);
236579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iCol<0 || iCol>=pApi->xColumnCount(pFts) ){
236580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_code(pCtx, SQLITE_RANGE);
236581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
236582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xColumnLocale(pFts, iCol, &zLocale, &nLocale);
236585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
236586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_code(pCtx, rc);
236587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
236588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, zLocale, nLocale, SQLITE_TRANSIENT);
236591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
235862 236592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235863 236593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5AuxInit(fts5_api *pApi){
235864 236594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Builtin {
235865 236595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFunc; /* Function name (nul-terminated) */
235866 236596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserData; /* User-data pointer */
235867 236597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_extension_function xFunc;/* Callback function */
235868 236598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDestroy)(void*); /* Destructor function */
235869 236599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} aBuiltin [] = {
235870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "snippet", 0, fts5SnippetFunction, 0 },
235871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "highlight", 0, fts5HighlightFunction, 0 },
235872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "bm25", 0, fts5Bm25Function, 0 },
236600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "snippet", 0, fts5SnippetFunction, 0 },
236601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "highlight", 0, fts5HighlightFunction, 0 },
236602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "bm25", 0, fts5Bm25Function, 0 },
236603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fts5_get_locale", 0, fts5GetLocaleFunction, 0 },
235873 236604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
235874 236605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Return code */
235875 236606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* To iterate through builtin functions */
235876 236607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
235877 236608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; rc==SQLITE_OK && i<ArraySize(aBuiltin); i++){
@@ -236677,10 +237408,20 @@
236677 237408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
236678 237409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pConfig->bColumnsize = (zArg[0]=='1');
236679 237410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
236680 237411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
236681 237412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
237414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_strnicmp("locale", zCmd, nCmd)==0 ){
237415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (zArg[0]!='0' && zArg[0]!='1') || zArg[1]!='\0' ){
237416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pzErr = sqlite3_mprintf("malformed locale=... directive");
237417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
237418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
237419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->bLocale = (zArg[0]=='1');
237420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
237421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
237422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236682 237423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
236683 237424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_strnicmp("detail", zCmd, nCmd)==0 ){
236684 237425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const Fts5Enum aDetail[] = {
236685 237426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "none", FTS5_DETAIL_NONE },
236686 237427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "full", FTS5_DETAIL_FULL },
@@ -236967,11 +237708,15 @@
236967 237708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
236968 237709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void sqlite3Fts5ConfigFree(Fts5Config *pConfig){
236969 237710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig ){
236970 237711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
236971 237712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->t.pTok ){
236972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->t.pTokApi->xDelete(pConfig->t.pTok);
237713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->t.pApi1 ){
237714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pApi1->xDelete(pConfig->t.pTok);
237715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
237716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pApi2->xDelete(pConfig->t.pTok);
237717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
236973 237718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
236974 237719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free((char*)pConfig->t.azArg);
236975 237720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pConfig->zDb);
236976 237721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pConfig->zName);
236977 237722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pConfig->nCol; i++){
@@ -237050,13 +237795,19 @@
237050 237795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pText ){
237051 237796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->t.pTok==0 ){
237052 237797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5LoadTokenizer(pConfig);
237053 237798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237054 237799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
237055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pConfig->t.pTokApi->xTokenize(
237056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->t.pTok, pCtx, flags, pText, nText, xToken
237057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
237800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->t.pApi1 ){
237801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pConfig->t.pApi1->xTokenize(
237802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pTok, pCtx, flags, pText, nText, xToken
237803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
237804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
237805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pConfig->t.pApi2->xTokenize(pConfig->t.pTok, pCtx, flags,
237806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pText, nText, pConfig->t.pLocale, pConfig->t.nLocale, xToken
237807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
237808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
237058 237809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237059 237810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237060 237811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
237061 237812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237062 237813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -237309,26 +238060,46 @@
237309 238060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK
237310 238061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& iVersion!=FTS5_CURRENT_VERSION
237311 238062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& iVersion!=FTS5_CURRENT_VERSION_SECUREDELETE
237312 238063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
237313 238064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_ERROR;
237314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pConfig->pzErrmsg ){
237315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( 0==*pConfig->pzErrmsg );
237316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pConfig->pzErrmsg = sqlite3_mprintf("invalid fts5 file format "
237317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "(found %d, expected %d or %d) - run 'rebuild'",
237318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iVersion, FTS5_CURRENT_VERSION, FTS5_CURRENT_VERSION_SECUREDELETE
237319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
237320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
238065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5ConfigErrmsg(pConfig, "invalid fts5 file format "
238066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "(found %d, expected %d or %d) - run 'rebuild'",
238067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iVersion, FTS5_CURRENT_VERSION, FTS5_CURRENT_VERSION_SECUREDELETE
238068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
237321 238069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
237322 238070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pConfig->iVersion = iVersion;
237323 238071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237324 238072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
237325 238073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
237326 238074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pConfig->iCookie = iCookie;
237327 238075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237328 238076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
237329 238077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
238078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
238079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
238080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set (*pConfig->pzErrmsg) to point to an sqlite3_malloc()ed buffer
238081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** containing the error message created using printf() style formatting
238082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** string zFmt and its trailing arguments.
238083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
238084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3Fts5ConfigErrmsg(Fts5Config *pConfig, const char *zFmt, ...){
238085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_list ap; /* ... printf arguments */
238086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zMsg = 0;
238087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
238088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_start(ap, zFmt);
238089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zMsg = sqlite3_vmprintf(zFmt, ap);
238090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->pzErrmsg ){
238091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( *pConfig->pzErrmsg==0 );
238092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pConfig->pzErrmsg = zMsg;
238093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
238094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zMsg);
238095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
238096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
238097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_end(ap);
238098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
238099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
238100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
237330 238101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
237331 238102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
237332 238103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2014 May 31
237333 238104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
237334 238105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The author disclaims copyright to this source code. In place of
@@ -237614,15 +238385,16 @@
237614 238385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
t = fts5ExprGetToken(&sParse, &z, &token);
237615 238386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5Parser(pEngine, t, token, &sParse);
237616 238387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( sParse.rc==SQLITE_OK && t!=FTS5_EOF );
237617 238388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5ParserFree(pEngine, fts5ParseFree);
237618 238389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
238390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sParse.pExpr || sParse.rc!=SQLITE_OK );
237619 238391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert_expr_depth_ok(sParse.rc, sParse.pExpr);
237620 238392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
237621 238393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the LHS of the MATCH expression was a user column, apply the
237622 238394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implicit column-filter. */
237623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iCol<pConfig->nCol && sParse.pExpr && sParse.rc==SQLITE_OK ){
238395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sParse.rc==SQLITE_OK && iCol<pConfig->nCol ){
237624 238396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n = sizeof(Fts5Colset);
237625 238397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Colset *pColset = (Fts5Colset*)sqlite3Fts5MallocZero(&sParse.rc, n);
237626 238398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pColset ){
237627 238399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColset->nCol = 1;
237628 238400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColset->aiCol[0] = iCol;
@@ -237635,19 +238407,11 @@
237635 238407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppNew = pNew = sqlite3_malloc(sizeof(Fts5Expr));
237636 238408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew==0 ){
237637 238409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sParse.rc = SQLITE_NOMEM;
237638 238410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5ParseNodeFree(sParse.pExpr);
237639 238411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
237640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !sParse.pExpr ){
237641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const int nByte = sizeof(Fts5ExprNode);
237642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->pRoot = (Fts5ExprNode*)sqlite3Fts5MallocZero(&sParse.rc, nByte);
237643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNew->pRoot ){
237644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->pRoot->bEof = 1;
237645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
237646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
237647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->pRoot = sParse.pExpr;
237648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
238412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->pRoot = sParse.pExpr;
237649 238413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pIndex = 0;
237650 238414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pConfig = pConfig;
237651 238415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->apExprPhrase = sParse.apPhrase;
237652 238416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nPhrase = sParse.nPhrase;
237653 238417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->bDesc = 0;
@@ -238461,11 +239225,11 @@
238461 239225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->bEof = 1;
238462 239226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
238463 239227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
238464 239228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
238465 239229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5IndexIter *pIter = pPhrase->aTerm[j].pIter;
238466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIter->iRowid==iLast || pIter->bEof ) continue;
239230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIter->iRowid==iLast ) continue;
238467 239231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bMatch = 0;
238468 239232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fts5ExprAdvanceto(pIter, bDesc, &iLast, &rc, &pNode->bEof) ){
238469 239233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
238470 239234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
238471 239235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -238983,13 +239747,10 @@
238983 239747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
238984 239748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int SZALLOC = 8;
238985 239749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5ExprNearset *pRet = 0;
238986 239750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
238987 239751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->rc==SQLITE_OK ){
238988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pPhrase==0 ){
238989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return pNear;
238990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
238991 239752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNear==0 ){
238992 239753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 nByte;
238993 239754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nByte = sizeof(Fts5ExprNearset) + SZALLOC * sizeof(Fts5ExprPhrase*);
238994 239755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRet = sqlite3_malloc64(nByte);
238995 239756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRet==0 ){
@@ -243382,11 +244143,11 @@
243382 244143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iOff = 4;
243383 244144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
243384 244145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
243385 244146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iOff<pIter->iEndofDoclist ){
243386 244147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Next entry is on the current page */
243387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iDelta;
244148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 iDelta;
243388 244149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iOff += sqlite3Fts5GetVarint(&pIter->pLeaf->p[iOff], (u64*)&iDelta);
243389 244150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIter->iLeafOffset = iOff;
243390 244151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIter->iRowid += iDelta;
243391 244152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( (pIter->flags & FTS5_SEGITER_ONETERM)==0 ){
243392 244153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIter->pSeg ){
@@ -250372,15 +251133,32 @@
250372 251133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250373 251134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
250374 251135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Each tokenizer module registered with the FTS5 module is represented
250375 251136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by an object of the following type. All such objects are stored as part
250376 251137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the Fts5Global.pTok list.
251138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
251139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bV2Native:
251140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** True if the tokenizer was registered using xCreateTokenizer_v2(), false
251141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for xCreateTokenizer(). If this variable is true, then x2 is populated
251142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with the routines as supplied by the caller and x1 contains synthesized
251143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** wrapper routines. In this case the user-data pointer passed to
251144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x1.xCreate should be a pointer to the Fts5TokenizerModule structure,
251145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not a copy of pUserData.
251146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
251147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Of course, if bV2Native is false, then x1 contains the real routines and
251148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x2 the synthesized ones. In this case a pointer to the Fts5TokenizerModule
251149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** object should be passed to x2.xCreate.
251150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
251151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The synthesized wrapper routines are necessary for xFindTokenizer(_v2)
251152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** calls.
250377 251153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
250378 251154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5TokenizerModule {
250379 251155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName; /* Name of tokenizer */
250380 251156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserData; /* User pointer passed to xCreate() */
250381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5_tokenizer x; /* Tokenizer functions */
251157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bV2Native; /* True if v2 native tokenizer */
251158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer x1; /* Tokenizer functions */
251159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 x2; /* V2 tokenizer functions */
250382 251160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDestroy)(void*); /* Destructor function */
250383 251161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5TokenizerModule *pNext; /* Next registered tokenizer module */
250384 251162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
250385 251163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250386 251164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5FullTable {
@@ -250464,11 +251242,11 @@
250464 251242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250465 251243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Auxiliary data storage */
250466 251244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Auxiliary *pAux; /* Currently executing extension function */
250467 251245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Auxdata *pAuxdata; /* First in linked list of saved aux-data */
250468 251246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Cache used by auxiliary functions xInst() and xInstCount() */
251247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Cache used by auxiliary API functions xInst() and xInstCount() */
250470 251248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5PoslistReader *aInstIter; /* One for each phrase */
250471 251249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nInstAlloc; /* Size of aInst[] array (entries / 3) */
250472 251250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nInstCount; /* Number of phrase instances */
250473 251251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aInst; /* 3 integers per phrase instance */
250474 251252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
@@ -250499,10 +251277,16 @@
250499 251277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5CSR_REQUIRE_POSLIST 0x40
250500 251278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250501 251279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BitFlagAllTest(x,y) (((x) & (y))==(y))
250502 251280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BitFlagTest(x,y) (((x) & (y))!=0)
250503 251281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
251282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
251283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The subtype value and header bytes used by fts5_locale().
251284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
251285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_LOCALE_SUBTYPE ((unsigned int)'L')
251286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_LOCALE_HEADER "\x00\xE0\xB2\xEB"
251287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
250504 251288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250505 251289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
250506 251290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros to Set(), Clear() and Test() cursor flags.
250507 251291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
250508 251292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define CsrFlagSet(pCsr, flag) ((pCsr)->csrflags |= (flag))
@@ -250673,12 +251457,11 @@
250673 251457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5ConfigDeclareVtab(pConfig);
250674 251458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
250675 251459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250676 251460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Load the initial configuration */
250677 251461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
250678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex);
250679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Fts5IndexRollback(pTab->p.pIndex);
251462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ConfigLoad(pTab->p.pConfig, pTab->p.pConfig->iCookie-1);
250680 251463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
250681 251464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250682 251465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && pConfig->eContent==FTS5_CONTENT_NORMAL ){
250683 251466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, (int)1);
250684 251467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -250876,11 +251659,11 @@
250876 251659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
250877 251660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCol==nCol+1 ){
250878 251661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bSeenRank ) continue;
250879 251662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idxStr[iIdxStr++] = 'r';
250880 251663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bSeenRank = 1;
250881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( iCol>=0 ){
251664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
250882 251665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSeenMatch++;
250883 251666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idxStr[iIdxStr++] = 'M';
250884 251667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_snprintf(6, &idxStr[iIdxStr], "%d", iCol);
250885 251668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idxStr += strlen(&idxStr[iIdxStr]);
250886 251669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( idxStr[iIdxStr]=='\0' );
@@ -251262,11 +252045,11 @@
251262 252045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
251263 252046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
251264 252047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_prepare_v3(pConfig->db, zSql, -1,
251265 252048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PREPARE_PERSISTENT, &pRet, 0);
251266 252049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
251267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pConfig->pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(pConfig->db));
252050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5ConfigErrmsg(pConfig, "%s", sqlite3_errmsg(pConfig->db));
251268 252051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251269 252052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zSql);
251270 252053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251271 252054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
251272 252055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
@@ -251497,10 +252280,192 @@
251497 252280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p->p.base.zErrMsg);
251498 252281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->p.base.zErrMsg = sqlite3_vmprintf(zFormat, ap);
251499 252282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
251500 252283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251501 252284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
252286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Arrange for subsequent calls to sqlite3Fts5Tokenize() to use the locale
252287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** specified by pLocale/nLocale. The buffer indicated by pLocale must remain
252288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** valid until after the final call to sqlite3Fts5Tokenize() that will use
252289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the locale.
252290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
252291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts5SetLocale(
252292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Config *pConfig,
252293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zLocale,
252294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLocale
252295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
252296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerConfig *pT = &pConfig->t;
252297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pT->pLocale = zLocale;
252298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pT->nLocale = nLocale;
252299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
252302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Clear any locale configured by an earlier call to fts5SetLocale() or
252303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3Fts5ExtractText().
252304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
252305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3Fts5ClearLocale(Fts5Config *pConfig){
252306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5SetLocale(pConfig, 0, 0);
252307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
252310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used to extract utf-8 text from an sqlite3_value. This
252311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is usually done in order to tokenize it. For example, when:
252312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * a value is written to an fts5 table,
252314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * a value is deleted from an FTS5_CONTENT_NORMAL table,
252315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * a value containing a query expression is passed to xFilter()
252316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and so on.
252318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function handles 2 cases:
252320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1) Ordinary values. The text can be extracted from these using
252322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_value_text().
252323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2) Combination text/locale blobs created by fts5_locale(). There
252325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are several cases for these:
252326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Blobs tagged with FTS5_LOCALE_SUBTYPE.
252328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Blobs read from the content table of a locale=1 external-content
252329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table, and
252330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Blobs read from the content table of a locale=1 regular
252331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** content table.
252332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The first two cases above should have the 4 byte FTS5_LOCALE_HEADER
252334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** header. It is an error if a blob with the subtype or a blob read
252335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the content table of an external content table does not have
252336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the required header. A blob read from the content table of a regular
252337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** locale=1 table does not have the header. This is to save space.
252338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If successful, SQLITE_OK is returned and output parameters (*ppText)
252340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and (*pnText) are set to point to a buffer containing the extracted utf-8
252341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** text and its length in bytes, respectively. The buffer is not
252342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nul-terminated. It has the same lifetime as the sqlite3_value object
252343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from which it is extracted.
252344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Parameter bContent must be true if the value was read from an indexed
252346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** column (i.e. not UNINDEXED) of the on disk content.
252347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If pbResetTokenizer is not NULL and if case (2) is used, then
252349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts5SetLocale() is called to ensure subsequent sqlite3Fts5Tokenize() calls
252350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** use the locale. In this case (*pbResetTokenizer) is set to true before
252351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returning, to indicate that the caller must call sqlite3Fts5ClearLocale()
252352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to clear the locale after tokenizing the text.
252353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
252354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3Fts5ExtractText(
252355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Config *pConfig,
252356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal, /* Value to extract text from */
252357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bContent, /* True if indexed table content */
252358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pbResetTokenizer, /* OUT: True if xSetLocale(NULL) required */
252359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char **ppText, /* OUT: Pointer to text buffer */
252360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pnText /* OUT: Size of (*ppText) in bytes */
252361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
252362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText = 0;
252363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0;
252364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
252365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bDecodeBlob = 0;
252366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pbResetTokenizer==0 || *pbResetTokenizer==0 );
252368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( bContent==0 || pConfig->eContent!=FTS5_CONTENT_NONE );
252369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( bContent==0 || sqlite3_value_subtype(pVal)==0 );
252370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_value_type(pVal)==SQLITE_BLOB ){
252372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_value_subtype(pVal)==FTS5_LOCALE_SUBTYPE
252373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (bContent && pConfig->bLocale)
252374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
252375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bDecodeBlob = 1;
252376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bDecodeBlob ){
252380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int SZHDR = sizeof(FTS5_LOCALE_HEADER)-1;
252381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const u8 *pBlob = sqlite3_value_blob(pVal);
252382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBlob = sqlite3_value_bytes(pVal);
252383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Unless this blob was read from the %_content table of an
252385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FTS5_CONTENT_NORMAL table, it should have the 4 byte fts5_locale()
252386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** header. Check for this. If it is not found, return an error. */
252387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (!bContent || pConfig->eContent!=FTS5_CONTENT_NORMAL) ){
252388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nBlob<SZHDR || memcmp(FTS5_LOCALE_HEADER, pBlob, SZHDR) ){
252389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
252390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
252391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob += 4;
252392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBlob -= 4;
252393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
252397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLocale = 0;
252398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(nLocale=0; nLocale<nBlob; nLocale++){
252400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBlob[nLocale]==0x00 ) break;
252401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nLocale==nBlob || nLocale==0 ){
252403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
252404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
252405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pText = (const char*)&pBlob[nLocale+1];
252406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nText = nBlob-nLocale-1;
252407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pbResetTokenizer ){
252409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5SetLocale(pConfig, (const char*)pBlob, nLocale);
252410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbResetTokenizer = 1;
252411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
252416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pText = (const char*)sqlite3_value_text(pVal);
252417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nText = sqlite3_value_bytes(pVal);
252418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppText = pText;
252421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnText = nText;
252422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
252423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
252426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Argument pVal is the text of a full-text search expression. It may or
252427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** may not have been wrapped by fts5_locale(). This function extracts
252428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the text of the expression, and sets output variable (*pzText) to
252429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** point to a nul-terminated buffer containing the expression.
252430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If pVal was an fts5_locale() value, then fts5SetLocale() is called to
252432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set the tokenizer to use the specified locale.
252433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
252434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If output variable (*pbFreeAndReset) is set to true, then the caller
252435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is required to (a) call sqlite3Fts5ClearLocale() to reset the tokenizer
252436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** locale, and (b) call sqlite3_free() to free (*pzText).
252437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
252438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5ExtractExprText(
252439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Config *pConfig, /* Fts5 configuration */
252440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal, /* Value to extract expression text from */
252441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char **pzText, /* OUT: nul-terminated buffer of text */
252442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pbFreeAndReset /* OUT: Free (*pzText) and clear locale */
252443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
252444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zText = 0;
252445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0;
252446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
252447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bReset = 0;
252448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbFreeAndReset = 0;
252450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(pConfig, pVal, 0, &bReset, &zText, &nText);
252451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
252452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bReset ){
252453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pzText = sqlite3Fts5Mprintf(&rc, "%.*s", nText, zText);
252454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
252455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5ClearLocale(pConfig);
252456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
252457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbFreeAndReset = 1;
252458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
252460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pzText = (char*)zText;
252461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
252465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
251502 252467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
251503 252468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
251504 252469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the xFilter interface for the virtual table. See
251505 252470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the virtual table xFilter method documentation for additional
251506 252471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** information.
@@ -251532,17 +252497,11 @@
251532 252497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **pzErrmsg = pConfig->pzErrmsg;
251533 252498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
251534 252499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iIdxStr = 0;
251535 252500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Expr *pExpr = 0;
251536 252501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
251537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pConfig->bLock ){
251538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab->p.base.zErrMsg = sqlite3_mprintf(
251539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "recursively defined fts5 content table"
251540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
251541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_ERROR;
251542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
251543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
252502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pConfig->bLock==0 );
251544 252503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->ePlan ){
251545 252504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5FreeCursorComponents(pCsr);
251546 252505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&pCsr->ePlan, 0, sizeof(Fts5Cursor) - ((u8*)&pCsr->ePlan-(u8*)pCsr));
251547 252506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251548 252507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -251562,12 +252521,18 @@
251562 252521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( idxStr[iIdxStr++] ){
251563 252522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'r':
251564 252523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRank = apVal[i];
251565 252524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
251566 252525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'M': {
251567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zText = (const char*)sqlite3_value_text(apVal[i]);
252526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zText = 0;
252527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bFreeAndReset = 0;
252528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bInternal = 0;
252529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5ExtractExprText(pConfig, apVal[i], &zText, &bFreeAndReset);
252531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) goto filter_out;
251568 252532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zText==0 ) zText = "";
252533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
251569 252534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCol = 0;
251570 252535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
251571 252536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCol = iCol*10 + (idxStr[iIdxStr]-'0');
251572 252537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIdxStr++;
251573 252538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( idxStr[iIdxStr]>='0' && idxStr[iIdxStr]<='9' );
@@ -251575,21 +252540,27 @@
251575 252540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zText[0]=='*' ){
251576 252541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The user has issued a query of the form "MATCH '*...'". This
251577 252542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** indicates that the MATCH expression is not a full text query,
251578 252543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** but a request for an internal parameter. */
251579 252544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts5SpecialMatch(pTab, pCsr, &zText[1]);
251580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto filter_out;
252545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bInternal = 1;
251581 252546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
251582 252547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **pzErr = &pTab->p.base.zErrMsg;
251583 252548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5ExprNew(pConfig, 0, iCol, zText, &pExpr, pzErr);
251584 252549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
251585 252550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5ExprAnd(&pCsr->pExpr, pExpr);
251586 252551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr = 0;
251587 252552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ) goto filter_out;
251589 252553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251590 252554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bFreeAndReset ){
252556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zText);
252557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5ClearLocale(pConfig);
252558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bInternal || rc!=SQLITE_OK ) goto filter_out;
252561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
251591 252562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
251592 252563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251593 252564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'L':
251594 252565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'G': {
251595 252566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bGlob = (idxStr[iIdxStr-1]=='G');
@@ -251893,11 +252864,11 @@
251893 252864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
251894 252865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
251895 252866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eType1 = sqlite3_value_type(apVal[1]);
251896 252867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eType1==SQLITE_INTEGER ){
251897 252868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iDel = sqlite3_value_int64(apVal[1]);
251898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageDelete(pTab->pStorage, iDel, &apVal[2]);
252869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iDel, &apVal[2], 0);
251899 252870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251900 252871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
251901 252872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
251902 252873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
251903 252874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts5StorageInsert(
@@ -252017,59 +252988,81 @@
252017 252988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252018 252989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252019 252990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* DELETE */
252020 252991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( nArg==1 ){
252021 252992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iDel = sqlite3_value_int64(apVal[0]); /* Rowid to delete */
252022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageDelete(pTab->pStorage, iDel, 0);
252993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iDel, 0, 0);
252023 252994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bUpdateOrDelete = 1;
252024 252995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252025 252996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252026 252997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* INSERT or UPDATE */
252027 252998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else{
252028 252999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eType1 = sqlite3_value_numeric_type(apVal[1]);
252029 253000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( eType1!=SQLITE_INTEGER && eType1!=SQLITE_NULL ){
252031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_MISMATCH;
253001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Ensure that no fts5_locale() values are written to locale=0 tables.
253002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** And that no blobs except fts5_locale() blobs are written to indexed
253003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (i.e. not UNINDEXED) columns of locale=1 tables. */
253004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
253005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<pConfig->nCol; ii++){
253006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_value_type(apVal[ii+2])==SQLITE_BLOB ){
253007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bSub = (sqlite3_value_subtype(apVal[ii+2])==FTS5_LOCALE_SUBTYPE);
253008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pConfig->bLocale && !bSub && pConfig->abUnindexed[ii]==0)
253009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (pConfig->bLocale==0 && bSub)
253010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
253011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->bLocale==0 ){
253012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5SetVtabError(pTab, "fts5_locale() requires locale=1");
253013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_MISMATCH;
253015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto update_out;
253016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252032 253018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252033 253019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( eType0!=SQLITE_INTEGER ){
253020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType0!=SQLITE_INTEGER ){
252035 253021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* An INSERT statement. If the conflict-mode is REPLACE, first remove
252036 253022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the current entry (if any). */
252037 253023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eConflict==SQLITE_REPLACE && eType1==SQLITE_INTEGER ){
252038 253024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iNew = sqlite3_value_int64(apVal[1]); /* Rowid to delete */
252039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageDelete(pTab->pStorage, iNew, 0);
253025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iNew, 0, 0);
252040 253026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bUpdateOrDelete = 1;
252041 253027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252042 253028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5StorageInsert(&rc, pTab, apVal, pRowid);
252043 253029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252044 253030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252045 253031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* UPDATE */
252046 253032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else{
252047 253033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iOld = sqlite3_value_int64(apVal[0]); /* Old rowid */
252048 253034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iNew = sqlite3_value_int64(apVal[1]); /* New rowid */
252049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( eType1==SQLITE_INTEGER && iOld!=iNew ){
253035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType1!=SQLITE_INTEGER ){
253036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_MISMATCH;
253037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( iOld!=iNew ){
252050 253038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eConflict==SQLITE_REPLACE ){
252051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageDelete(pTab->pStorage, iOld, 0);
253039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iOld, 0, 1);
252052 253040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
252053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageDelete(pTab->pStorage, iNew, 0);
253041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iNew, 0, 0);
252054 253042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252055 253043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5StorageInsert(&rc, pTab, apVal, pRowid);
252056 253044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
252057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageContentInsert(pTab->pStorage, apVal, pRowid);
253045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageFindDeleteRow(pTab->pStorage, iOld);
253046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
253047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageContentInsert(pTab->pStorage,apVal,pRowid);
253048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252058 253049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
252059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageDelete(pTab->pStorage, iOld, 0);
253050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iOld, 0, 1);
252060 253051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252061 253052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
252062 253053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5StorageIndexInsert(pTab->pStorage, apVal,*pRowid);
252063 253054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252064 253055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252065 253056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
252066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5StorageDelete(pTab->pStorage, iOld, 0);
253057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iOld, 0, 1);
252067 253058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5StorageInsert(&rc, pTab, apVal, pRowid);
252068 253059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252069 253060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bUpdateOrDelete = 1;
253061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5StorageReleaseDeleteRow(pTab->pStorage);
252070 253062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252071 253064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252072 253065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252073 253066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252074 253067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK
252075 253068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& bUpdateOrDelete
@@ -252082,10 +253075,11 @@
252082 253075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
252083 253076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pConfig->iVersion = FTS5_CURRENT_VERSION_SECUREDELETE;
252084 253077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252085 253078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252086 253079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ update_out:
252087 253081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->p.pConfig->pzErrmsg = 0;
252088 253082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
252089 253083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252090 253084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252091 253085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -252103,13 +253097,15 @@
252103 253097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252104 253098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
252105 253099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of xBegin() method.
252106 253100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
252107 253101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5BeginMethod(sqlite3_vtab *pVtab){
252108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5CheckTransactionState((Fts5FullTable*)pVtab, FTS5_BEGIN, 0);
252109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5NewTransaction((Fts5FullTable*)pVtab);
252110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
253102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = fts5NewTransaction((Fts5FullTable*)pVtab);
253103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
253104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5CheckTransactionState((Fts5FullTable*)pVtab, FTS5_BEGIN, 0);
253105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
252111 253107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252112 253108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252113 253109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
252114 253110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of xCommit() method. This is a no-op. The contents of
252115 253111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the pending-terms hash-table have already been flushed into the database
@@ -252159,21 +253155,44 @@
252159 253155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Cursor *pCsr = (Fts5Cursor*)pCtx;
252160 253156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5FullTable *pTab = (Fts5FullTable*)(pCsr->base.pVtab);
252161 253157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3Fts5StorageRowCount(pTab->pStorage, pnRow);
252162 253158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252163 253159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
253161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of xTokenize_v2() API.
253162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5ApiTokenize_v2(
253164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pCtx,
253165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText, int nText,
253166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLoc, int nLoc,
253167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUserData,
253168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xToken)(void*, int, const char*, int, int, int)
253169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
253170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Cursor *pCsr = (Fts5Cursor*)pCtx;
253171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Table *pTab = (Fts5Table*)(pCsr->base.pVtab);
253172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
253173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5SetLocale(pTab->pConfig, pLoc, nLoc);
253175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5Tokenize(pTab->pConfig,
253176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FTS5_TOKENIZE_AUX, pText, nText, pUserData, xToken
253177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
253178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5SetLocale(pTab->pConfig, 0, 0);
253179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
253181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
253184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of xTokenize() API. This is just xTokenize_v2() with NULL/0
253185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** passed as the locale.
253186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
252164 253187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5ApiTokenize(
252165 253188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Context *pCtx,
252166 253189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *pText, int nText,
252167 253190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserData,
252168 253191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xToken)(void*, int, const char*, int, int, int)
252169 253192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
252170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5Cursor *pCsr = (Fts5Cursor*)pCtx;
252171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5Table *pTab = (Fts5Table*)(pCsr->base.pVtab);
252172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3Fts5Tokenize(
252173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab->pConfig, FTS5_TOKENIZE_AUX, pText, nText, pUserData, xToken
252174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
253193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return fts5ApiTokenize_v2(pCtx, pText, nText, 0, 0, pUserData, xToken);
252175 253194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252176 253195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252177 253196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5ApiPhraseCount(Fts5Context *pCtx){
252178 253197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Cursor *pCsr = (Fts5Cursor*)pCtx;
252179 253198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3Fts5ExprPhraseCount(pCsr->pExpr);
@@ -252191,53 +253210,76 @@
252191 253210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pn
252192 253211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
252193 253212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
252194 253213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Cursor *pCsr = (Fts5Cursor*)pCtx;
252195 253214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Table *pTab = (Fts5Table*)(pCsr->base.pVtab);
253215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->ePlan!=FTS5_PLAN_SPECIAL );
252196 253217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCol<0 || iCol>=pTab->pConfig->nCol ){
252197 253218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_RANGE;
252198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( fts5IsContentless((Fts5FullTable*)(pCsr->base.pVtab))
252199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || pCsr->ePlan==FTS5_PLAN_SPECIAL
252200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
253219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( fts5IsContentless((Fts5FullTable*)(pCsr->base.pVtab)) ){
252201 253220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pz = 0;
252202 253221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pn = 0;
252203 253222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
252204 253223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts5SeekCursor(pCsr, 0);
252205 253224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
252206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pz = (const char*)sqlite3_column_text(pCsr->pStmt, iCol+1);
252207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pn = sqlite3_column_bytes(pCsr->pStmt, iCol+1);
253225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Config *pConfig = pTab->pConfig;
253226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bContent = (pConfig->abUnindexed[iCol]==0);
253227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = sqlite3_column_value(pCsr->pStmt, iCol+1);
253228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5ExtractText(pConfig, pVal, bContent, 0, pz, pn);
252208 253229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252209 253230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252210 253231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
252211 253232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252212 253233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
253235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is called by various API functions - xInst, xPhraseFirst,
253236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xPhraseFirstColumn etc. - to obtain the position list for phrase iPhrase
253237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the current row. This function works for both detail=full tables (in
253238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** which case the position-list was read from the fts index) or for other
253239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** detail= modes if the row content is available.
253240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
252213 253241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5CsrPoslist(
252214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5Cursor *pCsr,
252215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iPhrase,
252216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const u8 **pa,
252217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pn
253242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Cursor *pCsr, /* Fts5 cursor object */
253243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPhrase, /* Phrase to find position list for */
253244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const u8 **pa, /* OUT: Pointer to position list buffer */
253245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pn /* OUT: Size of (*pa) in bytes */
252218 253246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
252219 253247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Config *pConfig = ((Fts5Table*)(pCsr->base.pVtab))->pConfig;
252220 253248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
252221 253249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bLive = (pCsr->pSorter==0);
252222 253250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252223 253251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iPhrase<0 || iPhrase>=sqlite3Fts5ExprPhraseCount(pCsr->pExpr) ){
252224 253252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_RANGE;
253253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pConfig->eDetail!=FTS5_DETAIL_FULL
253254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pConfig->eContent==FTS5_CONTENT_NONE
253255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
253256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pa = 0;
253257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pn = 0;
253258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
252225 253259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( CsrFlagTest(pCsr, FTS5CSR_REQUIRE_POSLIST) ){
252226 253260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->eDetail!=FTS5_DETAIL_FULL ){
252227 253261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5PoslistPopulator *aPopulator;
252228 253262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
253263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252229 253264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aPopulator = sqlite3Fts5ExprClearPoslists(pCsr->pExpr, bLive);
252230 253265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aPopulator==0 ) rc = SQLITE_NOMEM;
253266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
253267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5SeekCursor(pCsr, 0);
253268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252231 253269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pConfig->nCol && rc==SQLITE_OK; i++){
252232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n; const char *z;
252233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts5ApiColumnText((Fts5Context*)pCsr, i, &z, &n);
253270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = sqlite3_column_value(pCsr->pStmt, i+1);
253271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z = 0;
253272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
253273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bReset = 0;
253274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(pConfig, pVal, 1, &bReset, &z, &n);
252234 253275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
252235 253276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5ExprPopulatePoslists(
252236 253277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pConfig, pCsr->pExpr, aPopulator, i, z, n
252237 253278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
252238 253279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bReset ) sqlite3Fts5ClearLocale(pConfig);
252239 253281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252240 253282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(aPopulator);
252241 253283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252242 253284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->pSorter ){
252243 253285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5ExprCheckPoslists(pCsr->pExpr, pCsr->pSorter->iRowid);
@@ -252257,11 +253299,10 @@
252257 253299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252258 253300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
252259 253301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pa = 0;
252260 253302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pn = 0;
252261 253303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
252263 253304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252264 253305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
252265 253306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252266 253307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252267 253308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -252327,11 +253368,12 @@
252327 253368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252328 253369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aInst = &pCsr->aInst[3 * (nInst-1)];
252329 253370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aInst[0] = iBest;
252330 253371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aInst[1] = FTS5_POS2COLUMN(aIter[iBest].iPos);
252331 253372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aInst[2] = FTS5_POS2OFFSET(aIter[iBest].iPos);
252332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aInst[1]<0 || aInst[1]>=nCol ){
253373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aInst[1]>=0 );
253374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aInst[1]>=nCol ){
252333 253375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = FTS5_CORRUPT;
252334 253376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
252335 253377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252336 253378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5PoslistReaderNext(&aIter[iBest]);
252337 253379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -252414,20 +253456,25 @@
252414 253456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->aColumnSize[i] = -1;
252415 253457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252416 253458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252417 253459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
252418 253460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
253461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5SeekCursor(pCsr, 0);
252419 253462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; rc==SQLITE_OK && i<pConfig->nCol; i++){
252420 253463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->abUnindexed[i]==0 ){
252421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *z; int n;
252422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *p = (void*)(&pCsr->aColumnSize[i]);
253464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z = 0;
253465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
253466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bReset = 0;
253467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = sqlite3_column_value(pCsr->pStmt, i+1);
253468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252423 253469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->aColumnSize[i] = 0;
252424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts5ApiColumnText(pCtx, i, &z, &n);
253470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(pConfig, pVal, 1, &bReset, &z, &n);
252425 253471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
252426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5Tokenize(
252427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig, FTS5_TOKENIZE_AUX, z, n, p, fts5ColumnSizeCb
253472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5Tokenize(pConfig, FTS5_TOKENIZE_AUX,
253473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z, n, (void*)&pCsr->aColumnSize[i], fts5ColumnSizeCb
252428 253474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
253475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bReset ) sqlite3Fts5ClearLocale(pConfig);
252429 253476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252430 253477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252431 253478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252432 253479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252433 253480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CsrFlagClear(pCsr, FTS5CSR_REQUIRE_DOCSIZE);
@@ -252669,13 +253716,76 @@
252669 253716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252670 253717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252671 253718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5ApiQueryPhrase(Fts5Context*, int, void*,
252672 253719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int(*)(const Fts5ExtensionApi*, Fts5Context*, void*)
252673 253720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
253721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
253723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The xColumnLocale() API.
253724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5ApiColumnLocale(
253726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Context *pCtx,
253727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol,
253728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char **pzLocale,
253729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pnLocale
253730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
253731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
253732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Cursor *pCsr = (Fts5Cursor*)pCtx;
253733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Config *pConfig = ((Fts5Table*)(pCsr->base.pVtab))->pConfig;
253734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pzLocale = 0;
253736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnLocale = 0;
253737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->ePlan!=FTS5_PLAN_SPECIAL );
253739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iCol<0 || iCol>=pConfig->nCol ){
253740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_RANGE;
253741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if(
253742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->abUnindexed[iCol]==0
253743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pConfig->eContent!=FTS5_CONTENT_NONE
253744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pConfig->bLocale
253745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
253746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5SeekCursor(pCsr, 0);
253747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
253748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Load the value into pVal. pVal is a locale/text pair iff:
253749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
253750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1) It is an SQLITE_BLOB, and
253751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2) Either the subtype is FTS5_LOCALE_SUBTYPE, or else the
253752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value was loaded from an FTS5_CONTENT_NORMAL table, and
253753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3) It does not begin with an 0x00 byte.
253754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = sqlite3_column_value(pCsr->pStmt, iCol+1);
253756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_value_type(pVal)==SQLITE_BLOB ){
253757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const u8 *pBlob = (const u8*)sqlite3_value_blob(pVal);
253758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBlob = sqlite3_value_bytes(pVal);
253759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->eContent==FTS5_CONTENT_EXTERNAL ){
253760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int SZHDR = sizeof(FTS5_LOCALE_HEADER)-1;
253761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nBlob<SZHDR || memcmp(FTS5_LOCALE_HEADER, pBlob, SZHDR) ){
253762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
253763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob += 4;
253765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBlob -= 4;
253766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
253768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLocale = 0;
253769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(nLocale=0; nLocale<nBlob && pBlob[nLocale]!=0x00; nLocale++);
253770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nLocale==nBlob || nLocale==0 ){
253771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
253772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
253773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A locale/text pair */
253774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pzLocale = (const char*)pBlob;
253775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnLocale = nLocale;
253776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
253783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252674 253784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252675 253785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const Fts5ExtensionApi sFts5Api = {
252676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 3, /* iVersion */
253786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 4, /* iVersion */
252677 253787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiUserData,
252678 253788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiColumnCount,
252679 253789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiRowCount,
252680 253790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiColumnTotalSize,
252681 253791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiTokenize,
@@ -252692,11 +253802,13 @@
252692 253802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiPhraseFirst,
252693 253803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiPhraseNext,
252694 253804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiPhraseFirstColumn,
252695 253805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiPhraseNextColumn,
252696 253806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiQueryToken,
252697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5ApiInstToken
253807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5ApiInstToken,
253808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5ApiColumnLocale,
253809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5ApiTokenize_v2
252698 253810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
252699 253811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252700 253812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
252701 253813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of API function xQueryPhrase().
252702 253814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -252743,10 +253855,11 @@
252743 253855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *context,
252744 253856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
252745 253857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **argv
252746 253858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
252747 253859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCsr->pAux==0 );
253860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->ePlan!=FTS5_PLAN_SPECIAL );
252748 253861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pAux = pAux;
252749 253862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAux->xFunc(&sFts5Api, (Fts5Context*)pCsr, context, argc, argv);
252750 253863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pAux = 0;
252751 253864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252752 253865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -252755,10 +253868,25 @@
252755 253868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pCsr=pGlobal->pCsr; pCsr; pCsr=pCsr->pNext){
252756 253869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->iCsrId==iCsrId ) break;
252757 253870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252758 253871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pCsr;
252759 253872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
253875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Parameter zFmt is a printf() style formatting string. This function
253876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** formats it using the trailing arguments and returns the result as
253877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an error message to the context passed as the first argument.
253878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts5ResultError(sqlite3_context *pCtx, const char *zFmt, ...){
253880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zErr = 0;
253881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_list ap;
253882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_start(ap, zFmt);
253883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zErr = sqlite3_vmprintf(zFmt, ap);
253884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error(pCtx, zErr, -1);
253885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zErr);
253886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_end(ap);
253887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252760 253888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252761 253889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts5ApiCallback(
252762 253890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *context,
252763 253891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
252764 253892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **argv
@@ -252771,14 +253899,12 @@
252771 253899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( argc>=1 );
252772 253900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAux = (Fts5Auxiliary*)sqlite3_user_data(context);
252773 253901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCsrId = sqlite3_value_int64(argv[0]);
252774 253902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252775 253903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr = fts5CursorFromCsrid(pAux->pGlobal, iCsrId);
252776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCsr==0 || pCsr->ePlan==0 ){
252777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zErr = sqlite3_mprintf("no such cursor: %lld", iCsrId);
252778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_error(context, zErr, -1);
252779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(zErr);
253904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCsr==0 || (pCsr->ePlan==0 || pCsr->ePlan==FTS5_PLAN_SPECIAL) ){
253905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5ResultError(context, "no such cursor: %lld", iCsrId);
252780 253906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
252781 253907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pTab = pCsr->base.pVtab;
252782 253908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiInvoke(pAux, pCsr, context, argc-1, &argv[1]);
252783 253909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pTab->zErrMsg);
252784 253910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zErrMsg = 0;
@@ -252867,10 +253993,61 @@
252867 253993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252868 253994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252869 253995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_blob(pCtx, val.p, val.n, sqlite3_free);
252870 253996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
252871 253997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Value pVal was read from column iCol of the FTS5 table. This function
254001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns it to the owner of pCtx via a call to an sqlite3_result_xxx()
254002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function. This function deals with the same cases as
254003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3Fts5ExtractText():
254004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1) Ordinary values. These can be returned using sqlite3_result_value().
254006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2) Blobs from fts5_locale(). The text is extracted from these and
254008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returned via sqlite3_result_text(). The locale is discarded.
254009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts5ExtractValueFromColumn(
254011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx,
254012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Config *pConfig,
254013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol,
254014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal
254015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pConfig->eContent!=FTS5_CONTENT_NONE );
254017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->bLocale
254019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3_value_type(pVal)==SQLITE_BLOB
254020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pConfig->abUnindexed[iCol]==0
254021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int SZHDR = sizeof(FTS5_LOCALE_HEADER)-1;
254023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const u8 *pBlob = sqlite3_value_blob(pVal);
254024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBlob = sqlite3_value_bytes(pVal);
254025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
254026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->eContent==FTS5_CONTENT_EXTERNAL ){
254028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nBlob<SZHDR || memcmp(pBlob, FTS5_LOCALE_HEADER, SZHDR) ){
254029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_code(pCtx, SQLITE_ERROR);
254030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
254031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob += 4;
254033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBlob -= 4;
254034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<nBlob && pBlob[ii]; ii++);
254038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii==0 || ii==nBlob ){
254039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_code(pCtx, SQLITE_ERROR);
254040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText = (const char*)&pBlob[ii+1];
254042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, pText, nBlob-ii-1, SQLITE_TRANSIENT);
254043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
254045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_value(pCtx, pVal);
254048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252872 254049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252873 254050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
252874 254051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the xColumn method, called by SQLite to request a value from
252875 254052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the row that the supplied cursor currently points to.
252876 254053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -252897,12 +254074,12 @@
252897 254074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as the table. Return the cursor integer id number. This value is only
252898 254075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** useful in that it may be passed as the first argument to an FTS5
252899 254076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** auxiliary function. */
252900 254077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_int64(pCtx, pCsr->iCsrId);
252901 254078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( iCol==pConfig->nCol+1 ){
252902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
252903 254079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The value of the "rank" column. */
254080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252904 254081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->ePlan==FTS5_PLAN_SOURCE ){
252905 254082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5PoslistBlob(pCtx, pCsr);
252906 254083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if(
252907 254084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->ePlan==FTS5_PLAN_MATCH
252908 254085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pCsr->ePlan==FTS5_PLAN_SORTED_MATCH
@@ -252909,24 +254086,31 @@
252909 254086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
252910 254087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->pRank || SQLITE_OK==(rc = fts5FindRankFunction(pCsr)) ){
252911 254088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5ApiInvoke(pCsr->pRank, pCsr, pCtx, pCsr->nRankArg, pCsr->apRankArg);
252912 254089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252913 254090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( !fts5IsContentless(pTab) ){
252915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->pzErrmsg = &pTab->p.base.zErrMsg;
252916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts5SeekCursor(pCsr, 1);
252917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
252918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_value(pCtx, sqlite3_column_value(pCsr->pStmt, iCol+1));
252919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
252920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->pzErrmsg = 0;
252921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pConfig->bContentlessDelete && sqlite3_vtab_nochange(pCtx) ){
252922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zErr = sqlite3_mprintf("cannot UPDATE a subset of "
252923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "columns on fts5 contentless-delete table: %s", pConfig->zName
252924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
252925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_error(pCtx, zErr, -1);
252926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(zErr);
252927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
254091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A column created by the user containing values. */
254093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bNochange = sqlite3_vtab_nochange(pCtx);
254094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fts5IsContentless(pTab) ){
254096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bNochange && pConfig->bContentlessDelete ){
254097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5ResultError(pCtx, "cannot UPDATE a subset of "
254098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "columns on fts5 contentless-delete table: %s", pConfig->zName
254099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
254100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( bNochange==0 || pConfig->eContent!=FTS5_CONTENT_NORMAL ){
254102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->pzErrmsg = &pTab->p.base.zErrMsg;
254103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5SeekCursor(pCsr, 1);
254104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
254105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = sqlite3_column_value(pCsr->pStmt, iCol+1);
254106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5ExtractValueFromColumn(pCtx, pConfig, iCol, pVal);
254107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->pzErrmsg = 0;
254109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252928 254112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
252929 254113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252930 254114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252931 254115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252932 254116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -253060,53 +254244,216 @@
253060 254244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253061 254245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253062 254246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253063 254247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
253064 254248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used by xCreateTokenizer_v2() and xCreateTokenizer().
254252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It allocates and partially populates a new Fts5TokenizerModule object.
254253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The new object is already linked into the Fts5Global context before
254254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returning.
254255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If successful, SQLITE_OK is returned and a pointer to the new
254257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts5TokenizerModule object returned via output parameter (*ppNew). All
254258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that is required is for the caller to fill in the methods in
254259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts5TokenizerModule.x1 and x2, and to set Fts5TokenizerModule.bV2Native
254260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as appropriate.
254261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If an error occurs, an SQLite error code is returned and the final value
254263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of (*ppNew) undefined.
254264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5NewTokenizerModule(
254266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Global *pGlobal, /* Global context (one per db handle) */
254267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName, /* Name of new function */
254268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUserData, /* User data for aux. function */
254269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void(*xDestroy)(void*), /* Destructor for pUserData */
254270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerModule **ppNew
254271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
254273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerModule *pNew;
254274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nName; /* Size of zName and its \0 terminator */
254275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nByte; /* Bytes of space to allocate */
254276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nName = strlen(zName) + 1;
254278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nByte = sizeof(Fts5TokenizerModule) + nName;
254279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppNew = pNew = (Fts5TokenizerModule*)sqlite3Fts5MallocZero(&rc, nByte);
254280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew ){
254281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->zName = (char*)&pNew[1];
254282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pNew->zName, zName, nName);
254283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->pUserData = pUserData;
254284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->xDestroy = xDestroy;
254285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->pNext = pGlobal->pTok;
254286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGlobal->pTok = pNew;
254287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew->pNext==0 ){
254288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGlobal->pDfltTok = pNew;
254289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
254293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An instance of this type is used as the Fts5Tokenizer object for
254297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** wrapper tokenizers - those that provide access to a v1 tokenizer via
254298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the fts5_tokenizer_v2 API, and those that provide access to a v2 tokenizer
254299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** via the fts5_tokenizer API.
254300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct Fts5VtoVTokenizer Fts5VtoVTokenizer;
254302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Fts5VtoVTokenizer {
254303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bV2Native; /* True if v2 native tokenizer */
254304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer x1; /* Tokenizer functions */
254305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 x2; /* V2 tokenizer functions */
254306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Tokenizer *pReal;
254307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
254308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Create a wrapper tokenizer. The context argument pCtx points to the
254311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts5TokenizerModule object.
254312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5VtoVCreate(
254314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx,
254315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char **azArg,
254316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nArg,
254317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Tokenizer **ppOut
254318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerModule *pMod = (Fts5TokenizerModule*)pCtx;
254320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5VtoVTokenizer *pNew = 0;
254321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
254322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = (Fts5VtoVTokenizer*)sqlite3Fts5MallocZero(&rc, sizeof(*pNew));
254324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
254325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x1 = pMod->x1;
254326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x2 = pMod->x2;
254327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->bV2Native = pMod->bV2Native;
254328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMod->bV2Native ){
254329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pMod->x2.xCreate(pMod->pUserData, azArg, nArg, &pNew->pReal);
254330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pMod->x1.xCreate(pMod->pUserData, azArg, nArg, &pNew->pReal);
254332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
254334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pNew);
254335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = 0;
254336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppOut = (Fts5Tokenizer*)pNew;
254340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
254341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Delete an Fts5VtoVTokenizer wrapper tokenizer.
254345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts5VtoVDelete(Fts5Tokenizer *pTok){
254347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5VtoVTokenizer *p = (Fts5VtoVTokenizer*)pTok;
254348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p ){
254349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->bV2Native ){
254350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->x2.xDelete(p->pReal);
254351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->x1.xDelete(p->pReal);
254353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(p);
254355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xTokenizer method for a wrapper tokenizer that offers the v1 interface
254361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (no support for locales).
254362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5V1toV2Tokenize(
254364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Tokenizer *pTok,
254365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx, int flags,
254366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText, int nText,
254367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xToken)(void*, int, const char*, int, int, int)
254368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5VtoVTokenizer *p = (Fts5VtoVTokenizer*)pTok;
254370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->bV2Native );
254371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p->x2.xTokenize(p->pReal, pCtx, flags, pText, nText, 0, 0, xToken);
254372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xTokenizer method for a wrapper tokenizer that offers the v2 interface
254376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (with locale support).
254377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5V2toV1Tokenize(
254379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Tokenizer *pTok,
254380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pCtx, int flags,
254381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText, int nText,
254382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLocale, int nLocale,
254383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xToken)(void*, int, const char*, int, int, int)
254384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5VtoVTokenizer *p = (Fts5VtoVTokenizer*)pTok;
254386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->bV2Native==0 );
254387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAM2(pLocale,nLocale);
254388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p->x1.xTokenize(p->pReal, pCtx, flags, pText, nText, xToken);
254389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253065 254390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253066 254391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253067 254392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Register a new tokenizer. This is the implementation of the
253068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fts5_api.xCreateTokenizer() method.
254393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts5_api.xCreateTokenizer_v2() method.
254394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5CreateTokenizer_v2(
254396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_api *pApi, /* Global context (one per db handle) */
254397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName, /* Name of new function */
254398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUserData, /* User data for aux. function */
254399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 *pTokenizer, /* Tokenizer implementation */
254400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void(*xDestroy)(void*) /* Destructor for pUserData */
254401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Global *pGlobal = (Fts5Global*)pApi;
254403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
254404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTokenizer->iVersion>2 ){
254406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
254407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerModule *pNew = 0;
254409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5NewTokenizerModule(pGlobal, zName, pUserData, xDestroy, &pNew);
254410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew ){
254411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x2 = *pTokenizer;
254412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->bV2Native = 1;
254413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x1.xCreate = fts5VtoVCreate;
254414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x1.xTokenize = fts5V1toV2Tokenize;
254415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x1.xDelete = fts5VtoVDelete;
254416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
254420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The fts5_api.xCreateTokenizer() method.
253069 254424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
253070 254425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5CreateTokenizer(
253071 254426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_api *pApi, /* Global context (one per db handle) */
253072 254427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName, /* Name of new function */
253073 254428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserData, /* User data for aux. function */
253074 254429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_tokenizer *pTokenizer, /* Tokenizer implementation */
253075 254430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void(*xDestroy)(void*) /* Destructor for pUserData */
253076 254431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
253077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5Global *pGlobal = (Fts5Global*)pApi;
253078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5TokenizerModule *pNew;
253079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 nName; /* Size of zName and its \0 terminator */
253080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 nByte; /* Bytes of space to allocate */
254432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerModule *pNew = 0;
253081 254433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
253082 254434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nName = strlen(zName) + 1;
253084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nByte = sizeof(Fts5TokenizerModule) + nName;
253085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew = (Fts5TokenizerModule*)sqlite3_malloc64(nByte);
254435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5NewTokenizerModule(
254436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (Fts5Global*)pApi, zName, pUserData, xDestroy, &pNew
254437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
253086 254438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew ){
253087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(pNew, 0, (size_t)nByte);
253088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->zName = (char*)&pNew[1];
253089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(pNew->zName, zName, nName);
253090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->pUserData = pUserData;
253091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->x = *pTokenizer;
253092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->xDestroy = xDestroy;
253093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->pNext = pGlobal->pTok;
253094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pGlobal->pTok = pNew;
253095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNew->pNext==0 ){
253096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pGlobal->pDfltTok = pNew;
253097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
253098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
253099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_NOMEM;
253100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
253101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
254439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x1 = *pTokenizer;
254440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x2.xCreate = fts5VtoVCreate;
254441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x2.xTokenize = fts5V2toV1Tokenize;
254442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->x2.xDelete = fts5VtoVDelete;
254443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253102 254444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
253103 254445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253104 254446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
254447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Search the global context passed as the first argument for a tokenizer
254449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** module named zName. If found, return a pointer to the Fts5TokenizerModule
254450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** object. Otherwise, return NULL.
254451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253105 254452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static Fts5TokenizerModule *fts5LocateTokenizer(
253106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5Global *pGlobal,
253107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zName
254453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Global *pGlobal, /* Global (one per db handle) object */
254454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName /* Name of tokenizer module to find */
253108 254455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
253109 254456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5TokenizerModule *pMod = 0;
253110 254457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253111 254458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zName==0 ){
253112 254459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMod = pGlobal->pDfltTok;
@@ -253116,10 +254463,40 @@
253116 254463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253117 254464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253118 254465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253119 254466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pMod;
253120 254467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Find a tokenizer. This is the implementation of the
254471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts5_api.xFindTokenizer_v2() method.
254472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts5FindTokenizer_v2(
254474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_api *pApi, /* Global context (one per db handle) */
254475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName, /* Name of tokenizer */
254476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void **ppUserData,
254477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 **ppTokenizer /* Populate this object */
254478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
254480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerModule *pMod;
254481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMod = fts5LocateTokenizer((Fts5Global*)pApi, zName);
254483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMod ){
254484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMod->bV2Native ){
254485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppUserData = pMod->pUserData;
254486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppUserData = (void*)pMod;
254488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppTokenizer = &pMod->x2;
254490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppTokenizer = 0;
254492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppUserData = 0;
254493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
254494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
254497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253121 254498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253122 254499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253123 254500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Find a tokenizer. This is the implementation of the
253124 254501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fts5_api.xFindTokenizer() method.
253125 254502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -253132,70 +254509,79 @@
253132 254509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
253133 254510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5TokenizerModule *pMod;
253134 254511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253135 254512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMod = fts5LocateTokenizer((Fts5Global*)pApi, zName);
253136 254513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pMod ){
253137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pTokenizer = pMod->x;
253138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *ppUserData = pMod->pUserData;
253139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
253140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(pTokenizer, 0, sizeof(fts5_tokenizer));
253141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
253142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
253143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
253144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
253145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
253146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
253147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int fts5GetTokenizer(
253148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5Global *pGlobal,
253149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char **azArg,
253150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nArg,
253151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5Config *pConfig,
253152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char **pzErr
253153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
253154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts5TokenizerModule *pMod;
253155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK;
253156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
253157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMod = fts5LocateTokenizer(pGlobal, nArg==0 ? 0 : azArg[0]);
253158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pMod==0 ){
253159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( nArg>0 );
253160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
253161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pzErr ) *pzErr = sqlite3_mprintf("no such tokenizer: %s", azArg[0]);
253162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
253163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pMod->x.xCreate(
253164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMod->pUserData, (azArg?&azArg[1]:0), (nArg?nArg-1:0), &pConfig->t.pTok
253165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
253166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->t.pTokApi = &pMod->x;
253167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ){
253168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pzErr && rc!=SQLITE_NOMEM ){
253169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pzErr = sqlite3_mprintf("error in tokenizer constructor");
253170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
253171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
253172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->t.ePattern = sqlite3Fts5TokenizerPattern(
253173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMod->x.xCreate, pConfig->t.pTok
253174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
253175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
253176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
253177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
253178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ){
253179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->t.pTokApi = 0;
253180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->t.pTok = 0;
254514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMod->bV2Native==0 ){
254515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppUserData = pMod->pUserData;
254516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppUserData = (void*)pMod;
254518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pTokenizer = pMod->x1;
254520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pTokenizer, 0, sizeof(*pTokenizer));
254522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppUserData = 0;
254523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
253181 254524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253182 254525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253183 254526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
253184 254527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253185 254528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253186 254529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253187 254530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Attempt to instantiate the tokenizer.
253188 254531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
253189 254532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Fts5LoadTokenizer(Fts5Config *pConfig){
253190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return fts5GetTokenizer(
253191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig->pGlobal, pConfig->t.azArg, pConfig->t.nArg,
253192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pConfig, pConfig->pzErrmsg
253193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
254533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char **azArg = pConfig->t.azArg;
254534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int nArg = pConfig->t.nArg;
254535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5TokenizerModule *pMod = 0;
254536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
254537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMod = fts5LocateTokenizer(pConfig->pGlobal, nArg==0 ? 0 : azArg[0]);
254539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMod==0 ){
254540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nArg>0 );
254541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
254542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5ConfigErrmsg(pConfig, "no such tokenizer: %s", azArg[0]);
254543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xCreate)(void*, const char**, int, Fts5Tokenizer**) = 0;
254545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMod->bV2Native ){
254546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xCreate = pMod->x2.xCreate;
254547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pApi2 = &pMod->x2;
254548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pApi1 = &pMod->x1;
254550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xCreate = pMod->x1.xCreate;
254551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = xCreate(pMod->pUserData,
254554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (azArg?&azArg[1]:0), (nArg?nArg-1:0), &pConfig->t.pTok
254555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
254556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
254558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_NOMEM ){
254559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts5ConfigErrmsg(pConfig, "error in tokenizer constructor");
254560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pMod->bV2Native==0 ){
254562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.ePattern = sqlite3Fts5TokenizerPattern(
254563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMod->x1.xCreate, pConfig->t.pTok
254564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
254565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
254569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pApi1 = 0;
254570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pApi2 = 0;
254571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig->t.pTok = 0;
254572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
253194 254575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253195 254576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253196 254577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
254578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xDestroy callback passed to sqlite3_create_module(). This is invoked
254580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** when the db handle is being closed. Free memory associated with
254581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tokenizers and aux functions registered with this db handle.
254582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253197 254583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts5ModuleDestroy(void *pCtx){
253198 254584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5TokenizerModule *pTok, *pNextTok;
253199 254585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Auxiliary *pAux, *pNextAux;
253200 254586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Global *pGlobal = (Fts5Global*)pCtx;
253201 254587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -253212,10 +254598,14 @@
253212 254598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253213 254599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253214 254600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pGlobal);
253215 254601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253216 254602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
254603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of the fts5() function used by clients to obtain the
254605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** API pointer.
254606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253217 254607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts5Fts5Func(
253218 254608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *pCtx, /* Function call context */
253219 254609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg, /* Number of args */
253220 254610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **apArg /* Function arguments */
253221 254611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
@@ -253235,11 +254625,74 @@
253235 254625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg, /* Number of args */
253236 254626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **apUnused /* Function arguments */
253237 254627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
253238 254628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nArg==0 );
253239 254629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAM2(nArg, apUnused);
253240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_text(pCtx, "fts5: 2024-08-16 18:51:46 7a0cdc7edb704a88a77b748cd28f6e00c49849cc2c1af838b95b34232ecc21f9", -1, SQLITE_TRANSIENT);
254630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, "fts5: 2024-09-02 18:41:59 e6bec37ea1ca51e1d048941ce4c5211d8fc5c5e3556a1441f9c79b036843f9e3", -1, SQLITE_TRANSIENT);
254631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of fts5_locale(LOCALE, TEXT) function.
254635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter LOCALE is NULL, or a zero-length string, then a copy of
254637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** TEXT is returned. Otherwise, both LOCALE and TEXT are interpreted as
254638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** text, and the value returned is a blob consisting of:
254639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The 4 bytes 0x00, 0xE0, 0xB2, 0xEb (FTS5_LOCALE_HEADER).
254641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The LOCALE, as utf-8 text, followed by
254642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * 0x00, followed by
254643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The TEXT, as utf-8 text.
254644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There is no final nul-terminator following the TEXT value.
254646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
254647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts5LocaleFunc(
254648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx, /* Function call context */
254649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nArg, /* Number of args */
254650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apArg /* Function arguments */
254651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
254652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zLocale = 0;
254653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLocale = 0;
254654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zText = 0;
254655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0;
254656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nArg==2 );
254658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAM(nArg);
254659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLocale = (const char*)sqlite3_value_text(apArg[0]);
254661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nLocale = sqlite3_value_bytes(apArg[0]);
254662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zText = (const char*)sqlite3_value_text(apArg[1]);
254664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nText = sqlite3_value_bytes(apArg[1]);
254665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zLocale==0 || zLocale[0]=='\0' ){
254667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, zText, nText, SQLITE_TRANSIENT);
254668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
254669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *pBlob = 0;
254670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *pCsr = 0;
254671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBlob = 0;
254672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int nHdr = 4;
254673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sizeof(FTS5_LOCALE_HEADER)==nHdr+1 );
254674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBlob = nHdr + nLocale + 1 + nText;
254676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob = (u8*)sqlite3_malloc(nBlob);
254677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBlob==0 ){
254678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_nomem(pCtx);
254679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
254680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr = pBlob;
254683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pCsr, FTS5_LOCALE_HEADER, nHdr);
254684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr += nHdr;
254685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pCsr, zLocale, nLocale);
254686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr += nLocale;
254687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (*pCsr++) = 0x00;
254688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zText ) memcpy(pCsr, zText, nText);
254689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( &pCsr[nText]==&pBlob[nBlob] );
254690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_blob(pCtx, pBlob, nBlob, sqlite3_free);
254692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_subtype(pCtx, FTS5_LOCALE_SUBTYPE);
254693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253241 254694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253242 254695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253243 254696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253244 254697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if zName is the extension on one of the shadow tables used
253245 254698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by this module.
@@ -253330,14 +254783,16 @@
253330 254783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
253331 254784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
253332 254785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p = (void*)pGlobal;
253333 254786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pGlobal, 0, sizeof(Fts5Global));
253334 254787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGlobal->db = db;
253335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pGlobal->api.iVersion = 2;
254788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGlobal->api.iVersion = 3;
253336 254789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGlobal->api.xCreateFunction = fts5CreateAux;
253337 254790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGlobal->api.xCreateTokenizer = fts5CreateTokenizer;
253338 254791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGlobal->api.xFindTokenizer = fts5FindTokenizer;
254792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGlobal->api.xCreateTokenizer_v2 = fts5CreateTokenizer_v2;
254793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGlobal->api.xFindTokenizer_v2 = fts5FindTokenizer_v2;
253339 254794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_module_v2(db, "fts5", &fts5Mod, p, fts5ModuleDestroy);
253340 254795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ) rc = sqlite3Fts5IndexInit(db);
253341 254796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ) rc = sqlite3Fts5ExprInit(pGlobal, db);
253342 254797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ) rc = sqlite3Fts5AuxInit(&pGlobal->api);
253343 254798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ) rc = sqlite3Fts5TokenizerInit(&pGlobal->api);
@@ -253351,10 +254806,17 @@
253351 254806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_function(
253352 254807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db, "fts5_source_id", 0,
253353 254808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS,
253354 254809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p, fts5SourceIdFunc, 0, 0
253355 254810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
254811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
254813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_create_function(
254814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db, "fts5_locale", 2,
254815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_RESULT_SUBTYPE,
254816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p, fts5LocaleFunc, 0, 0
254817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
253356 254818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253357 254819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253358 254820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253359 254821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If SQLITE_FTS5_ENABLE_TEST_MI is defined, assume that the file
253360 254822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fts5_test_mi.c is compiled and linked into the executable. And call
@@ -253426,17 +254888,44 @@
253426 254888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253427 254889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253428 254890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253429 254891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include "fts5Int.h" */
253430 254892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
254893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
254894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pSavedRow:
254895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQL statement FTS5_STMT_LOOKUP2 is a copy of FTS5_STMT_LOOKUP, it
254896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** does a by-rowid lookup to retrieve a single row from the %_content
254897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table or equivalent external-content table/view.
254898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** However, FTS5_STMT_LOOKUP2 is only used when retrieving the original
254900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** values for a row being UPDATEd. In that case, the SQL statement is
254901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not reset and pSavedRow is set to point at it. This is so that the
254902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** insert operation that follows the delete may access the original
254903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** row values for any new values for which sqlite3_value_nochange() returns
254904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** true. i.e. if the user executes:
254905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE VIRTUAL TABLE ft USING fts5(a, b, c, locale=1);
254907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ...
254908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** UPDATE fts SET a=?, b=? WHERE rowid=?;
254909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the value passed to the xUpdate() method of this table as the
254911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** new.c value is an sqlite3_value_nochange() value. So in this case it
254912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** must be read from the saved row stored in Fts5Storage.pSavedRow.
254913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is necessary - using sqlite3_value_nochange() instead of just having
254915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite pass the original value back via xUpdate() - so as not to discard
254916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** any locale information associated with such values.
254917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
254918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
253431 254919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts5Storage {
253432 254920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Config *pConfig;
253433 254921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Index *pIndex;
253434 254922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bTotalsValid; /* True if nTotalRow/aTotalSize[] are valid */
253435 254923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 nTotalRow; /* Total number of rows in FTS table */
253436 254924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 *aTotalSize; /* Total sizes of each column */
253437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_stmt *aStmt[11];
254925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pSavedRow;
254926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *aStmt[12];
253438 254927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
253439 254928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253440 254929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253441 254930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if FTS5_STMT_SCAN_ASC!=0
253442 254931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "FTS5_STMT_SCAN_ASC mismatch"
@@ -253446,18 +254935,19 @@
253446 254935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
253447 254936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if FTS5_STMT_LOOKUP!=2
253448 254937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "FTS5_STMT_LOOKUP mismatch"
253449 254938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
253450 254939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_INSERT_CONTENT 3
253452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_REPLACE_CONTENT 4
253453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_DELETE_CONTENT 5
253454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_REPLACE_DOCSIZE 6
253455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_DELETE_DOCSIZE 7
253456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_LOOKUP_DOCSIZE 8
253457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_REPLACE_CONFIG 9
253458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FTS5_STMT_SCAN 10
254940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_LOOKUP2 3
254941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_INSERT_CONTENT 4
254942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_REPLACE_CONTENT 5
254943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_DELETE_CONTENT 6
254944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_REPLACE_DOCSIZE 7
254945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_DELETE_DOCSIZE 8
254946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_LOOKUP_DOCSIZE 9
254947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_REPLACE_CONFIG 10
254948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FTS5_STMT_SCAN 11
253459 254949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253460 254950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253461 254951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Prepare the two insert statements - Fts5Storage.pInsertContent and
253462 254952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Fts5Storage.pInsertDocsize - if they have not already been prepared.
253463 254953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return SQLITE_OK if successful, or an SQLite error code if an error
@@ -253483,10 +254973,11 @@
253483 254973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->aStmt[eStmt]==0 ){
253484 254974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *azStmt[] = {
253485 254975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT %s FROM %s T WHERE T.%Q >= ? AND T.%Q <= ? ORDER BY T.%Q ASC",
253486 254976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT %s FROM %s T WHERE T.%Q <= ? AND T.%Q >= ? ORDER BY T.%Q DESC",
253487 254977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT %s FROM %s T WHERE T.%Q=?", /* LOOKUP */
254978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT %s FROM %s T WHERE T.%Q=?", /* LOOKUP2 */
253488 254979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253489 254980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"INSERT INTO %Q.'%q_content' VALUES(%s)", /* INSERT_CONTENT */
253490 254981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"REPLACE INTO %Q.'%q_content' VALUES(%s)", /* REPLACE_CONTENT */
253491 254982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM %Q.'%q_content' WHERE id=?", /* DELETE_CONTENT */
253492 254983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"REPLACE INTO %Q.'%q_docsize' VALUES(?,?%s)", /* REPLACE_DOCSIZE */
@@ -253497,10 +254988,12 @@
253497 254988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"REPLACE INTO %Q.'%q_config' VALUES(?,?)", /* REPLACE_CONFIG */
253498 254989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT %s FROM %s AS T", /* SCAN */
253499 254990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
253500 254991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Config *pC = p->pConfig;
253501 254992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zSql = 0;
254993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ArraySize(azStmt)==ArraySize(p->aStmt) );
253502 254995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253503 254996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( eStmt ){
253504 254997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case FTS5_STMT_SCAN:
253505 254998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSql = sqlite3_mprintf(azStmt[eStmt],
253506 254999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->zContentExprlist, pC->zContent
@@ -253514,10 +255007,11 @@
253514 255007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->zContentRowid
253515 255008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
253516 255009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
253517 255010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253518 255011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case FTS5_STMT_LOOKUP:
255012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case FTS5_STMT_LOOKUP2:
253519 255013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSql = sqlite3_mprintf(azStmt[eStmt],
253520 255014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->zContentExprlist, pC->zContent, pC->zContentRowid
253521 255015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
253522 255016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
253523 255017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -253560,11 +255054,11 @@
253560 255054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253561 255055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zSql==0 ){
253562 255056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
253563 255057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
253564 255058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int f = SQLITE_PREPARE_PERSISTENT;
253565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( eStmt>FTS5_STMT_LOOKUP ) f |= SQLITE_PREPARE_NO_VTAB;
255059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eStmt>FTS5_STMT_LOOKUP2 ) f |= SQLITE_PREPARE_NO_VTAB;
253566 255060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pConfig->bLock++;
253567 255061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_prepare_v3(pC->db, zSql, -1, f, &p->aStmt[eStmt], 0);
253568 255062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pConfig->bLock--;
253569 255063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zSql);
253570 255064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK && pzErrMsg ){
@@ -253808,74 +255302,141 @@
253808 255302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (tflags & FTS5_TOKEN_COLOCATED)==0 || pCtx->szCol==0 ){
253809 255303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCtx->szCol++;
253810 255304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253811 255305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3Fts5IndexWrite(pIdx, pCtx->iCol, pCtx->szCol-1, pToken, nToken);
253812 255306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
255309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used as part of an UPDATE statement that modifies the
255310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rowid of a row. In that case, this function is called first to set
255311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts5Storage.pSavedRow to point to a statement that may be used to
255312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** access the original values of the row being deleted - iDel.
255313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
255314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
255315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It is not considered an error if row iDel does not exist. In this case
255316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pSavedRow is not set and SQLITE_OK returned.
255317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
255318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3Fts5StorageFindDeleteRow(Fts5Storage *p, i64 iDel){
255319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
255320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pSeek = 0;
255321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pSavedRow==0 );
255323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5StorageGetStmt(p, FTS5_STMT_LOOKUP+1, &pSeek, 0);
255324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
255325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_int64(pSeek, 1, iDel);
255326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_step(pSeek)!=SQLITE_ROW ){
255327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_reset(pSeek);
255328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
255329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pSavedRow = pSeek;
255330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
255334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253813 255335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253814 255336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253815 255337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If a row with rowid iDel is present in the %_content table, add the
253816 255338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** delete-markers to the FTS index necessary to delete it. Do not actually
253817 255339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** remove the %_content row at this time though.
255340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
255341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter bSaveRow is true, then Fts5Storage.pSavedRow is left
255342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pointing to a statement (FTS5_STMT_LOOKUP2) that may be used to access
255343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the original values of the row being deleted. This is used by UPDATE
255344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statements.
253818 255345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
253819 255346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5StorageDeleteFromIndex(
253820 255347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Storage *p,
253821 255348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iDel,
253822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value **apVal
255349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal,
255350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bSaveRow /* True to set pSavedRow */
253823 255351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
253824 255352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Config *pConfig = p->pConfig;
253825 255353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_stmt *pSeek = 0; /* SELECT to read row iDel from %_data */
253826 255354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Return code */
253827 255355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc2; /* sqlite3_reset() return code */
253828 255356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCol;
253829 255357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5InsertCtx ctx;
253830 255358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( bSaveRow==0 || apVal==0 );
255360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( bSaveRow==0 || bSaveRow==1 );
255361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( FTS5_STMT_LOOKUP2==FTS5_STMT_LOOKUP+1 );
255362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253831 255363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( apVal==0 ){
253832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts5StorageGetStmt(p, FTS5_STMT_LOOKUP, &pSeek, 0);
253833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ) return rc;
253834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_bind_int64(pSeek, 1, iDel);
253835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_step(pSeek)!=SQLITE_ROW ){
253836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3_reset(pSeek);
255364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pSavedRow && bSaveRow ){
255365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSeek = p->pSavedRow;
255366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pSavedRow = 0;
255367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
255368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5StorageGetStmt(p, FTS5_STMT_LOOKUP+bSaveRow, &pSeek, 0);
255369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
255370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_int64(pSeek, 1, iDel);
255371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_step(pSeek)!=SQLITE_ROW ){
255372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_reset(pSeek);
255373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253837 255374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253838 255375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253839 255376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253840 255377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.pStorage = p;
253841 255378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.iCol = -1;
253842 255379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iCol=1; rc==SQLITE_OK && iCol<=pConfig->nCol; iCol++){
253843 255380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->abUnindexed[iCol-1]==0 ){
253844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zText;
253845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nText;
255381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = 0;
255382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText = 0;
255383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0;
255384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bReset = 0;
255385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253846 255386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSeek==0 || apVal==0 );
253847 255387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSeek!=0 || apVal!=0 );
253848 255388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSeek ){
253849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zText = (const char*)sqlite3_column_text(pSeek, iCol);
253850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nText = sqlite3_column_bytes(pSeek, iCol);
253851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( ALWAYS(apVal) ){
253852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zText = (const char*)sqlite3_value_text(apVal[iCol-1]);
253853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nText = sqlite3_value_bytes(apVal[iCol-1]);
255389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVal = sqlite3_column_value(pSeek, iCol);
253854 255390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
253855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- continue;
255391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVal = apVal[iCol-1];
253856 255392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ctx.szCol = 0;
253858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5Tokenize(pConfig, FTS5_TOKENIZE_DOCUMENT,
253859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zText, nText, (void*)&ctx, fts5StorageInsertCallback
255393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(
255395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConfig, pVal, pSeek!=0, &bReset, &pText, &nText
253860 255396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
253861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aTotalSize[iCol-1] -= (i64)ctx.szCol;
253862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->aTotalSize[iCol-1]<0 && rc==SQLITE_OK ){
253863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = FTS5_CORRUPT;
255397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
255398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ctx.szCol = 0;
255399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5Tokenize(pConfig, FTS5_TOKENIZE_DOCUMENT,
255400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pText, nText, (void*)&ctx, fts5StorageInsertCallback
255401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
255402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->aTotalSize[iCol-1] -= (i64)ctx.szCol;
255403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && p->aTotalSize[iCol-1]<0 ){
255404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = FTS5_CORRUPT;
255405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bReset ) sqlite3Fts5ClearLocale(pConfig);
253864 255407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253865 255408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253866 255409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253867 255410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && p->nTotalRow<1 ){
253868 255411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = FTS5_CORRUPT;
253869 255412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
253870 255413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nTotalRow--;
253871 255414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253872 255415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc2 = sqlite3_reset(pSeek);
253874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ) rc = rc2;
255416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && bSaveRow ){
255417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pSavedRow==0 );
255418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pSavedRow = pSeek;
255419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
255420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc2 = sqlite3_reset(pSeek);
255421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ) rc = rc2;
255422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253875 255423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
253876 255424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
255427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Reset any saved statement pSavedRow. Zero pSavedRow as well. This
255428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** should be called by the xUpdate() method of the fts5 table before
255429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returning from any operation that may have set Fts5Storage.pSavedRow.
255430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
255431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3Fts5StorageReleaseDeleteRow(Fts5Storage *pStorage){
255432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pStorage->pSavedRow==0
255433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pStorage->pSavedRow==pStorage->aStmt[FTS5_STMT_LOOKUP2]
255434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
255435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_reset(pStorage->pSavedRow);
255436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pStorage->pSavedRow = 0;
255437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
253877 255438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253878 255439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253879 255440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is called to process a DELETE on a contentless_delete=1
253880 255441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table. It adds the tombstone required to delete the entry with rowid
253881 255442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** iDel. If successful, SQLITE_OK is returned. Or, if an error occurs,
@@ -253929,16 +255490,16 @@
253929 255490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pConfig->bContentlessDelete ){
253930 255491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iOrigin = 0;
253931 255492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5IndexGetOrigin(p->pIndex, &iOrigin);
253932 255493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_bind_int64(pReplace, 3, iOrigin);
253933 255494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
253935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_bind_blob(pReplace, 2, pBuf->p, pBuf->n, SQLITE_STATIC);
253936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_step(pReplace);
253937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3_reset(pReplace);
253938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_bind_null(pReplace, 2);
253939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
255495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
255497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_blob(pReplace, 2, pBuf->p, pBuf->n, SQLITE_STATIC);
255498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_step(pReplace);
255499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_reset(pReplace);
255500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_null(pReplace, 2);
253940 255501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253941 255502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253942 255503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
253943 255504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253944 255505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -253988,11 +255549,16 @@
253988 255549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253989 255550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253990 255551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
253991 255552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Remove a row from the FTS table.
253992 255553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
253993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int sqlite3Fts5StorageDelete(Fts5Storage *p, i64 iDel, sqlite3_value **apVal){
255554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3Fts5StorageDelete(
255555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts5Storage *p, /* Storage object */
255556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iDel, /* Rowid to delete from table */
255557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal, /* Optional - values to remove from index */
255558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bSaveRow /* If true, set pSavedRow for deleted row */
255559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
253994 255560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Config *pConfig = p->pConfig;
253995 255561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
253996 255562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_stmt *pDel = 0;
253997 255563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
253998 255564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pConfig->eContent!=FTS5_CONTENT_NORMAL || apVal==0 );
@@ -254005,11 +255571,11 @@
254005 255571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
254006 255572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
254007 255573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pConfig->bContentlessDelete ){
254008 255574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts5StorageContentlessDelete(p, iDel);
254009 255575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
254010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts5StorageDeleteFromIndex(p, iDel, apVal);
255576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts5StorageDeleteFromIndex(p, iDel, apVal, bSaveRow);
254011 255577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254012 255578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254013 255579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
254014 255580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Delete the %_docsize record */
254015 255581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && pConfig->bColumnsize ){
@@ -254094,18 +255660,25 @@
254094 255660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5BufferZero(&buf);
254095 255661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5IndexBeginWrite(p->pIndex, 0, iRowid);
254096 255662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ctx.iCol=0; rc==SQLITE_OK && ctx.iCol<pConfig->nCol; ctx.iCol++){
254097 255663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.szCol = 0;
254098 255664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->abUnindexed[ctx.iCol]==0 ){
254099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zText = (const char*)sqlite3_column_text(pScan, ctx.iCol+1);
254100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nText = sqlite3_column_bytes(pScan, ctx.iCol+1);
254101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5Tokenize(pConfig,
254102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- FTS5_TOKENIZE_DOCUMENT,
254103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zText, nText,
254104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (void*)&ctx,
254105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5StorageInsertCallback
254106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
255665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bReset = 0; /* True if tokenizer locale must be reset */
255666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0; /* Size of pText in bytes */
255667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText = 0; /* Pointer to buffer containing text value */
255668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = sqlite3_column_value(pScan, ctx.iCol+1);
255669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(pConfig, pVal, 1, &bReset, &pText, &nText);
255671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
255672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5Tokenize(pConfig,
255673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FTS5_TOKENIZE_DOCUMENT,
255674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pText, nText,
255675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void*)&ctx,
255676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5StorageInsertCallback
255677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
255678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bReset ) sqlite3Fts5ClearLocale(pConfig);
255679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254107 255680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254108 255681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5BufferAppendVarint(&rc, &buf, ctx.szCol);
254109 255682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aTotalSize[ctx.iCol] += (i64)ctx.szCol;
254110 255683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254111 255684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nTotalRow++;
@@ -254185,11 +255758,35 @@
254185 255758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
254186 255759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_stmt *pInsert = 0; /* Statement to write %_content table */
254187 255760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* Counter variable */
254188 255761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts5StorageGetStmt(p, FTS5_STMT_INSERT_CONTENT, &pInsert, 0);
254189 255762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; rc==SQLITE_OK && i<=pConfig->nCol+1; i++){
254190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3_bind_value(pInsert, i, apVal[i]);
255763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = apVal[i];
255764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_value_nochange(pVal) && p->pSavedRow ){
255765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This is an UPDATE statement, and column (i-2) was not modified.
255766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Retrieve the value from Fts5Storage.pSavedRow instead. */
255767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVal = sqlite3_column_value(p->pSavedRow, i-1);
255768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( sqlite3_value_subtype(pVal)==FTS5_LOCALE_SUBTYPE ){
255769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pConfig->bLocale );
255770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( i>1 );
255771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConfig->abUnindexed[i-2] ){
255772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* At attempt to insert an fts5_locale() value into an UNINDEXED
255773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** column. Strip the locale away and just bind the text. */
255774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText = 0;
255775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0;
255776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(pConfig, pVal, 0, 0, &pText, &nText);
255777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_text(pInsert, i, pText, nText, SQLITE_TRANSIENT);
255778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
255779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const u8 *pBlob = (const u8*)sqlite3_value_blob(pVal);
255780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBlob = sqlite3_value_bytes(pVal);
255781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nBlob>4 );
255782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_blob(pInsert, i, pBlob+4, nBlob-4, SQLITE_TRANSIENT);
255783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
255785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_bind_value(pInsert, i, pVal);
254191 255788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254192 255789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
254193 255790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_step(pInsert);
254194 255791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_reset(pInsert);
254195 255792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -254220,18 +255817,28 @@
254220 255817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5IndexBeginWrite(p->pIndex, 0, iRowid);
254221 255818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254222 255819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ctx.iCol=0; rc==SQLITE_OK && ctx.iCol<pConfig->nCol; ctx.iCol++){
254223 255820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.szCol = 0;
254224 255821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->abUnindexed[ctx.iCol]==0 ){
254225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zText = (const char*)sqlite3_value_text(apVal[ctx.iCol+2]);
254226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nText = sqlite3_value_bytes(apVal[ctx.iCol+2]);
254227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5Tokenize(pConfig,
254228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- FTS5_TOKENIZE_DOCUMENT,
254229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zText, nText,
254230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (void*)&ctx,
254231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5StorageInsertCallback
254232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
255822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bReset = 0; /* True if tokenizer locale must be reset */
255823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0; /* Size of pText in bytes */
255824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText = 0; /* Pointer to buffer containing text value */
255825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = apVal[ctx.iCol+2];
255826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bDisk = 0;
255827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pSavedRow && sqlite3_value_nochange(pVal) ){
255828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVal = sqlite3_column_value(p->pSavedRow, ctx.iCol+1);
255829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bDisk = 1;
255830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(pConfig, pVal, bDisk, &bReset, &pText,&nText);
255832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
255833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( bReset==0 || pConfig->bLocale );
255834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5Tokenize(pConfig,
255835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FTS5_TOKENIZE_DOCUMENT, pText, nText, (void*)&ctx,
255836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5StorageInsertCallback
255837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
255838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bReset ) sqlite3Fts5ClearLocale(pConfig);
255839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254233 255840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254234 255841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts5BufferAppendVarint(&rc, &buf, ctx.szCol);
254235 255842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aTotalSize[ctx.iCol] += (i64)ctx.szCol;
254236 255843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254237 255844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nTotalRow++;
@@ -254398,18 +256005,26 @@
254398 256005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.szCol = 0;
254399 256006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pConfig->eDetail==FTS5_DETAIL_COLUMNS ){
254400 256007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts5TermsetNew(&ctx.pTermset);
254401 256008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254402 256009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
254403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zText = (const char*)sqlite3_column_text(pScan, i+1);
254404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nText = sqlite3_column_bytes(pScan, i+1);
254405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts5Tokenize(pConfig,
254406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- FTS5_TOKENIZE_DOCUMENT,
254407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zText, nText,
254408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (void*)&ctx,
254409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5StorageIntegrityCallback
256010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bReset = 0; /* True if tokenizer locale must be reset */
256011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nText = 0; /* Size of pText in bytes */
256012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pText = 0; /* Pointer to buffer containing text value */
256013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
256014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5ExtractText(pConfig,
256015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_column_value(pScan, i+1), 1, &bReset, &pText, &nText
254410 256016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
256017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
256018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts5Tokenize(pConfig,
256019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FTS5_TOKENIZE_DOCUMENT,
256020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pText, nText,
256021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void*)&ctx,
256022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5StorageIntegrityCallback
256023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
256024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bReset ) sqlite3Fts5ClearLocale(pConfig);
256025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
254411 256026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254412 256027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && pConfig->bColumnsize && ctx.szCol!=aColSize[i] ){
254413 256028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = FTS5_CORRUPT;
254414 256029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254415 256030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aTotalSize[i] += ctx.szCol;
@@ -254720,11 +256335,11 @@
254720 256335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
254721 256336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
254722 256337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
254723 256338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(p, 0, sizeof(AsciiTokenizer));
254724 256339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(p->aTokenChar, aAsciiTokenChar, sizeof(aAsciiTokenChar));
254725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){
256340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<nArg; i+=2){
254726 256341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zArg = azArg[i+1];
254727 256342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==sqlite3_stricmp(azArg[i], "tokenchars") ){
254728 256343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5AsciiAddExceptions(p, zArg, 1);
254729 256344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
254730 256345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==sqlite3_stricmp(azArg[i], "separators") ){
@@ -254731,11 +256346,10 @@
254731 256346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5AsciiAddExceptions(p, zArg, 0);
254732 256347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
254733 256348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_ERROR;
254734 256349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254735 256350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && i<nArg ) rc = SQLITE_ERROR;
254737 256351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
254738 256352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5AsciiDelete((Fts5Tokenizer*)p);
254739 256353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = 0;
254740 256354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
254741 256355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -255023,20 +256637,20 @@
255023 256637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->aFold==0 ){
255024 256638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
255025 256639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255026 256640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255027 256641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Search for a "categories" argument */
255028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){
256642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<nArg; i+=2){
255029 256643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==sqlite3_stricmp(azArg[i], "categories") ){
255030 256644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCat = azArg[i+1];
255031 256645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255032 256646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255033 256647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
255034 256648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = unicodeSetCategories(p, zCat);
255035 256649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255036 256650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){
256651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<nArg; i+=2){
255038 256652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zArg = azArg[i+1];
255039 256653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){
255040 256654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){
255041 256655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_ERROR;
255042 256656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -255057,12 +256671,10 @@
255057 256671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no-op */
255058 256672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
255059 256673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_ERROR;
255060 256674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255061 256675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<nArg && rc==SQLITE_OK ) rc = SQLITE_ERROR;
255063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
255064 256676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
255065 256677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
255066 256678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255067 256679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
255068 256680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5UnicodeDelete((Fts5Tokenizer*)p);
@@ -255197,11 +256809,11 @@
255197 256809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** stemming. */
255198 256810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS5_PORTER_MAX_TOKEN 64
255199 256811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255200 256812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PorterTokenizer PorterTokenizer;
255201 256813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct PorterTokenizer {
255202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5_tokenizer tokenizer; /* Parent tokenizer module */
256814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 tokenizer_v2; /* Parent tokenizer module */
255203 256815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Tokenizer *pTokenizer; /* Parent tokenizer instance */
255204 256816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char aBuf[FTS5_PORTER_MAX_TOKEN + 64];
255205 256817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
255206 256818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255207 256819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -255209,11 +256821,11 @@
255209 256821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
255210 256822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts5PorterDelete(Fts5Tokenizer *pTok){
255211 256823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTok ){
255212 256824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PorterTokenizer *p = (PorterTokenizer*)pTok;
255213 256825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pTokenizer ){
255214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->tokenizer.xDelete(p->pTokenizer);
256826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->tokenizer_v2.xDelete(p->pTokenizer);
255215 256827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255216 256828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p);
255217 256829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255218 256830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255219 256831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -255228,26 +256840,28 @@
255228 256840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_api *pApi = (fts5_api*)pCtx;
255229 256841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
255230 256842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PorterTokenizer *pRet;
255231 256843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserdata = 0;
255232 256844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zBase = "unicode61";
256845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 *pV2 = 0;
255233 256846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255234 256847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nArg>0 ){
255235 256848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBase = azArg[0];
255236 256849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255237 256850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255238 256851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRet = (PorterTokenizer*)sqlite3_malloc(sizeof(PorterTokenizer));
255239 256852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRet ){
255240 256853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pRet, 0, sizeof(PorterTokenizer));
255241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pApi->xFindTokenizer(pApi, zBase, &pUserdata, &pRet->tokenizer);
256854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xFindTokenizer_v2(pApi, zBase, &pUserdata, &pV2);
255242 256855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
255243 256856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
255244 256857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255245 256858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
255246 256859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg2 = (nArg>0 ? nArg-1 : 0);
255247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char **azArg2 = (nArg2 ? &azArg[1] : 0);
255248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pRet->tokenizer.xCreate(pUserdata, azArg2, nArg2, &pRet->pTokenizer);
256860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char **az2 = (nArg2 ? &azArg[1] : 0);
256861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(&pRet->tokenizer_v2, pV2, sizeof(fts5_tokenizer_v2));
256862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pRet->tokenizer_v2.xCreate(pUserdata, az2, nArg2, &pRet->pTokenizer);
255249 256863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255250 256864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255251 256865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
255252 256866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5PorterDelete((Fts5Tokenizer*)pRet);
255253 256867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRet = 0;
@@ -255894,19 +257508,20 @@
255894 257508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts5PorterTokenize(
255895 257509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Tokenizer *pTokenizer,
255896 257510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pCtx,
255897 257511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags,
255898 257512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *pText, int nText,
257513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pLoc, int nLoc,
255899 257514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*xToken)(void*, int, const char*, int nToken, int iStart, int iEnd)
255900 257515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
255901 257516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PorterTokenizer *p = (PorterTokenizer*)pTokenizer;
255902 257517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PorterContext sCtx;
255903 257518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sCtx.xToken = xToken;
255904 257519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sCtx.pCtx = pCtx;
255905 257520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sCtx.aBuf = p->aBuf;
255906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p->tokenizer.xTokenize(
255907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pTokenizer, (void*)&sCtx, flags, pText, nText, fts5PorterCb
257521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p->tokenizer_v2.xTokenize(
257522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pTokenizer, (void*)&sCtx, flags, pText, nText, pLoc, nLoc, fts5PorterCb
255908 257523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
255909 257524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255910 257525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255911 257526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**************************************************************************
255912 257527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Start of trigram implementation.
@@ -255932,45 +257547,50 @@
255932 257547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **azArg,
255933 257548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg,
255934 257549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts5Tokenizer **ppOut
255935 257550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
255936 257551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
255937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- TrigramTokenizer *pNew = (TrigramTokenizer*)sqlite3_malloc(sizeof(*pNew));
257552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TrigramTokenizer *pNew = 0;
255938 257553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAM(pUnused);
255939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNew==0 ){
255940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_NOMEM;
257554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nArg%2 ){
257555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
255941 257556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
255942 257557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
255943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->bFold = 1;
255944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->iFoldParam = 0;
255945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; rc==SQLITE_OK && i<nArg-1; i+=2){
255946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zArg = azArg[i+1];
255947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==sqlite3_stricmp(azArg[i], "case_sensitive") ){
255948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (zArg[0]!='0' && zArg[0]!='1') || zArg[1] ){
255949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
255950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
255951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->bFold = (zArg[0]=='0');
255952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
255953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){
255954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){
255955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
255956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
255957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->iFoldParam = (zArg[0]!='0') ? 2 : 0;
255958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
255959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
255960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
255961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
255962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
255963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<nArg && rc==SQLITE_OK ) rc = SQLITE_ERROR;
255964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
255965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNew->iFoldParam!=0 && pNew->bFold==0 ){
255966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
255967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
255968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
255969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ){
255970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts5TriDelete((Fts5Tokenizer*)pNew);
255971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew = 0;
257558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = (TrigramTokenizer*)sqlite3_malloc(sizeof(*pNew));
257559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew==0 ){
257560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_NOMEM;
257561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
257562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->bFold = 1;
257563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->iFoldParam = 0;
257564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
257565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<nArg; i+=2){
257566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zArg = azArg[i+1];
257567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==sqlite3_stricmp(azArg[i], "case_sensitive") ){
257568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (zArg[0]!='0' && zArg[0]!='1') || zArg[1] ){
257569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
257570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
257571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->bFold = (zArg[0]=='0');
257572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
257573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){
257574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){
257575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
257576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
257577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->iFoldParam = (zArg[0]!='0') ? 2 : 0;
257578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
257579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
257580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
257581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
257582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
257583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
257584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew->iFoldParam!=0 && pNew->bFold==0 ){
257585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR;
257586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
257587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
257588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
257589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5TriDelete((Fts5Tokenizer*)pNew);
257590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = 0;
257591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
255972 257592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255973 257593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255974 257594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppOut = (Fts5Tokenizer*)pNew;
255975 257595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
255976 257596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -256091,11 +257711,10 @@
256091 257711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName;
256092 257712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts5_tokenizer x;
256093 257713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} aBuiltin[] = {
256094 257714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "unicode61", {fts5UnicodeCreate, fts5UnicodeDelete, fts5UnicodeTokenize}},
256095 257715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "ascii", {fts5AsciiCreate, fts5AsciiDelete, fts5AsciiTokenize }},
256096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "porter", {fts5PorterCreate, fts5PorterDelete, fts5PorterTokenize }},
256097 257716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "trigram", {fts5TriCreate, fts5TriDelete, fts5TriTokenize}},
256098 257717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
256099 257718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
256100 257719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Return code */
256101 257720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* To iterate through builtin functions */
@@ -256106,11 +257725,24 @@
256106 257725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void*)pApi,
256107 257726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&aBuiltin[i].x,
256108 257727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0
256109 257728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
256110 257729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
256111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
257730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
257731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5_tokenizer_v2 sPorter = {
257732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 2,
257733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5PorterCreate,
257734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5PorterDelete,
257735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts5PorterTokenize
257736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
257737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pApi->xCreateTokenizer_v2(pApi,
257738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "porter",
257739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void*)pApi,
257740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ &sPorter,
257741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0
257742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
257743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
256112 257744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
256113 257745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
256114 257746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
256115 257747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
256116 257748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2012-05-25
@@ -256476,10 +258108,13 @@
256476 258108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aArray[29] = 1;
256477 258109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
256478 258110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: return 1; }
256479 258111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
256480 258112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
258113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
258114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default:
258115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
256481 258116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
256482 258117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
256483 258118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
256484 258119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
256485 258120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u16 aFts5UnicodeBlock[] = {
256486 258121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!