Fossil SCM

Update the built-in SQLite to the first 3.29.0 beta for testing. Enable the -DSQLITE_DQS=0 compile-time option for Fossil, thus preventing SQLite from using double-quoted string literals by default.

drh 2019-07-08 17:05 trunk
Commit 0c0f6db7bad8365ed66dedeb96c105d88ebfec1be56bdd6ed3ddaf2209e04c55
--- src/main.mk
+++ src/main.mk
@@ -566,10 +566,11 @@
566566
$(OBJDIR)/mkcss $(SRCDIR)/default_css.txt $(OBJDIR)/default_css.h
567567
568568
# Setup the options used to compile the included SQLite library.
569569
SQLITE_OPTIONS = -DNDEBUG=1 \
570570
-DSQLITE_THREADSAFE=0 \
571
+ -DSQLITE_DQS=0 \
571572
-DSQLITE_DEFAULT_MEMSTATUS=0 \
572573
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
573574
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
574575
-DSQLITE_OMIT_DECLTYPE \
575576
-DSQLITE_OMIT_DEPRECATED \
@@ -592,10 +593,11 @@
592593
-DSQLITE_ENABLE_DBPAGE_VTAB
593594
594595
# Setup the options used to compile the included SQLite shell.
595596
SHELL_OPTIONS = -DNDEBUG=1 \
596597
-DSQLITE_THREADSAFE=0 \
598
+ -DSQLITE_DQS=0 \
597599
-DSQLITE_DEFAULT_MEMSTATUS=0 \
598600
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
599601
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
600602
-DSQLITE_OMIT_DECLTYPE \
601603
-DSQLITE_OMIT_DEPRECATED \
602604
--- src/main.mk
+++ src/main.mk
@@ -566,10 +566,11 @@
566 $(OBJDIR)/mkcss $(SRCDIR)/default_css.txt $(OBJDIR)/default_css.h
567
568 # Setup the options used to compile the included SQLite library.
569 SQLITE_OPTIONS = -DNDEBUG=1 \
570 -DSQLITE_THREADSAFE=0 \
 
571 -DSQLITE_DEFAULT_MEMSTATUS=0 \
572 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
573 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
574 -DSQLITE_OMIT_DECLTYPE \
575 -DSQLITE_OMIT_DEPRECATED \
@@ -592,10 +593,11 @@
592 -DSQLITE_ENABLE_DBPAGE_VTAB
593
594 # Setup the options used to compile the included SQLite shell.
595 SHELL_OPTIONS = -DNDEBUG=1 \
596 -DSQLITE_THREADSAFE=0 \
 
597 -DSQLITE_DEFAULT_MEMSTATUS=0 \
598 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
599 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
600 -DSQLITE_OMIT_DECLTYPE \
601 -DSQLITE_OMIT_DEPRECATED \
602
--- src/main.mk
+++ src/main.mk
@@ -566,10 +566,11 @@
566 $(OBJDIR)/mkcss $(SRCDIR)/default_css.txt $(OBJDIR)/default_css.h
567
568 # Setup the options used to compile the included SQLite library.
569 SQLITE_OPTIONS = -DNDEBUG=1 \
570 -DSQLITE_THREADSAFE=0 \
571 -DSQLITE_DQS=0 \
572 -DSQLITE_DEFAULT_MEMSTATUS=0 \
573 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
574 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
575 -DSQLITE_OMIT_DECLTYPE \
576 -DSQLITE_OMIT_DEPRECATED \
@@ -592,10 +593,11 @@
593 -DSQLITE_ENABLE_DBPAGE_VTAB
594
595 # Setup the options used to compile the included SQLite shell.
596 SHELL_OPTIONS = -DNDEBUG=1 \
597 -DSQLITE_THREADSAFE=0 \
598 -DSQLITE_DQS=0 \
599 -DSQLITE_DEFAULT_MEMSTATUS=0 \
600 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
601 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
602 -DSQLITE_OMIT_DECLTYPE \
603 -DSQLITE_OMIT_DEPRECATED \
604
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -179,10 +179,11 @@
179179
# Options used to compile the included SQLite library.
180180
#
181181
set SQLITE_OPTIONS {
182182
-DNDEBUG=1
183183
-DSQLITE_THREADSAFE=0
184
+ -DSQLITE_DQS=0
184185
-DSQLITE_DEFAULT_MEMSTATUS=0
185186
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1
186187
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS
187188
-DSQLITE_OMIT_DECLTYPE
188189
-DSQLITE_OMIT_DEPRECATED
189190
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -179,10 +179,11 @@
179 # Options used to compile the included SQLite library.
180 #
181 set SQLITE_OPTIONS {
182 -DNDEBUG=1
183 -DSQLITE_THREADSAFE=0
 
184 -DSQLITE_DEFAULT_MEMSTATUS=0
185 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1
186 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS
187 -DSQLITE_OMIT_DECLTYPE
188 -DSQLITE_OMIT_DEPRECATED
189
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -179,10 +179,11 @@
179 # Options used to compile the included SQLite library.
180 #
181 set SQLITE_OPTIONS {
182 -DNDEBUG=1
183 -DSQLITE_THREADSAFE=0
184 -DSQLITE_DQS=0
185 -DSQLITE_DEFAULT_MEMSTATUS=0
186 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1
187 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS
188 -DSQLITE_OMIT_DECLTYPE
189 -DSQLITE_OMIT_DEPRECATED
190
+13 -9
--- src/shell.c
+++ src/shell.c
@@ -15618,19 +15618,23 @@
1561815618
if( c=='d' && n>=3 && strncmp(azArg[0], "dbconfig", n)==0 ){
1561915619
static const struct DbConfigChoices {
1562015620
const char *zName;
1562115621
int op;
1562215622
} aDbConfig[] = {
15623
- { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
15624
- { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
15625
- { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
15626
- { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
15627
- { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
15628
- { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
15629
- { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
15630
- { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
15631
- { "defensive", SQLITE_DBCONFIG_DEFENSIVE },
15623
+ { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
15624
+ { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
15625
+ { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
15626
+ { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
15627
+ { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
15628
+ { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
15629
+ { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
15630
+ { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
15631
+ { "defensive", SQLITE_DBCONFIG_DEFENSIVE },
15632
+ { "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
15633
+ { "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
15634
+ { "dqs_dml", SQLITE_DBCONFIG_DQS_DML },
15635
+ { "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL },
1563215636
};
1563315637
int ii, v;
1563415638
open_db(p, 0);
1563515639
for(ii=0; ii<ArraySize(aDbConfig); ii++){
1563615640
if( nArg>1 && strcmp(azArg[1], aDbConfig[ii].zName)!=0 ) continue;
1563715641
--- src/shell.c
+++ src/shell.c
@@ -15618,19 +15618,23 @@
15618 if( c=='d' && n>=3 && strncmp(azArg[0], "dbconfig", n)==0 ){
15619 static const struct DbConfigChoices {
15620 const char *zName;
15621 int op;
15622 } aDbConfig[] = {
15623 { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
15624 { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
15625 { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
15626 { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
15627 { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
15628 { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
15629 { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
15630 { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
15631 { "defensive", SQLITE_DBCONFIG_DEFENSIVE },
 
 
 
 
15632 };
15633 int ii, v;
15634 open_db(p, 0);
15635 for(ii=0; ii<ArraySize(aDbConfig); ii++){
15636 if( nArg>1 && strcmp(azArg[1], aDbConfig[ii].zName)!=0 ) continue;
15637
--- src/shell.c
+++ src/shell.c
@@ -15618,19 +15618,23 @@
15618 if( c=='d' && n>=3 && strncmp(azArg[0], "dbconfig", n)==0 ){
15619 static const struct DbConfigChoices {
15620 const char *zName;
15621 int op;
15622 } aDbConfig[] = {
15623 { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
15624 { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
15625 { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
15626 { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
15627 { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
15628 { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
15629 { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
15630 { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
15631 { "defensive", SQLITE_DBCONFIG_DEFENSIVE },
15632 { "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
15633 { "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
15634 { "dqs_dml", SQLITE_DBCONFIG_DQS_DML },
15635 { "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL },
15636 };
15637 int ii, v;
15638 open_db(p, 0);
15639 for(ii=0; ii<ArraySize(aDbConfig); ii++){
15640 if( nArg>1 && strcmp(azArg[1], aDbConfig[ii].zName)!=0 ) continue;
15641
+212 -99
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -37,11 +37,11 @@
3737
**
3838
** This file implements routines used to report what compile-time options
3939
** SQLite was built with.
4040
*/
4141
42
-#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
42
+#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS /* IMP: R-16824-07538 */
4343
4444
/*
4545
** Include the configuration header output by 'configure' if we're using the
4646
** autoconf-based build
4747
*/
@@ -1167,11 +1167,11 @@
11671167
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
11681168
** [sqlite_version()] and [sqlite_source_id()].
11691169
*/
11701170
#define SQLITE_VERSION "3.29.0"
11711171
#define SQLITE_VERSION_NUMBER 3029000
1172
-#define SQLITE_SOURCE_ID "2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6c2be4"
1172
+#define SQLITE_SOURCE_ID "2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9acaf6"
11731173
11741174
/*
11751175
** CAPI3REF: Run-Time Library Version Numbers
11761176
** KEYWORDS: sqlite3_version sqlite3_sourceid
11771177
**
@@ -3262,10 +3262,38 @@
32623262
** the writable_schema, positive to enable writable_schema, or negative to
32633263
** leave the setting unchanged. The second parameter is a pointer to an
32643264
** integer into which is written 0 or 1 to indicate whether the writable_schema
32653265
** is enabled or disabled following this call.
32663266
** </dd>
3267
+**
3268
+** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
3269
+** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
3270
+** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
3271
+** the legacy behavior of the [ALTER TABLE RENAME] command such it
3272
+** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
3273
+** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
3274
+** additional information. This feature can also be turned on and off
3275
+** using the [PRAGMA legacy_alter_table] statement.
3276
+** </dd>
3277
+**
3278
+** [[SQLITE_DBCONFIG_DQS_DML]]
3279
+** <dt>SQLITE_DBCONFIG_DQS_DML</td>
3280
+** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
3281
+** the legacy [double-quoted string literal] misfeature for DML statement
3282
+** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
3283
+** default value of this setting is determined by the [-DSQLITE_DQS]
3284
+** compile-time option.
3285
+** </dd>
3286
+**
3287
+** [[SQLITE_DBCONFIG_DQS_DDL]]
3288
+** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
3289
+** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
3290
+** the legacy [double-quoted string literal] misfeature for DDL statements,
3291
+** such as CREATE TABLE and CREATE INDEX. The
3292
+** default value of this setting is determined by the [-DSQLITE_DQS]
3293
+** compile-time option.
3294
+** </dd>
32673295
** </dl>
32683296
*/
32693297
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
32703298
#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
32713299
#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
@@ -3276,11 +3304,14 @@
32763304
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
32773305
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
32783306
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
32793307
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
32803308
#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
3281
-#define SQLITE_DBCONFIG_MAX 1011 /* Largest DBCONFIG */
3309
+#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
3310
+#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
3311
+#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
3312
+#define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
32823313
32833314
/*
32843315
** CAPI3REF: Enable Or Disable Extended Result Codes
32853316
** METHOD: sqlite3
32863317
**
@@ -16482,10 +16513,12 @@
1648216513
#define SQLITE_TriggerEQP 0x01000000 /* Show trigger EXPLAIN QUERY PLAN */
1648316514
#define SQLITE_ResetDatabase 0x02000000 /* Reset the database */
1648416515
#define SQLITE_LegacyAlter 0x04000000 /* Legacy ALTER TABLE behaviour */
1648516516
#define SQLITE_NoSchemaError 0x08000000 /* Do not report schema parse errors*/
1648616517
#define SQLITE_Defensive 0x10000000 /* Input SQL is likely hostile */
16518
+#define SQLITE_DqsDDL 0x20000000 /* dbl-quoted strings allowed in DDL*/
16519
+#define SQLITE_DqsDML 0x40000000 /* dbl-quoted strings allowed in DML*/
1648716520
1648816521
/* Flags used only if debugging */
1648916522
#define HI(X) ((u64)(X)<<32)
1649016523
#ifdef SQLITE_DEBUG
1649116524
#define SQLITE_SqlTrace HI(0x0001) /* Debug print SQL as it executes */
@@ -17728,12 +17761,11 @@
1772817761
#define NC_UUpsert 0x0200 /* True if uNC.pUpsert is used */
1772917762
#define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */
1773017763
#define NC_Complex 0x2000 /* True if a function or subquery seen */
1773117764
#define NC_AllowWin 0x4000 /* Window functions are allowed here */
1773217765
#define NC_HasWin 0x8000 /* One or more window functions seen */
17733
-#define NC_NoDblQStr 0x10000 /* Do not allow double-quoted string hack.
17734
- ** Mnemonic: "NO DouBLe-Quoted STRings" */
17766
+#define NC_IsDDL 0x10000 /* Resolving names in a CREATE statement */
1773517767
1773617768
/*
1773717769
** An instance of the following object describes a single ON CONFLICT
1773817770
** clause in an upsert.
1773917771
**
@@ -19781,12 +19813,19 @@
1978119813
1978219814
/* EVIDENCE-OF: R-38720-18127 The default setting is determined by the
1978319815
** SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if
1978419816
** that compile-time option is omitted.
1978519817
*/
19786
-#ifndef SQLITE_ALLOW_COVERING_INDEX_SCAN
19818
+#if !defined(SQLITE_ALLOW_COVERING_INDEX_SCAN)
1978719819
# define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
19820
+#else
19821
+# if !SQLITE_ALLOW_COVERING_INDEX_SCAN
19822
+# error "Compile-time disabling of covering index scan using the\
19823
+ -DSQLITE_ALLOW_COVERING_INDEX_SCAN=0 option is deprecated.\
19824
+ Contact SQLite developers if this is a problem for you, and\
19825
+ delete this #error macro to continue with your build."
19826
+# endif
1978819827
#endif
1978919828
1979019829
/* The minimum PMA size is set to this value multiplied by the database
1979119830
** page size in bytes.
1979219831
*/
@@ -49444,20 +49483,20 @@
4944449483
pGroup = (PGroup*)&pCache[1];
4944549484
pGroup->mxPinned = 10;
4944649485
}else{
4944749486
pGroup = &pcache1.grp;
4944849487
}
49488
+ pcache1EnterMutex(pGroup);
4944949489
if( pGroup->lru.isAnchor==0 ){
4945049490
pGroup->lru.isAnchor = 1;
4945149491
pGroup->lru.pLruPrev = pGroup->lru.pLruNext = &pGroup->lru;
4945249492
}
4945349493
pCache->pGroup = pGroup;
4945449494
pCache->szPage = szPage;
4945549495
pCache->szExtra = szExtra;
4945649496
pCache->szAlloc = szPage + szExtra + ROUND8(sizeof(PgHdr1));
4945749497
pCache->bPurgeable = (bPurgeable ? 1 : 0);
49458
- pcache1EnterMutex(pGroup);
4945949498
pcache1ResizeHash(pCache);
4946049499
if( bPurgeable ){
4946149500
pCache->nMin = 10;
4946249501
pGroup->nMinPage += pCache->nMin;
4946349502
pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
@@ -87511,17 +87550,18 @@
8751187550
pCx = p->apCsr[pOp->p1];
8751287551
if( pCx ){
8751387552
/* If the ephermeral table is already open, erase all existing content
8751487553
** so that the table is empty again, rather than creating a new table. */
8751587554
assert( pCx->isEphemeral );
87555
+ pCx->seqCount = 0;
87556
+ pCx->cacheStatus = CACHE_STALE;
8751687557
if( pCx->pBtx ){
8751787558
rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0);
8751887559
}
8751987560
}else{
8752087561
pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, CURTYPE_BTREE);
8752187562
if( pCx==0 ) goto no_mem;
87522
- pCx->nullRow = 1;
8752387563
pCx->isEphemeral = 1;
8752487564
rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBtx,
8752587565
BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5,
8752687566
vfsFlags);
8752787567
if( rc==SQLITE_OK ){
@@ -87553,10 +87593,11 @@
8755387593
}
8755487594
}
8755587595
pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
8755687596
}
8755787597
if( rc ) goto abort_due_to_error;
87598
+ pCx->nullRow = 1;
8755887599
break;
8755987600
}
8756087601
8756187602
/* Opcode: SorterOpen P1 P2 P3 P4 *
8756287603
**
@@ -95521,10 +95562,27 @@
9552195562
if( zCol && sqlite3StrICmp(zSpan, zCol)!=0 ){
9552295563
return 0;
9552395564
}
9552495565
return 1;
9552595566
}
95567
+
95568
+/*
95569
+** Return TRUE if the double-quoted string mis-feature should be supported.
95570
+*/
95571
+static int areDoubleQuotedStringsEnabled(sqlite3 *db, NameContext *pTopNC){
95572
+ if( db->init.busy ) return 1; /* Always support for legacy schemas */
95573
+ if( pTopNC->ncFlags & NC_IsDDL ){
95574
+ /* Currently parsing a DDL statement */
95575
+ if( sqlite3WritableSchema(db) && (db->flags & SQLITE_DqsDML)!=0 ){
95576
+ return 1;
95577
+ }
95578
+ return (db->flags & SQLITE_DqsDDL)!=0;
95579
+ }else{
95580
+ /* Currently parsing a DML statement */
95581
+ return (db->flags & SQLITE_DqsDML)!=0;
95582
+ }
95583
+}
9552695584
9552795585
/*
9552895586
** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
9552995587
** that name in the set of source tables in pSrcList and make the pExpr
9553095588
** expression node refer back to that source column. The following changes
@@ -95850,12 +95908,12 @@
9585095908
** Because no reference was made to outer contexts, the pNC->nRef
9585195909
** fields are not changed in any context.
9585295910
*/
9585395911
if( cnt==0 && zTab==0 ){
9585495912
assert( pExpr->op==TK_ID );
95855
- if( ExprHasProperty(pExpr,EP_DblQuoted)
95856
- && 0==(pTopNC->ncFlags&NC_NoDblQStr)
95913
+ if( ExprHasProperty(pExpr,EP_DblQuoted)
95914
+ && areDoubleQuotedStringsEnabled(db, pTopNC)
9585795915
){
9585895916
/* If a double-quoted identifier does not match any known column name,
9585995917
** then treat it as a string.
9586095918
**
9586195919
** This hack was added in the early days of SQLite in a misguided attempt
@@ -97144,14 +97202,11 @@
9714497202
sSrc.a[0].pTab = pTab;
9714597203
sSrc.a[0].iCursor = -1;
9714697204
}
9714797205
sNC.pParse = pParse;
9714897206
sNC.pSrcList = &sSrc;
97149
- sNC.ncFlags = type;
97150
- if( !pParse->db->init.busy && !sqlite3WritableSchema(pParse->db) ){
97151
- sNC.ncFlags |= NC_NoDblQStr;
97152
- }
97207
+ sNC.ncFlags = type | NC_IsDDL;
9715397208
if( (rc = sqlite3ResolveExprNames(&sNC, pExpr))!=SQLITE_OK ) return rc;
9715497209
if( pList ) rc = sqlite3ResolveExprListNames(&sNC, pList);
9715597210
return rc;
9715697211
}
9715797212
@@ -100544,11 +100599,12 @@
100544100599
/*
100545100600
** Convert a scalar expression node to a TK_REGISTER referencing
100546100601
** register iReg. The caller must ensure that iReg already contains
100547100602
** the correct value for the expression.
100548100603
*/
100549
-static void exprToRegister(Expr *p, int iReg){
100604
+static void exprToRegister(Expr *pExpr, int iReg){
100605
+ Expr *p = sqlite3ExprSkipCollate(pExpr);
100550100606
p->op2 = p->op;
100551100607
p->op = TK_REGISTER;
100552100608
p->iTable = iReg;
100553100609
ExprClearProperty(p, EP_Skip);
100554100610
}
@@ -103438,15 +103494,24 @@
103438103494
103439103495
/*
103440103496
** Walker callback used by sqlite3RenameExprUnmap().
103441103497
*/
103442103498
static int renameUnmapSelectCb(Walker *pWalker, Select *p){
103499
+ Parse *pParse = pWalker->pParse;
103500
+ int i;
103501
+ if( ALWAYS(p->pEList) ){
103502
+ ExprList *pList = p->pEList;
103503
+ for(i=0; i<pList->nExpr; i++){
103504
+ if( pList->a[i].zName ){
103505
+ sqlite3RenameTokenRemap(pParse, 0, (void*)pList->a[i].zName);
103506
+ }
103507
+ }
103508
+ }
103443103509
if( ALWAYS(p->pSrc) ){ /* Every Select as a SrcList, even if it is empty */
103444
- Parse *pParse = pWalker->pParse;
103445
- int i;
103446
- for(i=0; i<p->pSrc->nSrc; i++){
103447
- sqlite3RenameTokenRemap(pParse, 0, (void*)p->pSrc->a[0].zName);
103510
+ SrcList *pSrc = p->pSrc;
103511
+ for(i=0; i<pSrc->nSrc; i++){
103512
+ sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
103448103513
}
103449103514
}
103450103515
return WRC_Continue;
103451103516
}
103452103517
@@ -107836,14 +107901,18 @@
107836107901
static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
107837107902
Index *pIndex, *pNext;
107838107903
107839107904
#ifdef SQLITE_DEBUG
107840107905
/* Record the number of outstanding lookaside allocations in schema Tables
107841
- ** prior to doing any free() operations. Since schema Tables do not use
107842
- ** lookaside, this number should not change. */
107906
+ ** prior to doing any free() operations. Since schema Tables do not use
107907
+ ** lookaside, this number should not change.
107908
+ **
107909
+ ** If malloc has already failed, it may be that it failed while allocating
107910
+ ** a Table object that was going to be marked ephemeral. So do not check
107911
+ ** that no lookaside memory is used in this case either. */
107843107912
int nLookaside = 0;
107844
- if( db && (pTable->tabFlags & TF_Ephemeral)==0 ){
107913
+ if( db && !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){
107845107914
nLookaside = sqlite3LookasideUsed(db, 0);
107846107915
}
107847107916
#endif
107848107917
107849107918
/* Delete all indices associated with this table. */
@@ -127167,13 +127236,10 @@
127167127236
while( pSelect->pPrior ) pSelect = pSelect->pPrior;
127168127237
pTab = sqlite3DbMallocZero(db, sizeof(Table) );
127169127238
if( pTab==0 ){
127170127239
return 0;
127171127240
}
127172
- /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
127173
- ** is disabled */
127174
- assert( db->lookaside.bDisable );
127175127241
pTab->nTabRef = 1;
127176127242
pTab->zName = 0;
127177127243
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
127178127244
sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
127179127245
sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect);
@@ -139175,32 +139241,35 @@
139175139241
zNew[iTo++] = zNew[iFrom];
139176139242
}
139177139243
zNew[iTo] = 0;
139178139244
assert( iTo>0 );
139179139245
139180
- /* If the RHS begins with a digit, a +/- sign or whitespace, then the
139181
- ** LHS must be an ordinary column (not a virtual table column) with
139182
- ** TEXT affinity. Otherwise the LHS might be numeric and "lhs >= rhs"
139183
- ** would be false even though "lhs LIKE rhs" is true. But if the RHS
139184
- ** does not start with a digit or +/-, then "lhs LIKE rhs" will always
139185
- ** be false if the LHS is numeric and so the optimization still works.
139246
+ /* If the LHS is not an ordinary column with TEXT affinity, then the
139247
+ ** pattern prefix boundaries (both the start and end boundaries) must
139248
+ ** not look like a number. Otherwise the pattern might be treated as
139249
+ ** a number, which will invalidate the LIKE optimization.
139186139250
**
139187
- ** 2018-09-10 ticket c94369cae9b561b1f996d0054bfab11389f9d033
139188
- ** The RHS pattern must not be '/%' because the termination condition
139189
- ** will then become "x<'0'" and if the affinity is numeric, will then
139190
- ** be converted into "x<0", which is incorrect.
139251
+ ** Getting this right has been a persistent source of bugs in the
139252
+ ** LIKE optimization. See, for example:
139253
+ ** 2018-09-10 https://sqlite.org/src/info/c94369cae9b561b1
139254
+ ** 2019-05-02 https://sqlite.org/src/info/b043a54c3de54b28
139255
+ ** 2019-06-10 https://sqlite.org/src/info/fd76310a5e843e07
139256
+ ** 2019-06-14 https://sqlite.org/src/info/ce8717f0885af975
139191139257
*/
139192
- if( sqlite3Isdigit(zNew[0])
139193
- || sqlite3Isspace(zNew[0])
139194
- || zNew[0]=='-'
139195
- || zNew[0]=='+'
139196
- || zNew[iTo-1]=='0'-1
139197
- ){
139198
- if( pLeft->op!=TK_COLUMN
139199
- || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT
139200
- || IsVirtual(pLeft->y.pTab) /* Value might be numeric */
139201
- ){
139258
+ if( pLeft->op!=TK_COLUMN
139259
+ || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT
139260
+ || IsVirtual(pLeft->y.pTab) /* Value might be numeric */
139261
+ ){
139262
+ int isNum;
139263
+ double rDummy;
139264
+ isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8);
139265
+ if( isNum<=0 ){
139266
+ zNew[iTo-1]++;
139267
+ isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8);
139268
+ zNew[iTo-1]--;
139269
+ }
139270
+ if( isNum>0 ){
139202139271
sqlite3ExprDelete(db, pPrefix);
139203139272
sqlite3ValueFree(pVal);
139204139273
return 0;
139205139274
}
139206139275
}
@@ -141083,21 +141152,21 @@
141083141152
**
141084141153
** This routine runs over generated VDBE code and translates OP_Column
141085141154
** opcodes into OP_Copy when the table is being accessed via co-routine
141086141155
** instead of via table lookup.
141087141156
**
141088
-** If the bIncrRowid parameter is 0, then any OP_Rowid instructions on
141089
-** cursor iTabCur are transformed into OP_Null. Or, if bIncrRowid is non-zero,
141090
-** then each OP_Rowid is transformed into an instruction to increment the
141091
-** value stored in its output register.
141157
+** If the iAutoidxCur is not zero, then any OP_Rowid instructions on
141158
+** cursor iTabCur are transformed into OP_Sequence opcode for the
141159
+** iAutoidxCur cursor, in order to generate unique rowids for the
141160
+** automatic index being generated.
141092141161
*/
141093141162
static void translateColumnToCopy(
141094141163
Parse *pParse, /* Parsing context */
141095141164
int iStart, /* Translate from this opcode to the end */
141096141165
int iTabCur, /* OP_Column/OP_Rowid references to this table */
141097141166
int iRegister, /* The first column is in this register */
141098
- int bIncrRowid /* If non-zero, transform OP_rowid to OP_AddImm(1) */
141167
+ int iAutoidxCur /* If non-zero, cursor of autoindex being generated */
141099141168
){
141100141169
Vdbe *v = pParse->pVdbe;
141101141170
VdbeOp *pOp = sqlite3VdbeGetOp(v, iStart);
141102141171
int iEnd = sqlite3VdbeCurrentAddr(v);
141103141172
if( pParse->db->mallocFailed ) return;
@@ -141107,15 +141176,13 @@
141107141176
pOp->opcode = OP_Copy;
141108141177
pOp->p1 = pOp->p2 + iRegister;
141109141178
pOp->p2 = pOp->p3;
141110141179
pOp->p3 = 0;
141111141180
}else if( pOp->opcode==OP_Rowid ){
141112
- if( bIncrRowid ){
141113
- /* Increment the value stored in the P2 operand of the OP_Rowid. */
141114
- pOp->opcode = OP_AddImm;
141115
- pOp->p1 = pOp->p2;
141116
- pOp->p2 = 1;
141181
+ if( iAutoidxCur ){
141182
+ pOp->opcode = OP_Sequence;
141183
+ pOp->p1 = iAutoidxCur;
141117141184
}else{
141118141185
pOp->opcode = OP_Null;
141119141186
pOp->p1 = 0;
141120141187
pOp->p3 = 0;
141121141188
}
@@ -141385,12 +141452,13 @@
141385141452
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
141386141453
if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
141387141454
if( pTabItem->fg.viaCoroutine ){
141388141455
sqlite3VdbeChangeP2(v, addrCounter, regBase+n);
141389141456
testcase( pParse->db->mallocFailed );
141457
+ assert( pLevel->iIdxCur>0 );
141390141458
translateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
141391
- pTabItem->regResult, 1);
141459
+ pTabItem->regResult, pLevel->iIdxCur);
141392141460
sqlite3VdbeGoto(v, addrTop);
141393141461
pTabItem->fg.viaCoroutine = 0;
141394141462
}else{
141395141463
sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
141396141464
}
@@ -146631,10 +146699,11 @@
146631146699
typedef struct WindowRewrite WindowRewrite;
146632146700
struct WindowRewrite {
146633146701
Window *pWin;
146634146702
SrcList *pSrc;
146635146703
ExprList *pSub;
146704
+ Table *pTab;
146636146705
Select *pSubSelect; /* Current sub-select, if any */
146637146706
};
146638146707
146639146708
/*
146640146709
** Callback function used by selectWindowRewriteEList(). If necessary,
@@ -146691,10 +146760,11 @@
146691146760
memset(pExpr, 0, sizeof(Expr));
146692146761
146693146762
pExpr->op = TK_COLUMN;
146694146763
pExpr->iColumn = p->pSub->nExpr-1;
146695146764
pExpr->iTable = p->pWin->iEphCsr;
146765
+ pExpr->y.pTab = p->pTab;
146696146766
}
146697146767
146698146768
break;
146699146769
}
146700146770
@@ -146734,10 +146804,11 @@
146734146804
static void selectWindowRewriteEList(
146735146805
Parse *pParse,
146736146806
Window *pWin,
146737146807
SrcList *pSrc,
146738146808
ExprList *pEList, /* Rewrite expressions in this list */
146809
+ Table *pTab,
146739146810
ExprList **ppSub /* IN/OUT: Sub-select expression-list */
146740146811
){
146741146812
Walker sWalker;
146742146813
WindowRewrite sRewrite;
146743146814
@@ -146745,10 +146816,11 @@
146745146816
memset(&sRewrite, 0, sizeof(WindowRewrite));
146746146817
146747146818
sRewrite.pSub = *ppSub;
146748146819
sRewrite.pWin = pWin;
146749146820
sRewrite.pSrc = pSrc;
146821
+ sRewrite.pTab = pTab;
146750146822
146751146823
sWalker.pParse = pParse;
146752146824
sWalker.xExprCallback = selectWindowRewriteExprCb;
146753146825
sWalker.xSelectCallback = selectWindowRewriteSelectCb;
146754146826
sWalker.u.pRewrite = &sRewrite;
@@ -146804,15 +146876,22 @@
146804146876
ExprList *pSort = 0;
146805146877
146806146878
ExprList *pSublist = 0; /* Expression list for sub-query */
146807146879
Window *pMWin = p->pWin; /* Master window object */
146808146880
Window *pWin; /* Window object iterator */
146881
+ Table *pTab;
146882
+
146883
+ pTab = sqlite3DbMallocZero(db, sizeof(Table));
146884
+ if( pTab==0 ){
146885
+ return SQLITE_NOMEM;
146886
+ }
146809146887
146810146888
p->pSrc = 0;
146811146889
p->pWhere = 0;
146812146890
p->pGroupBy = 0;
146813146891
p->pHaving = 0;
146892
+ p->selFlags &= ~SF_Aggregate;
146814146893
146815146894
/* Create the ORDER BY clause for the sub-select. This is the concatenation
146816146895
** of the window PARTITION and ORDER BY clauses. Then, if this makes it
146817146896
** redundant, remove the ORDER BY from the parent SELECT. */
146818146897
pSort = sqlite3ExprListDup(db, pMWin->pPartition, 0);
@@ -146828,12 +146907,12 @@
146828146907
** The OpenEphemeral instruction is coded later, after it is known how
146829146908
** many columns the table will have. */
146830146909
pMWin->iEphCsr = pParse->nTab++;
146831146910
pParse->nTab += 3;
146832146911
146833
- selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, &pSublist);
146834
- selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, &pSublist);
146912
+ selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, pTab, &pSublist);
146913
+ selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, pTab, &pSublist);
146835146914
pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0);
146836146915
146837146916
/* Append the PARTITION BY and ORDER BY expressions to the to the
146838146917
** sub-select expression list. They are required to figure out where
146839146918
** boundaries for partitions and sets of peer rows lie. */
@@ -146871,28 +146950,32 @@
146871146950
pSub = sqlite3SelectNew(
146872146951
pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0
146873146952
);
146874146953
p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
146875146954
if( p->pSrc ){
146955
+ Table *pTab2;
146876146956
p->pSrc->a[0].pSelect = pSub;
146877146957
sqlite3SrcListAssignCursors(pParse, p->pSrc);
146878
- if( sqlite3ExpandSubquery(pParse, &p->pSrc->a[0]) ){
146958
+ pSub->selFlags |= SF_Expanded;
146959
+ pTab2 = sqlite3ResultSetOfSelect(pParse, pSub);
146960
+ if( pTab2==0 ){
146879146961
rc = SQLITE_NOMEM;
146880146962
}else{
146881
- pSub->selFlags |= SF_Expanded;
146882
- p->selFlags &= ~SF_Aggregate;
146883
- sqlite3SelectPrep(pParse, pSub, 0);
146963
+ memcpy(pTab, pTab2, sizeof(Table));
146964
+ pTab->tabFlags |= TF_Ephemeral;
146965
+ p->pSrc->a[0].pTab = pTab;
146966
+ pTab = pTab2;
146884146967
}
146885
-
146886146968
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, pSublist->nExpr);
146887146969
sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+1, pMWin->iEphCsr);
146888146970
sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+2, pMWin->iEphCsr);
146889146971
sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+3, pMWin->iEphCsr);
146890146972
}else{
146891146973
sqlite3SelectDelete(db, pSub);
146892146974
}
146893146975
if( db->mallocFailed ) rc = SQLITE_NOMEM;
146976
+ sqlite3DbFree(db, pTab);
146894146977
}
146895146978
146896146979
return rc;
146897146980
}
146898146981
@@ -155959,10 +156042,13 @@
155959156042
{ SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP },
155960156043
{ SQLITE_DBCONFIG_RESET_DATABASE, SQLITE_ResetDatabase },
155961156044
{ SQLITE_DBCONFIG_DEFENSIVE, SQLITE_Defensive },
155962156045
{ SQLITE_DBCONFIG_WRITABLE_SCHEMA, SQLITE_WriteSchema|
155963156046
SQLITE_NoSchemaError },
156047
+ { SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, SQLITE_LegacyAlter },
156048
+ { SQLITE_DBCONFIG_DQS_DDL, SQLITE_DqsDDL },
156049
+ { SQLITE_DBCONFIG_DQS_DML, SQLITE_DqsDML },
155964156050
};
155965156051
unsigned int i;
155966156052
rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
155967156053
for(i=0; i<ArraySize(aFlagOp); i++){
155968156054
if( aFlagOp[i].op==op ){
@@ -155989,62 +156075,55 @@
155989156075
}
155990156076
va_end(ap);
155991156077
return rc;
155992156078
}
155993156079
155994
-
155995
-/*
155996
-** Return true if the buffer z[0..n-1] contains all spaces.
155997
-*/
155998
-static int allSpaces(const char *z, int n){
155999
- while( n>0 && z[n-1]==' ' ){ n--; }
156000
- return n==0;
156001
-}
156002
-
156003156080
/*
156004156081
** This is the default collating function named "BINARY" which is always
156005156082
** available.
156006
-**
156007
-** If the padFlag argument is not NULL then space padding at the end
156008
-** of strings is ignored. This implements the RTRIM collation.
156009156083
*/
156010156084
static int binCollFunc(
156011
- void *padFlag,
156085
+ void *NotUsed,
156012156086
int nKey1, const void *pKey1,
156013156087
int nKey2, const void *pKey2
156014156088
){
156015156089
int rc, n;
156090
+ UNUSED_PARAMETER(NotUsed);
156016156091
n = nKey1<nKey2 ? nKey1 : nKey2;
156017156092
/* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares
156018156093
** strings byte by byte using the memcmp() function from the standard C
156019156094
** library. */
156020156095
assert( pKey1 && pKey2 );
156021156096
rc = memcmp(pKey1, pKey2, n);
156022156097
if( rc==0 ){
156023
- if( padFlag
156024
- && allSpaces(((char*)pKey1)+n, nKey1-n)
156025
- && allSpaces(((char*)pKey2)+n, nKey2-n)
156026
- ){
156027
- /* EVIDENCE-OF: R-31624-24737 RTRIM is like BINARY except that extra
156028
- ** spaces at the end of either string do not change the result. In other
156029
- ** words, strings will compare equal to one another as long as they
156030
- ** differ only in the number of spaces at the end.
156031
- */
156032
- }else{
156033
- rc = nKey1 - nKey2;
156034
- }
156098
+ rc = nKey1 - nKey2;
156035156099
}
156036156100
return rc;
156037156101
}
156102
+
156103
+/*
156104
+** This is the collating function named "RTRIM" which is always
156105
+** available. Ignore trailing spaces.
156106
+*/
156107
+static int rtrimCollFunc(
156108
+ void *pUser,
156109
+ int nKey1, const void *pKey1,
156110
+ int nKey2, const void *pKey2
156111
+){
156112
+ const u8 *pK1 = (const u8*)pKey1;
156113
+ const u8 *pK2 = (const u8*)pKey2;
156114
+ while( nKey1 && pK1[nKey1-1]==' ' ) nKey1--;
156115
+ while( nKey2 && pK2[nKey2-1]==' ' ) nKey2--;
156116
+ return binCollFunc(pUser, nKey1, pKey1, nKey2, pKey2);
156117
+}
156038156118
156039156119
/*
156040156120
** Return true if CollSeq is the default built-in BINARY.
156041156121
*/
156042156122
SQLITE_PRIVATE int sqlite3IsBinary(const CollSeq *p){
156043
- assert( p==0 || p->xCmp!=binCollFunc || p->pUser!=0
156044
- || strcmp(p->zName,"BINARY")==0 );
156045
- return p==0 || (p->xCmp==binCollFunc && p->pUser==0);
156123
+ assert( p==0 || p->xCmp!=binCollFunc || strcmp(p->zName,"BINARY")==0 );
156124
+ return p==0 || p->xCmp==binCollFunc;
156046156125
}
156047156126
156048156127
/*
156049156128
** Another built-in collating sequence: NOCASE.
156050156129
**
@@ -158191,11 +158270,39 @@
158191158270
db->autoCommit = 1;
158192158271
db->nextAutovac = -1;
158193158272
db->szMmap = sqlite3GlobalConfig.szMmap;
158194158273
db->nextPagesize = 0;
158195158274
db->nMaxSorterMmap = 0x7FFFFFFF;
158196
- db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_CacheSpill
158275
+ db->flags |= SQLITE_ShortColNames
158276
+ | SQLITE_EnableTrigger
158277
+ | SQLITE_CacheSpill
158278
+
158279
+/* The SQLITE_DQS compile-time option determines the default settings
158280
+** for SQLITE_DBCONFIG_DQS_DDL and SQLITE_DBCONFIG_DQS_DML.
158281
+**
158282
+** SQLITE_DQS SQLITE_DBCONFIG_DQS_DDL SQLITE_DBCONFIG_DQS_DML
158283
+** ---------- ----------------------- -----------------------
158284
+** undefined on on
158285
+** 3 on on
158286
+** 2 on off
158287
+** 1 off on
158288
+** 0 off off
158289
+**
158290
+** Legacy behavior is 3 (double-quoted string literals are allowed anywhere)
158291
+** and so that is the default. But developers are encouranged to use
158292
+** -DSQLITE_DQS=0 (best) or -DSQLITE_DQS=1 (second choice) if possible.
158293
+*/
158294
+#if !defined(SQLITE_DQS)
158295
+# define SQLITE_DQS 3
158296
+#endif
158297
+#if (SQLITE_DQS&1)==1
158298
+ | SQLITE_DqsDML
158299
+#endif
158300
+#if (SQLITE_DQS&2)==2
158301
+ | SQLITE_DqsDDL
158302
+#endif
158303
+
158197158304
#if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
158198158305
| SQLITE_AutoIndex
158199158306
#endif
158200158307
#if SQLITE_DEFAULT_CKPTFULLFSYNC
158201158308
| SQLITE_CkptFullFSync
@@ -158242,11 +158349,11 @@
158242158349
*/
158243158350
createCollation(db, sqlite3StrBINARY, SQLITE_UTF8, 0, binCollFunc, 0);
158244158351
createCollation(db, sqlite3StrBINARY, SQLITE_UTF16BE, 0, binCollFunc, 0);
158245158352
createCollation(db, sqlite3StrBINARY, SQLITE_UTF16LE, 0, binCollFunc, 0);
158246158353
createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
158247
- createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
158354
+ createCollation(db, "RTRIM", SQLITE_UTF8, 0, rtrimCollFunc, 0);
158248158355
if( db->mallocFailed ){
158249158356
goto opendb_out;
158250158357
}
158251158358
/* EVIDENCE-OF: R-08308-17224 The default collating function for all
158252158359
** strings is BINARY.
@@ -175175,14 +175282,17 @@
175175175282
pWriter->aNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst;
175176175283
}
175177175284
175178175285
pNode = &pWriter->aNodeWriter[nHeight];
175179175286
pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight;
175180
- blobGrowBuffer(&pNode->block, MAX(nRoot, p->nNodeSize), &rc);
175287
+ blobGrowBuffer(&pNode->block,
175288
+ MAX(nRoot, p->nNodeSize)+FTS3_NODE_PADDING, &rc
175289
+ );
175181175290
if( rc==SQLITE_OK ){
175182175291
memcpy(pNode->block.a, aRoot, nRoot);
175183175292
pNode->block.n = nRoot;
175293
+ memset(&pNode->block.a[nRoot], 0, FTS3_NODE_PADDING);
175184175294
}
175185175295
175186175296
for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){
175187175297
NodeReader reader;
175188175298
pNode = &pWriter->aNodeWriter[i];
@@ -175198,14 +175308,17 @@
175198175308
char *aBlock = 0;
175199175309
int nBlock = 0;
175200175310
pNode = &pWriter->aNodeWriter[i-1];
175201175311
pNode->iBlock = reader.iChild;
175202175312
rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock, 0);
175203
- blobGrowBuffer(&pNode->block, MAX(nBlock, p->nNodeSize), &rc);
175313
+ blobGrowBuffer(&pNode->block,
175314
+ MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc
175315
+ );
175204175316
if( rc==SQLITE_OK ){
175205175317
memcpy(pNode->block.a, aBlock, nBlock);
175206175318
pNode->block.n = nBlock;
175319
+ memset(&pNode->block.a[nBlock], 0, FTS3_NODE_PADDING);
175207175320
}
175208175321
sqlite3_free(aBlock);
175209175322
}
175210175323
}
175211175324
}
@@ -180252,11 +180365,11 @@
180252180365
}
180253180366
if( pApnd ){
180254180367
u32 iStart, iLabel;
180255180368
JsonNode *pNode;
180256180369
iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0);
180257
- iLabel = jsonParseAddNode(pParse, JSON_STRING, i, zPath);
180370
+ iLabel = jsonParseAddNode(pParse, JSON_STRING, nKey, zKey);
180258180371
zPath += i;
180259180372
pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
180260180373
if( pParse->oom ) return 0;
180261180374
if( pNode ){
180262180375
pRoot = &pParse->aNode[iRoot];
@@ -218891,11 +219004,11 @@
218891219004
int nArg, /* Number of args */
218892219005
sqlite3_value **apUnused /* Function arguments */
218893219006
){
218894219007
assert( nArg==0 );
218895219008
UNUSED_PARAM2(nArg, apUnused);
218896
- sqlite3_result_text(pCtx, "fts5: 2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6c2be4", -1, SQLITE_TRANSIENT);
219009
+ sqlite3_result_text(pCtx, "fts5: 2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9acaf6", -1, SQLITE_TRANSIENT);
218897219010
}
218898219011
218899219012
/*
218900219013
** Return true if zName is the extension on one of the shadow tables used
218901219014
** by this module.
@@ -223657,12 +223770,12 @@
223657223770
}
223658223771
#endif /* SQLITE_CORE */
223659223772
#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
223660223773
223661223774
/************** End of stmt.c ************************************************/
223662
-#if __LINE__!=223662
223775
+#if __LINE__!=223775
223663223776
#undef SQLITE_SOURCE_ID
223664
-#define SQLITE_SOURCE_ID "2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6calt2"
223777
+#define SQLITE_SOURCE_ID "2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9aalt2"
223665223778
#endif
223666223779
/* Return the source-id for this library */
223667223780
SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
223668223781
/************************** End of sqlite3.c ******************************/
223669223782
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -37,11 +37,11 @@
37 **
38 ** This file implements routines used to report what compile-time options
39 ** SQLite was built with.
40 */
41
42 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
43
44 /*
45 ** Include the configuration header output by 'configure' if we're using the
46 ** autoconf-based build
47 */
@@ -1167,11 +1167,11 @@
1167 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
1168 ** [sqlite_version()] and [sqlite_source_id()].
1169 */
1170 #define SQLITE_VERSION "3.29.0"
1171 #define SQLITE_VERSION_NUMBER 3029000
1172 #define SQLITE_SOURCE_ID "2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6c2be4"
1173
1174 /*
1175 ** CAPI3REF: Run-Time Library Version Numbers
1176 ** KEYWORDS: sqlite3_version sqlite3_sourceid
1177 **
@@ -3262,10 +3262,38 @@
3262 ** the writable_schema, positive to enable writable_schema, or negative to
3263 ** leave the setting unchanged. The second parameter is a pointer to an
3264 ** integer into which is written 0 or 1 to indicate whether the writable_schema
3265 ** is enabled or disabled following this call.
3266 ** </dd>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3267 ** </dl>
3268 */
3269 #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
3270 #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
3271 #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
@@ -3276,11 +3304,14 @@
3276 #define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
3277 #define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
3278 #define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
3279 #define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
3280 #define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
3281 #define SQLITE_DBCONFIG_MAX 1011 /* Largest DBCONFIG */
 
 
 
3282
3283 /*
3284 ** CAPI3REF: Enable Or Disable Extended Result Codes
3285 ** METHOD: sqlite3
3286 **
@@ -16482,10 +16513,12 @@
16482 #define SQLITE_TriggerEQP 0x01000000 /* Show trigger EXPLAIN QUERY PLAN */
16483 #define SQLITE_ResetDatabase 0x02000000 /* Reset the database */
16484 #define SQLITE_LegacyAlter 0x04000000 /* Legacy ALTER TABLE behaviour */
16485 #define SQLITE_NoSchemaError 0x08000000 /* Do not report schema parse errors*/
16486 #define SQLITE_Defensive 0x10000000 /* Input SQL is likely hostile */
 
 
16487
16488 /* Flags used only if debugging */
16489 #define HI(X) ((u64)(X)<<32)
16490 #ifdef SQLITE_DEBUG
16491 #define SQLITE_SqlTrace HI(0x0001) /* Debug print SQL as it executes */
@@ -17728,12 +17761,11 @@
17728 #define NC_UUpsert 0x0200 /* True if uNC.pUpsert is used */
17729 #define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */
17730 #define NC_Complex 0x2000 /* True if a function or subquery seen */
17731 #define NC_AllowWin 0x4000 /* Window functions are allowed here */
17732 #define NC_HasWin 0x8000 /* One or more window functions seen */
17733 #define NC_NoDblQStr 0x10000 /* Do not allow double-quoted string hack.
17734 ** Mnemonic: "NO DouBLe-Quoted STRings" */
17735
17736 /*
17737 ** An instance of the following object describes a single ON CONFLICT
17738 ** clause in an upsert.
17739 **
@@ -19781,12 +19813,19 @@
19781
19782 /* EVIDENCE-OF: R-38720-18127 The default setting is determined by the
19783 ** SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if
19784 ** that compile-time option is omitted.
19785 */
19786 #ifndef SQLITE_ALLOW_COVERING_INDEX_SCAN
19787 # define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
 
 
 
 
 
 
 
19788 #endif
19789
19790 /* The minimum PMA size is set to this value multiplied by the database
19791 ** page size in bytes.
19792 */
@@ -49444,20 +49483,20 @@
49444 pGroup = (PGroup*)&pCache[1];
49445 pGroup->mxPinned = 10;
49446 }else{
49447 pGroup = &pcache1.grp;
49448 }
 
49449 if( pGroup->lru.isAnchor==0 ){
49450 pGroup->lru.isAnchor = 1;
49451 pGroup->lru.pLruPrev = pGroup->lru.pLruNext = &pGroup->lru;
49452 }
49453 pCache->pGroup = pGroup;
49454 pCache->szPage = szPage;
49455 pCache->szExtra = szExtra;
49456 pCache->szAlloc = szPage + szExtra + ROUND8(sizeof(PgHdr1));
49457 pCache->bPurgeable = (bPurgeable ? 1 : 0);
49458 pcache1EnterMutex(pGroup);
49459 pcache1ResizeHash(pCache);
49460 if( bPurgeable ){
49461 pCache->nMin = 10;
49462 pGroup->nMinPage += pCache->nMin;
49463 pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
@@ -87511,17 +87550,18 @@
87511 pCx = p->apCsr[pOp->p1];
87512 if( pCx ){
87513 /* If the ephermeral table is already open, erase all existing content
87514 ** so that the table is empty again, rather than creating a new table. */
87515 assert( pCx->isEphemeral );
 
 
87516 if( pCx->pBtx ){
87517 rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0);
87518 }
87519 }else{
87520 pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, CURTYPE_BTREE);
87521 if( pCx==0 ) goto no_mem;
87522 pCx->nullRow = 1;
87523 pCx->isEphemeral = 1;
87524 rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBtx,
87525 BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5,
87526 vfsFlags);
87527 if( rc==SQLITE_OK ){
@@ -87553,10 +87593,11 @@
87553 }
87554 }
87555 pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
87556 }
87557 if( rc ) goto abort_due_to_error;
 
87558 break;
87559 }
87560
87561 /* Opcode: SorterOpen P1 P2 P3 P4 *
87562 **
@@ -95521,10 +95562,27 @@
95521 if( zCol && sqlite3StrICmp(zSpan, zCol)!=0 ){
95522 return 0;
95523 }
95524 return 1;
95525 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95526
95527 /*
95528 ** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
95529 ** that name in the set of source tables in pSrcList and make the pExpr
95530 ** expression node refer back to that source column. The following changes
@@ -95850,12 +95908,12 @@
95850 ** Because no reference was made to outer contexts, the pNC->nRef
95851 ** fields are not changed in any context.
95852 */
95853 if( cnt==0 && zTab==0 ){
95854 assert( pExpr->op==TK_ID );
95855 if( ExprHasProperty(pExpr,EP_DblQuoted)
95856 && 0==(pTopNC->ncFlags&NC_NoDblQStr)
95857 ){
95858 /* If a double-quoted identifier does not match any known column name,
95859 ** then treat it as a string.
95860 **
95861 ** This hack was added in the early days of SQLite in a misguided attempt
@@ -97144,14 +97202,11 @@
97144 sSrc.a[0].pTab = pTab;
97145 sSrc.a[0].iCursor = -1;
97146 }
97147 sNC.pParse = pParse;
97148 sNC.pSrcList = &sSrc;
97149 sNC.ncFlags = type;
97150 if( !pParse->db->init.busy && !sqlite3WritableSchema(pParse->db) ){
97151 sNC.ncFlags |= NC_NoDblQStr;
97152 }
97153 if( (rc = sqlite3ResolveExprNames(&sNC, pExpr))!=SQLITE_OK ) return rc;
97154 if( pList ) rc = sqlite3ResolveExprListNames(&sNC, pList);
97155 return rc;
97156 }
97157
@@ -100544,11 +100599,12 @@
100544 /*
100545 ** Convert a scalar expression node to a TK_REGISTER referencing
100546 ** register iReg. The caller must ensure that iReg already contains
100547 ** the correct value for the expression.
100548 */
100549 static void exprToRegister(Expr *p, int iReg){
 
100550 p->op2 = p->op;
100551 p->op = TK_REGISTER;
100552 p->iTable = iReg;
100553 ExprClearProperty(p, EP_Skip);
100554 }
@@ -103438,15 +103494,24 @@
103438
103439 /*
103440 ** Walker callback used by sqlite3RenameExprUnmap().
103441 */
103442 static int renameUnmapSelectCb(Walker *pWalker, Select *p){
 
 
 
 
 
 
 
 
 
 
103443 if( ALWAYS(p->pSrc) ){ /* Every Select as a SrcList, even if it is empty */
103444 Parse *pParse = pWalker->pParse;
103445 int i;
103446 for(i=0; i<p->pSrc->nSrc; i++){
103447 sqlite3RenameTokenRemap(pParse, 0, (void*)p->pSrc->a[0].zName);
103448 }
103449 }
103450 return WRC_Continue;
103451 }
103452
@@ -107836,14 +107901,18 @@
107836 static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
107837 Index *pIndex, *pNext;
107838
107839 #ifdef SQLITE_DEBUG
107840 /* Record the number of outstanding lookaside allocations in schema Tables
107841 ** prior to doing any free() operations. Since schema Tables do not use
107842 ** lookaside, this number should not change. */
 
 
 
 
107843 int nLookaside = 0;
107844 if( db && (pTable->tabFlags & TF_Ephemeral)==0 ){
107845 nLookaside = sqlite3LookasideUsed(db, 0);
107846 }
107847 #endif
107848
107849 /* Delete all indices associated with this table. */
@@ -127167,13 +127236,10 @@
127167 while( pSelect->pPrior ) pSelect = pSelect->pPrior;
127168 pTab = sqlite3DbMallocZero(db, sizeof(Table) );
127169 if( pTab==0 ){
127170 return 0;
127171 }
127172 /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
127173 ** is disabled */
127174 assert( db->lookaside.bDisable );
127175 pTab->nTabRef = 1;
127176 pTab->zName = 0;
127177 pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
127178 sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
127179 sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect);
@@ -139175,32 +139241,35 @@
139175 zNew[iTo++] = zNew[iFrom];
139176 }
139177 zNew[iTo] = 0;
139178 assert( iTo>0 );
139179
139180 /* If the RHS begins with a digit, a +/- sign or whitespace, then the
139181 ** LHS must be an ordinary column (not a virtual table column) with
139182 ** TEXT affinity. Otherwise the LHS might be numeric and "lhs >= rhs"
139183 ** would be false even though "lhs LIKE rhs" is true. But if the RHS
139184 ** does not start with a digit or +/-, then "lhs LIKE rhs" will always
139185 ** be false if the LHS is numeric and so the optimization still works.
139186 **
139187 ** 2018-09-10 ticket c94369cae9b561b1f996d0054bfab11389f9d033
139188 ** The RHS pattern must not be '/%' because the termination condition
139189 ** will then become "x<'0'" and if the affinity is numeric, will then
139190 ** be converted into "x<0", which is incorrect.
 
 
139191 */
139192 if( sqlite3Isdigit(zNew[0])
139193 || sqlite3Isspace(zNew[0])
139194 || zNew[0]=='-'
139195 || zNew[0]=='+'
139196 || zNew[iTo-1]=='0'-1
139197 ){
139198 if( pLeft->op!=TK_COLUMN
139199 || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT
139200 || IsVirtual(pLeft->y.pTab) /* Value might be numeric */
139201 ){
 
 
 
139202 sqlite3ExprDelete(db, pPrefix);
139203 sqlite3ValueFree(pVal);
139204 return 0;
139205 }
139206 }
@@ -141083,21 +141152,21 @@
141083 **
141084 ** This routine runs over generated VDBE code and translates OP_Column
141085 ** opcodes into OP_Copy when the table is being accessed via co-routine
141086 ** instead of via table lookup.
141087 **
141088 ** If the bIncrRowid parameter is 0, then any OP_Rowid instructions on
141089 ** cursor iTabCur are transformed into OP_Null. Or, if bIncrRowid is non-zero,
141090 ** then each OP_Rowid is transformed into an instruction to increment the
141091 ** value stored in its output register.
141092 */
141093 static void translateColumnToCopy(
141094 Parse *pParse, /* Parsing context */
141095 int iStart, /* Translate from this opcode to the end */
141096 int iTabCur, /* OP_Column/OP_Rowid references to this table */
141097 int iRegister, /* The first column is in this register */
141098 int bIncrRowid /* If non-zero, transform OP_rowid to OP_AddImm(1) */
141099 ){
141100 Vdbe *v = pParse->pVdbe;
141101 VdbeOp *pOp = sqlite3VdbeGetOp(v, iStart);
141102 int iEnd = sqlite3VdbeCurrentAddr(v);
141103 if( pParse->db->mallocFailed ) return;
@@ -141107,15 +141176,13 @@
141107 pOp->opcode = OP_Copy;
141108 pOp->p1 = pOp->p2 + iRegister;
141109 pOp->p2 = pOp->p3;
141110 pOp->p3 = 0;
141111 }else if( pOp->opcode==OP_Rowid ){
141112 if( bIncrRowid ){
141113 /* Increment the value stored in the P2 operand of the OP_Rowid. */
141114 pOp->opcode = OP_AddImm;
141115 pOp->p1 = pOp->p2;
141116 pOp->p2 = 1;
141117 }else{
141118 pOp->opcode = OP_Null;
141119 pOp->p1 = 0;
141120 pOp->p3 = 0;
141121 }
@@ -141385,12 +141452,13 @@
141385 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
141386 if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
141387 if( pTabItem->fg.viaCoroutine ){
141388 sqlite3VdbeChangeP2(v, addrCounter, regBase+n);
141389 testcase( pParse->db->mallocFailed );
 
141390 translateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
141391 pTabItem->regResult, 1);
141392 sqlite3VdbeGoto(v, addrTop);
141393 pTabItem->fg.viaCoroutine = 0;
141394 }else{
141395 sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
141396 }
@@ -146631,10 +146699,11 @@
146631 typedef struct WindowRewrite WindowRewrite;
146632 struct WindowRewrite {
146633 Window *pWin;
146634 SrcList *pSrc;
146635 ExprList *pSub;
 
146636 Select *pSubSelect; /* Current sub-select, if any */
146637 };
146638
146639 /*
146640 ** Callback function used by selectWindowRewriteEList(). If necessary,
@@ -146691,10 +146760,11 @@
146691 memset(pExpr, 0, sizeof(Expr));
146692
146693 pExpr->op = TK_COLUMN;
146694 pExpr->iColumn = p->pSub->nExpr-1;
146695 pExpr->iTable = p->pWin->iEphCsr;
 
146696 }
146697
146698 break;
146699 }
146700
@@ -146734,10 +146804,11 @@
146734 static void selectWindowRewriteEList(
146735 Parse *pParse,
146736 Window *pWin,
146737 SrcList *pSrc,
146738 ExprList *pEList, /* Rewrite expressions in this list */
 
146739 ExprList **ppSub /* IN/OUT: Sub-select expression-list */
146740 ){
146741 Walker sWalker;
146742 WindowRewrite sRewrite;
146743
@@ -146745,10 +146816,11 @@
146745 memset(&sRewrite, 0, sizeof(WindowRewrite));
146746
146747 sRewrite.pSub = *ppSub;
146748 sRewrite.pWin = pWin;
146749 sRewrite.pSrc = pSrc;
 
146750
146751 sWalker.pParse = pParse;
146752 sWalker.xExprCallback = selectWindowRewriteExprCb;
146753 sWalker.xSelectCallback = selectWindowRewriteSelectCb;
146754 sWalker.u.pRewrite = &sRewrite;
@@ -146804,15 +146876,22 @@
146804 ExprList *pSort = 0;
146805
146806 ExprList *pSublist = 0; /* Expression list for sub-query */
146807 Window *pMWin = p->pWin; /* Master window object */
146808 Window *pWin; /* Window object iterator */
 
 
 
 
 
 
146809
146810 p->pSrc = 0;
146811 p->pWhere = 0;
146812 p->pGroupBy = 0;
146813 p->pHaving = 0;
 
146814
146815 /* Create the ORDER BY clause for the sub-select. This is the concatenation
146816 ** of the window PARTITION and ORDER BY clauses. Then, if this makes it
146817 ** redundant, remove the ORDER BY from the parent SELECT. */
146818 pSort = sqlite3ExprListDup(db, pMWin->pPartition, 0);
@@ -146828,12 +146907,12 @@
146828 ** The OpenEphemeral instruction is coded later, after it is known how
146829 ** many columns the table will have. */
146830 pMWin->iEphCsr = pParse->nTab++;
146831 pParse->nTab += 3;
146832
146833 selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, &pSublist);
146834 selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, &pSublist);
146835 pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0);
146836
146837 /* Append the PARTITION BY and ORDER BY expressions to the to the
146838 ** sub-select expression list. They are required to figure out where
146839 ** boundaries for partitions and sets of peer rows lie. */
@@ -146871,28 +146950,32 @@
146871 pSub = sqlite3SelectNew(
146872 pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0
146873 );
146874 p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
146875 if( p->pSrc ){
 
146876 p->pSrc->a[0].pSelect = pSub;
146877 sqlite3SrcListAssignCursors(pParse, p->pSrc);
146878 if( sqlite3ExpandSubquery(pParse, &p->pSrc->a[0]) ){
 
 
146879 rc = SQLITE_NOMEM;
146880 }else{
146881 pSub->selFlags |= SF_Expanded;
146882 p->selFlags &= ~SF_Aggregate;
146883 sqlite3SelectPrep(pParse, pSub, 0);
 
146884 }
146885
146886 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, pSublist->nExpr);
146887 sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+1, pMWin->iEphCsr);
146888 sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+2, pMWin->iEphCsr);
146889 sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+3, pMWin->iEphCsr);
146890 }else{
146891 sqlite3SelectDelete(db, pSub);
146892 }
146893 if( db->mallocFailed ) rc = SQLITE_NOMEM;
 
146894 }
146895
146896 return rc;
146897 }
146898
@@ -155959,10 +156042,13 @@
155959 { SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP },
155960 { SQLITE_DBCONFIG_RESET_DATABASE, SQLITE_ResetDatabase },
155961 { SQLITE_DBCONFIG_DEFENSIVE, SQLITE_Defensive },
155962 { SQLITE_DBCONFIG_WRITABLE_SCHEMA, SQLITE_WriteSchema|
155963 SQLITE_NoSchemaError },
 
 
 
155964 };
155965 unsigned int i;
155966 rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
155967 for(i=0; i<ArraySize(aFlagOp); i++){
155968 if( aFlagOp[i].op==op ){
@@ -155989,62 +156075,55 @@
155989 }
155990 va_end(ap);
155991 return rc;
155992 }
155993
155994
155995 /*
155996 ** Return true if the buffer z[0..n-1] contains all spaces.
155997 */
155998 static int allSpaces(const char *z, int n){
155999 while( n>0 && z[n-1]==' ' ){ n--; }
156000 return n==0;
156001 }
156002
156003 /*
156004 ** This is the default collating function named "BINARY" which is always
156005 ** available.
156006 **
156007 ** If the padFlag argument is not NULL then space padding at the end
156008 ** of strings is ignored. This implements the RTRIM collation.
156009 */
156010 static int binCollFunc(
156011 void *padFlag,
156012 int nKey1, const void *pKey1,
156013 int nKey2, const void *pKey2
156014 ){
156015 int rc, n;
 
156016 n = nKey1<nKey2 ? nKey1 : nKey2;
156017 /* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares
156018 ** strings byte by byte using the memcmp() function from the standard C
156019 ** library. */
156020 assert( pKey1 && pKey2 );
156021 rc = memcmp(pKey1, pKey2, n);
156022 if( rc==0 ){
156023 if( padFlag
156024 && allSpaces(((char*)pKey1)+n, nKey1-n)
156025 && allSpaces(((char*)pKey2)+n, nKey2-n)
156026 ){
156027 /* EVIDENCE-OF: R-31624-24737 RTRIM is like BINARY except that extra
156028 ** spaces at the end of either string do not change the result. In other
156029 ** words, strings will compare equal to one another as long as they
156030 ** differ only in the number of spaces at the end.
156031 */
156032 }else{
156033 rc = nKey1 - nKey2;
156034 }
156035 }
156036 return rc;
156037 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156038
156039 /*
156040 ** Return true if CollSeq is the default built-in BINARY.
156041 */
156042 SQLITE_PRIVATE int sqlite3IsBinary(const CollSeq *p){
156043 assert( p==0 || p->xCmp!=binCollFunc || p->pUser!=0
156044 || strcmp(p->zName,"BINARY")==0 );
156045 return p==0 || (p->xCmp==binCollFunc && p->pUser==0);
156046 }
156047
156048 /*
156049 ** Another built-in collating sequence: NOCASE.
156050 **
@@ -158191,11 +158270,39 @@
158191 db->autoCommit = 1;
158192 db->nextAutovac = -1;
158193 db->szMmap = sqlite3GlobalConfig.szMmap;
158194 db->nextPagesize = 0;
158195 db->nMaxSorterMmap = 0x7FFFFFFF;
158196 db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_CacheSpill
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158197 #if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
158198 | SQLITE_AutoIndex
158199 #endif
158200 #if SQLITE_DEFAULT_CKPTFULLFSYNC
158201 | SQLITE_CkptFullFSync
@@ -158242,11 +158349,11 @@
158242 */
158243 createCollation(db, sqlite3StrBINARY, SQLITE_UTF8, 0, binCollFunc, 0);
158244 createCollation(db, sqlite3StrBINARY, SQLITE_UTF16BE, 0, binCollFunc, 0);
158245 createCollation(db, sqlite3StrBINARY, SQLITE_UTF16LE, 0, binCollFunc, 0);
158246 createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
158247 createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
158248 if( db->mallocFailed ){
158249 goto opendb_out;
158250 }
158251 /* EVIDENCE-OF: R-08308-17224 The default collating function for all
158252 ** strings is BINARY.
@@ -175175,14 +175282,17 @@
175175 pWriter->aNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst;
175176 }
175177
175178 pNode = &pWriter->aNodeWriter[nHeight];
175179 pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight;
175180 blobGrowBuffer(&pNode->block, MAX(nRoot, p->nNodeSize), &rc);
 
 
175181 if( rc==SQLITE_OK ){
175182 memcpy(pNode->block.a, aRoot, nRoot);
175183 pNode->block.n = nRoot;
 
175184 }
175185
175186 for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){
175187 NodeReader reader;
175188 pNode = &pWriter->aNodeWriter[i];
@@ -175198,14 +175308,17 @@
175198 char *aBlock = 0;
175199 int nBlock = 0;
175200 pNode = &pWriter->aNodeWriter[i-1];
175201 pNode->iBlock = reader.iChild;
175202 rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock, 0);
175203 blobGrowBuffer(&pNode->block, MAX(nBlock, p->nNodeSize), &rc);
 
 
175204 if( rc==SQLITE_OK ){
175205 memcpy(pNode->block.a, aBlock, nBlock);
175206 pNode->block.n = nBlock;
 
175207 }
175208 sqlite3_free(aBlock);
175209 }
175210 }
175211 }
@@ -180252,11 +180365,11 @@
180252 }
180253 if( pApnd ){
180254 u32 iStart, iLabel;
180255 JsonNode *pNode;
180256 iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0);
180257 iLabel = jsonParseAddNode(pParse, JSON_STRING, i, zPath);
180258 zPath += i;
180259 pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
180260 if( pParse->oom ) return 0;
180261 if( pNode ){
180262 pRoot = &pParse->aNode[iRoot];
@@ -218891,11 +219004,11 @@
218891 int nArg, /* Number of args */
218892 sqlite3_value **apUnused /* Function arguments */
218893 ){
218894 assert( nArg==0 );
218895 UNUSED_PARAM2(nArg, apUnused);
218896 sqlite3_result_text(pCtx, "fts5: 2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6c2be4", -1, SQLITE_TRANSIENT);
218897 }
218898
218899 /*
218900 ** Return true if zName is the extension on one of the shadow tables used
218901 ** by this module.
@@ -223657,12 +223770,12 @@
223657 }
223658 #endif /* SQLITE_CORE */
223659 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
223660
223661 /************** End of stmt.c ************************************************/
223662 #if __LINE__!=223662
223663 #undef SQLITE_SOURCE_ID
223664 #define SQLITE_SOURCE_ID "2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6calt2"
223665 #endif
223666 /* Return the source-id for this library */
223667 SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
223668 /************************** End of sqlite3.c ******************************/
223669
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -37,11 +37,11 @@
37 **
38 ** This file implements routines used to report what compile-time options
39 ** SQLite was built with.
40 */
41
42 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS /* IMP: R-16824-07538 */
43
44 /*
45 ** Include the configuration header output by 'configure' if we're using the
46 ** autoconf-based build
47 */
@@ -1167,11 +1167,11 @@
1167 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
1168 ** [sqlite_version()] and [sqlite_source_id()].
1169 */
1170 #define SQLITE_VERSION "3.29.0"
1171 #define SQLITE_VERSION_NUMBER 3029000
1172 #define SQLITE_SOURCE_ID "2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9acaf6"
1173
1174 /*
1175 ** CAPI3REF: Run-Time Library Version Numbers
1176 ** KEYWORDS: sqlite3_version sqlite3_sourceid
1177 **
@@ -3262,10 +3262,38 @@
3262 ** the writable_schema, positive to enable writable_schema, or negative to
3263 ** leave the setting unchanged. The second parameter is a pointer to an
3264 ** integer into which is written 0 or 1 to indicate whether the writable_schema
3265 ** is enabled or disabled following this call.
3266 ** </dd>
3267 **
3268 ** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
3269 ** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
3270 ** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
3271 ** the legacy behavior of the [ALTER TABLE RENAME] command such it
3272 ** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
3273 ** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
3274 ** additional information. This feature can also be turned on and off
3275 ** using the [PRAGMA legacy_alter_table] statement.
3276 ** </dd>
3277 **
3278 ** [[SQLITE_DBCONFIG_DQS_DML]]
3279 ** <dt>SQLITE_DBCONFIG_DQS_DML</td>
3280 ** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
3281 ** the legacy [double-quoted string literal] misfeature for DML statement
3282 ** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
3283 ** default value of this setting is determined by the [-DSQLITE_DQS]
3284 ** compile-time option.
3285 ** </dd>
3286 **
3287 ** [[SQLITE_DBCONFIG_DQS_DDL]]
3288 ** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
3289 ** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
3290 ** the legacy [double-quoted string literal] misfeature for DDL statements,
3291 ** such as CREATE TABLE and CREATE INDEX. The
3292 ** default value of this setting is determined by the [-DSQLITE_DQS]
3293 ** compile-time option.
3294 ** </dd>
3295 ** </dl>
3296 */
3297 #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
3298 #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
3299 #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
@@ -3276,11 +3304,14 @@
3304 #define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
3305 #define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
3306 #define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
3307 #define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
3308 #define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
3309 #define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
3310 #define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
3311 #define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
3312 #define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
3313
3314 /*
3315 ** CAPI3REF: Enable Or Disable Extended Result Codes
3316 ** METHOD: sqlite3
3317 **
@@ -16482,10 +16513,12 @@
16513 #define SQLITE_TriggerEQP 0x01000000 /* Show trigger EXPLAIN QUERY PLAN */
16514 #define SQLITE_ResetDatabase 0x02000000 /* Reset the database */
16515 #define SQLITE_LegacyAlter 0x04000000 /* Legacy ALTER TABLE behaviour */
16516 #define SQLITE_NoSchemaError 0x08000000 /* Do not report schema parse errors*/
16517 #define SQLITE_Defensive 0x10000000 /* Input SQL is likely hostile */
16518 #define SQLITE_DqsDDL 0x20000000 /* dbl-quoted strings allowed in DDL*/
16519 #define SQLITE_DqsDML 0x40000000 /* dbl-quoted strings allowed in DML*/
16520
16521 /* Flags used only if debugging */
16522 #define HI(X) ((u64)(X)<<32)
16523 #ifdef SQLITE_DEBUG
16524 #define SQLITE_SqlTrace HI(0x0001) /* Debug print SQL as it executes */
@@ -17728,12 +17761,11 @@
17761 #define NC_UUpsert 0x0200 /* True if uNC.pUpsert is used */
17762 #define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */
17763 #define NC_Complex 0x2000 /* True if a function or subquery seen */
17764 #define NC_AllowWin 0x4000 /* Window functions are allowed here */
17765 #define NC_HasWin 0x8000 /* One or more window functions seen */
17766 #define NC_IsDDL 0x10000 /* Resolving names in a CREATE statement */
 
17767
17768 /*
17769 ** An instance of the following object describes a single ON CONFLICT
17770 ** clause in an upsert.
17771 **
@@ -19781,12 +19813,19 @@
19813
19814 /* EVIDENCE-OF: R-38720-18127 The default setting is determined by the
19815 ** SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if
19816 ** that compile-time option is omitted.
19817 */
19818 #if !defined(SQLITE_ALLOW_COVERING_INDEX_SCAN)
19819 # define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
19820 #else
19821 # if !SQLITE_ALLOW_COVERING_INDEX_SCAN
19822 # error "Compile-time disabling of covering index scan using the\
19823 -DSQLITE_ALLOW_COVERING_INDEX_SCAN=0 option is deprecated.\
19824 Contact SQLite developers if this is a problem for you, and\
19825 delete this #error macro to continue with your build."
19826 # endif
19827 #endif
19828
19829 /* The minimum PMA size is set to this value multiplied by the database
19830 ** page size in bytes.
19831 */
@@ -49444,20 +49483,20 @@
49483 pGroup = (PGroup*)&pCache[1];
49484 pGroup->mxPinned = 10;
49485 }else{
49486 pGroup = &pcache1.grp;
49487 }
49488 pcache1EnterMutex(pGroup);
49489 if( pGroup->lru.isAnchor==0 ){
49490 pGroup->lru.isAnchor = 1;
49491 pGroup->lru.pLruPrev = pGroup->lru.pLruNext = &pGroup->lru;
49492 }
49493 pCache->pGroup = pGroup;
49494 pCache->szPage = szPage;
49495 pCache->szExtra = szExtra;
49496 pCache->szAlloc = szPage + szExtra + ROUND8(sizeof(PgHdr1));
49497 pCache->bPurgeable = (bPurgeable ? 1 : 0);
 
49498 pcache1ResizeHash(pCache);
49499 if( bPurgeable ){
49500 pCache->nMin = 10;
49501 pGroup->nMinPage += pCache->nMin;
49502 pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
@@ -87511,17 +87550,18 @@
87550 pCx = p->apCsr[pOp->p1];
87551 if( pCx ){
87552 /* If the ephermeral table is already open, erase all existing content
87553 ** so that the table is empty again, rather than creating a new table. */
87554 assert( pCx->isEphemeral );
87555 pCx->seqCount = 0;
87556 pCx->cacheStatus = CACHE_STALE;
87557 if( pCx->pBtx ){
87558 rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0);
87559 }
87560 }else{
87561 pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, CURTYPE_BTREE);
87562 if( pCx==0 ) goto no_mem;
 
87563 pCx->isEphemeral = 1;
87564 rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBtx,
87565 BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5,
87566 vfsFlags);
87567 if( rc==SQLITE_OK ){
@@ -87553,10 +87593,11 @@
87593 }
87594 }
87595 pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
87596 }
87597 if( rc ) goto abort_due_to_error;
87598 pCx->nullRow = 1;
87599 break;
87600 }
87601
87602 /* Opcode: SorterOpen P1 P2 P3 P4 *
87603 **
@@ -95521,10 +95562,27 @@
95562 if( zCol && sqlite3StrICmp(zSpan, zCol)!=0 ){
95563 return 0;
95564 }
95565 return 1;
95566 }
95567
95568 /*
95569 ** Return TRUE if the double-quoted string mis-feature should be supported.
95570 */
95571 static int areDoubleQuotedStringsEnabled(sqlite3 *db, NameContext *pTopNC){
95572 if( db->init.busy ) return 1; /* Always support for legacy schemas */
95573 if( pTopNC->ncFlags & NC_IsDDL ){
95574 /* Currently parsing a DDL statement */
95575 if( sqlite3WritableSchema(db) && (db->flags & SQLITE_DqsDML)!=0 ){
95576 return 1;
95577 }
95578 return (db->flags & SQLITE_DqsDDL)!=0;
95579 }else{
95580 /* Currently parsing a DML statement */
95581 return (db->flags & SQLITE_DqsDML)!=0;
95582 }
95583 }
95584
95585 /*
95586 ** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
95587 ** that name in the set of source tables in pSrcList and make the pExpr
95588 ** expression node refer back to that source column. The following changes
@@ -95850,12 +95908,12 @@
95908 ** Because no reference was made to outer contexts, the pNC->nRef
95909 ** fields are not changed in any context.
95910 */
95911 if( cnt==0 && zTab==0 ){
95912 assert( pExpr->op==TK_ID );
95913 if( ExprHasProperty(pExpr,EP_DblQuoted)
95914 && areDoubleQuotedStringsEnabled(db, pTopNC)
95915 ){
95916 /* If a double-quoted identifier does not match any known column name,
95917 ** then treat it as a string.
95918 **
95919 ** This hack was added in the early days of SQLite in a misguided attempt
@@ -97144,14 +97202,11 @@
97202 sSrc.a[0].pTab = pTab;
97203 sSrc.a[0].iCursor = -1;
97204 }
97205 sNC.pParse = pParse;
97206 sNC.pSrcList = &sSrc;
97207 sNC.ncFlags = type | NC_IsDDL;
 
 
 
97208 if( (rc = sqlite3ResolveExprNames(&sNC, pExpr))!=SQLITE_OK ) return rc;
97209 if( pList ) rc = sqlite3ResolveExprListNames(&sNC, pList);
97210 return rc;
97211 }
97212
@@ -100544,11 +100599,12 @@
100599 /*
100600 ** Convert a scalar expression node to a TK_REGISTER referencing
100601 ** register iReg. The caller must ensure that iReg already contains
100602 ** the correct value for the expression.
100603 */
100604 static void exprToRegister(Expr *pExpr, int iReg){
100605 Expr *p = sqlite3ExprSkipCollate(pExpr);
100606 p->op2 = p->op;
100607 p->op = TK_REGISTER;
100608 p->iTable = iReg;
100609 ExprClearProperty(p, EP_Skip);
100610 }
@@ -103438,15 +103494,24 @@
103494
103495 /*
103496 ** Walker callback used by sqlite3RenameExprUnmap().
103497 */
103498 static int renameUnmapSelectCb(Walker *pWalker, Select *p){
103499 Parse *pParse = pWalker->pParse;
103500 int i;
103501 if( ALWAYS(p->pEList) ){
103502 ExprList *pList = p->pEList;
103503 for(i=0; i<pList->nExpr; i++){
103504 if( pList->a[i].zName ){
103505 sqlite3RenameTokenRemap(pParse, 0, (void*)pList->a[i].zName);
103506 }
103507 }
103508 }
103509 if( ALWAYS(p->pSrc) ){ /* Every Select as a SrcList, even if it is empty */
103510 SrcList *pSrc = p->pSrc;
103511 for(i=0; i<pSrc->nSrc; i++){
103512 sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
 
103513 }
103514 }
103515 return WRC_Continue;
103516 }
103517
@@ -107836,14 +107901,18 @@
107901 static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
107902 Index *pIndex, *pNext;
107903
107904 #ifdef SQLITE_DEBUG
107905 /* Record the number of outstanding lookaside allocations in schema Tables
107906 ** prior to doing any free() operations. Since schema Tables do not use
107907 ** lookaside, this number should not change.
107908 **
107909 ** If malloc has already failed, it may be that it failed while allocating
107910 ** a Table object that was going to be marked ephemeral. So do not check
107911 ** that no lookaside memory is used in this case either. */
107912 int nLookaside = 0;
107913 if( db && !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){
107914 nLookaside = sqlite3LookasideUsed(db, 0);
107915 }
107916 #endif
107917
107918 /* Delete all indices associated with this table. */
@@ -127167,13 +127236,10 @@
127236 while( pSelect->pPrior ) pSelect = pSelect->pPrior;
127237 pTab = sqlite3DbMallocZero(db, sizeof(Table) );
127238 if( pTab==0 ){
127239 return 0;
127240 }
 
 
 
127241 pTab->nTabRef = 1;
127242 pTab->zName = 0;
127243 pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
127244 sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
127245 sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect);
@@ -139175,32 +139241,35 @@
139241 zNew[iTo++] = zNew[iFrom];
139242 }
139243 zNew[iTo] = 0;
139244 assert( iTo>0 );
139245
139246 /* If the LHS is not an ordinary column with TEXT affinity, then the
139247 ** pattern prefix boundaries (both the start and end boundaries) must
139248 ** not look like a number. Otherwise the pattern might be treated as
139249 ** a number, which will invalidate the LIKE optimization.
 
 
139250 **
139251 ** Getting this right has been a persistent source of bugs in the
139252 ** LIKE optimization. See, for example:
139253 ** 2018-09-10 https://sqlite.org/src/info/c94369cae9b561b1
139254 ** 2019-05-02 https://sqlite.org/src/info/b043a54c3de54b28
139255 ** 2019-06-10 https://sqlite.org/src/info/fd76310a5e843e07
139256 ** 2019-06-14 https://sqlite.org/src/info/ce8717f0885af975
139257 */
139258 if( pLeft->op!=TK_COLUMN
139259 || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT
139260 || IsVirtual(pLeft->y.pTab) /* Value might be numeric */
139261 ){
139262 int isNum;
139263 double rDummy;
139264 isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8);
139265 if( isNum<=0 ){
139266 zNew[iTo-1]++;
139267 isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8);
139268 zNew[iTo-1]--;
139269 }
139270 if( isNum>0 ){
139271 sqlite3ExprDelete(db, pPrefix);
139272 sqlite3ValueFree(pVal);
139273 return 0;
139274 }
139275 }
@@ -141083,21 +141152,21 @@
141152 **
141153 ** This routine runs over generated VDBE code and translates OP_Column
141154 ** opcodes into OP_Copy when the table is being accessed via co-routine
141155 ** instead of via table lookup.
141156 **
141157 ** If the iAutoidxCur is not zero, then any OP_Rowid instructions on
141158 ** cursor iTabCur are transformed into OP_Sequence opcode for the
141159 ** iAutoidxCur cursor, in order to generate unique rowids for the
141160 ** automatic index being generated.
141161 */
141162 static void translateColumnToCopy(
141163 Parse *pParse, /* Parsing context */
141164 int iStart, /* Translate from this opcode to the end */
141165 int iTabCur, /* OP_Column/OP_Rowid references to this table */
141166 int iRegister, /* The first column is in this register */
141167 int iAutoidxCur /* If non-zero, cursor of autoindex being generated */
141168 ){
141169 Vdbe *v = pParse->pVdbe;
141170 VdbeOp *pOp = sqlite3VdbeGetOp(v, iStart);
141171 int iEnd = sqlite3VdbeCurrentAddr(v);
141172 if( pParse->db->mallocFailed ) return;
@@ -141107,15 +141176,13 @@
141176 pOp->opcode = OP_Copy;
141177 pOp->p1 = pOp->p2 + iRegister;
141178 pOp->p2 = pOp->p3;
141179 pOp->p3 = 0;
141180 }else if( pOp->opcode==OP_Rowid ){
141181 if( iAutoidxCur ){
141182 pOp->opcode = OP_Sequence;
141183 pOp->p1 = iAutoidxCur;
 
 
141184 }else{
141185 pOp->opcode = OP_Null;
141186 pOp->p1 = 0;
141187 pOp->p3 = 0;
141188 }
@@ -141385,12 +141452,13 @@
141452 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
141453 if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
141454 if( pTabItem->fg.viaCoroutine ){
141455 sqlite3VdbeChangeP2(v, addrCounter, regBase+n);
141456 testcase( pParse->db->mallocFailed );
141457 assert( pLevel->iIdxCur>0 );
141458 translateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
141459 pTabItem->regResult, pLevel->iIdxCur);
141460 sqlite3VdbeGoto(v, addrTop);
141461 pTabItem->fg.viaCoroutine = 0;
141462 }else{
141463 sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
141464 }
@@ -146631,10 +146699,11 @@
146699 typedef struct WindowRewrite WindowRewrite;
146700 struct WindowRewrite {
146701 Window *pWin;
146702 SrcList *pSrc;
146703 ExprList *pSub;
146704 Table *pTab;
146705 Select *pSubSelect; /* Current sub-select, if any */
146706 };
146707
146708 /*
146709 ** Callback function used by selectWindowRewriteEList(). If necessary,
@@ -146691,10 +146760,11 @@
146760 memset(pExpr, 0, sizeof(Expr));
146761
146762 pExpr->op = TK_COLUMN;
146763 pExpr->iColumn = p->pSub->nExpr-1;
146764 pExpr->iTable = p->pWin->iEphCsr;
146765 pExpr->y.pTab = p->pTab;
146766 }
146767
146768 break;
146769 }
146770
@@ -146734,10 +146804,11 @@
146804 static void selectWindowRewriteEList(
146805 Parse *pParse,
146806 Window *pWin,
146807 SrcList *pSrc,
146808 ExprList *pEList, /* Rewrite expressions in this list */
146809 Table *pTab,
146810 ExprList **ppSub /* IN/OUT: Sub-select expression-list */
146811 ){
146812 Walker sWalker;
146813 WindowRewrite sRewrite;
146814
@@ -146745,10 +146816,11 @@
146816 memset(&sRewrite, 0, sizeof(WindowRewrite));
146817
146818 sRewrite.pSub = *ppSub;
146819 sRewrite.pWin = pWin;
146820 sRewrite.pSrc = pSrc;
146821 sRewrite.pTab = pTab;
146822
146823 sWalker.pParse = pParse;
146824 sWalker.xExprCallback = selectWindowRewriteExprCb;
146825 sWalker.xSelectCallback = selectWindowRewriteSelectCb;
146826 sWalker.u.pRewrite = &sRewrite;
@@ -146804,15 +146876,22 @@
146876 ExprList *pSort = 0;
146877
146878 ExprList *pSublist = 0; /* Expression list for sub-query */
146879 Window *pMWin = p->pWin; /* Master window object */
146880 Window *pWin; /* Window object iterator */
146881 Table *pTab;
146882
146883 pTab = sqlite3DbMallocZero(db, sizeof(Table));
146884 if( pTab==0 ){
146885 return SQLITE_NOMEM;
146886 }
146887
146888 p->pSrc = 0;
146889 p->pWhere = 0;
146890 p->pGroupBy = 0;
146891 p->pHaving = 0;
146892 p->selFlags &= ~SF_Aggregate;
146893
146894 /* Create the ORDER BY clause for the sub-select. This is the concatenation
146895 ** of the window PARTITION and ORDER BY clauses. Then, if this makes it
146896 ** redundant, remove the ORDER BY from the parent SELECT. */
146897 pSort = sqlite3ExprListDup(db, pMWin->pPartition, 0);
@@ -146828,12 +146907,12 @@
146907 ** The OpenEphemeral instruction is coded later, after it is known how
146908 ** many columns the table will have. */
146909 pMWin->iEphCsr = pParse->nTab++;
146910 pParse->nTab += 3;
146911
146912 selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, pTab, &pSublist);
146913 selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, pTab, &pSublist);
146914 pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0);
146915
146916 /* Append the PARTITION BY and ORDER BY expressions to the to the
146917 ** sub-select expression list. They are required to figure out where
146918 ** boundaries for partitions and sets of peer rows lie. */
@@ -146871,28 +146950,32 @@
146950 pSub = sqlite3SelectNew(
146951 pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0
146952 );
146953 p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
146954 if( p->pSrc ){
146955 Table *pTab2;
146956 p->pSrc->a[0].pSelect = pSub;
146957 sqlite3SrcListAssignCursors(pParse, p->pSrc);
146958 pSub->selFlags |= SF_Expanded;
146959 pTab2 = sqlite3ResultSetOfSelect(pParse, pSub);
146960 if( pTab2==0 ){
146961 rc = SQLITE_NOMEM;
146962 }else{
146963 memcpy(pTab, pTab2, sizeof(Table));
146964 pTab->tabFlags |= TF_Ephemeral;
146965 p->pSrc->a[0].pTab = pTab;
146966 pTab = pTab2;
146967 }
 
146968 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, pSublist->nExpr);
146969 sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+1, pMWin->iEphCsr);
146970 sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+2, pMWin->iEphCsr);
146971 sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+3, pMWin->iEphCsr);
146972 }else{
146973 sqlite3SelectDelete(db, pSub);
146974 }
146975 if( db->mallocFailed ) rc = SQLITE_NOMEM;
146976 sqlite3DbFree(db, pTab);
146977 }
146978
146979 return rc;
146980 }
146981
@@ -155959,10 +156042,13 @@
156042 { SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP },
156043 { SQLITE_DBCONFIG_RESET_DATABASE, SQLITE_ResetDatabase },
156044 { SQLITE_DBCONFIG_DEFENSIVE, SQLITE_Defensive },
156045 { SQLITE_DBCONFIG_WRITABLE_SCHEMA, SQLITE_WriteSchema|
156046 SQLITE_NoSchemaError },
156047 { SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, SQLITE_LegacyAlter },
156048 { SQLITE_DBCONFIG_DQS_DDL, SQLITE_DqsDDL },
156049 { SQLITE_DBCONFIG_DQS_DML, SQLITE_DqsDML },
156050 };
156051 unsigned int i;
156052 rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
156053 for(i=0; i<ArraySize(aFlagOp); i++){
156054 if( aFlagOp[i].op==op ){
@@ -155989,62 +156075,55 @@
156075 }
156076 va_end(ap);
156077 return rc;
156078 }
156079
 
 
 
 
 
 
 
 
 
156080 /*
156081 ** This is the default collating function named "BINARY" which is always
156082 ** available.
 
 
 
156083 */
156084 static int binCollFunc(
156085 void *NotUsed,
156086 int nKey1, const void *pKey1,
156087 int nKey2, const void *pKey2
156088 ){
156089 int rc, n;
156090 UNUSED_PARAMETER(NotUsed);
156091 n = nKey1<nKey2 ? nKey1 : nKey2;
156092 /* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares
156093 ** strings byte by byte using the memcmp() function from the standard C
156094 ** library. */
156095 assert( pKey1 && pKey2 );
156096 rc = memcmp(pKey1, pKey2, n);
156097 if( rc==0 ){
156098 rc = nKey1 - nKey2;
 
 
 
 
 
 
 
 
 
 
 
156099 }
156100 return rc;
156101 }
156102
156103 /*
156104 ** This is the collating function named "RTRIM" which is always
156105 ** available. Ignore trailing spaces.
156106 */
156107 static int rtrimCollFunc(
156108 void *pUser,
156109 int nKey1, const void *pKey1,
156110 int nKey2, const void *pKey2
156111 ){
156112 const u8 *pK1 = (const u8*)pKey1;
156113 const u8 *pK2 = (const u8*)pKey2;
156114 while( nKey1 && pK1[nKey1-1]==' ' ) nKey1--;
156115 while( nKey2 && pK2[nKey2-1]==' ' ) nKey2--;
156116 return binCollFunc(pUser, nKey1, pKey1, nKey2, pKey2);
156117 }
156118
156119 /*
156120 ** Return true if CollSeq is the default built-in BINARY.
156121 */
156122 SQLITE_PRIVATE int sqlite3IsBinary(const CollSeq *p){
156123 assert( p==0 || p->xCmp!=binCollFunc || strcmp(p->zName,"BINARY")==0 );
156124 return p==0 || p->xCmp==binCollFunc;
 
156125 }
156126
156127 /*
156128 ** Another built-in collating sequence: NOCASE.
156129 **
@@ -158191,11 +158270,39 @@
158270 db->autoCommit = 1;
158271 db->nextAutovac = -1;
158272 db->szMmap = sqlite3GlobalConfig.szMmap;
158273 db->nextPagesize = 0;
158274 db->nMaxSorterMmap = 0x7FFFFFFF;
158275 db->flags |= SQLITE_ShortColNames
158276 | SQLITE_EnableTrigger
158277 | SQLITE_CacheSpill
158278
158279 /* The SQLITE_DQS compile-time option determines the default settings
158280 ** for SQLITE_DBCONFIG_DQS_DDL and SQLITE_DBCONFIG_DQS_DML.
158281 **
158282 ** SQLITE_DQS SQLITE_DBCONFIG_DQS_DDL SQLITE_DBCONFIG_DQS_DML
158283 ** ---------- ----------------------- -----------------------
158284 ** undefined on on
158285 ** 3 on on
158286 ** 2 on off
158287 ** 1 off on
158288 ** 0 off off
158289 **
158290 ** Legacy behavior is 3 (double-quoted string literals are allowed anywhere)
158291 ** and so that is the default. But developers are encouranged to use
158292 ** -DSQLITE_DQS=0 (best) or -DSQLITE_DQS=1 (second choice) if possible.
158293 */
158294 #if !defined(SQLITE_DQS)
158295 # define SQLITE_DQS 3
158296 #endif
158297 #if (SQLITE_DQS&1)==1
158298 | SQLITE_DqsDML
158299 #endif
158300 #if (SQLITE_DQS&2)==2
158301 | SQLITE_DqsDDL
158302 #endif
158303
158304 #if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
158305 | SQLITE_AutoIndex
158306 #endif
158307 #if SQLITE_DEFAULT_CKPTFULLFSYNC
158308 | SQLITE_CkptFullFSync
@@ -158242,11 +158349,11 @@
158349 */
158350 createCollation(db, sqlite3StrBINARY, SQLITE_UTF8, 0, binCollFunc, 0);
158351 createCollation(db, sqlite3StrBINARY, SQLITE_UTF16BE, 0, binCollFunc, 0);
158352 createCollation(db, sqlite3StrBINARY, SQLITE_UTF16LE, 0, binCollFunc, 0);
158353 createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
158354 createCollation(db, "RTRIM", SQLITE_UTF8, 0, rtrimCollFunc, 0);
158355 if( db->mallocFailed ){
158356 goto opendb_out;
158357 }
158358 /* EVIDENCE-OF: R-08308-17224 The default collating function for all
158359 ** strings is BINARY.
@@ -175175,14 +175282,17 @@
175282 pWriter->aNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst;
175283 }
175284
175285 pNode = &pWriter->aNodeWriter[nHeight];
175286 pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight;
175287 blobGrowBuffer(&pNode->block,
175288 MAX(nRoot, p->nNodeSize)+FTS3_NODE_PADDING, &rc
175289 );
175290 if( rc==SQLITE_OK ){
175291 memcpy(pNode->block.a, aRoot, nRoot);
175292 pNode->block.n = nRoot;
175293 memset(&pNode->block.a[nRoot], 0, FTS3_NODE_PADDING);
175294 }
175295
175296 for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){
175297 NodeReader reader;
175298 pNode = &pWriter->aNodeWriter[i];
@@ -175198,14 +175308,17 @@
175308 char *aBlock = 0;
175309 int nBlock = 0;
175310 pNode = &pWriter->aNodeWriter[i-1];
175311 pNode->iBlock = reader.iChild;
175312 rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock, 0);
175313 blobGrowBuffer(&pNode->block,
175314 MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc
175315 );
175316 if( rc==SQLITE_OK ){
175317 memcpy(pNode->block.a, aBlock, nBlock);
175318 pNode->block.n = nBlock;
175319 memset(&pNode->block.a[nBlock], 0, FTS3_NODE_PADDING);
175320 }
175321 sqlite3_free(aBlock);
175322 }
175323 }
175324 }
@@ -180252,11 +180365,11 @@
180365 }
180366 if( pApnd ){
180367 u32 iStart, iLabel;
180368 JsonNode *pNode;
180369 iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0);
180370 iLabel = jsonParseAddNode(pParse, JSON_STRING, nKey, zKey);
180371 zPath += i;
180372 pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
180373 if( pParse->oom ) return 0;
180374 if( pNode ){
180375 pRoot = &pParse->aNode[iRoot];
@@ -218891,11 +219004,11 @@
219004 int nArg, /* Number of args */
219005 sqlite3_value **apUnused /* Function arguments */
219006 ){
219007 assert( nArg==0 );
219008 UNUSED_PARAM2(nArg, apUnused);
219009 sqlite3_result_text(pCtx, "fts5: 2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9acaf6", -1, SQLITE_TRANSIENT);
219010 }
219011
219012 /*
219013 ** Return true if zName is the extension on one of the shadow tables used
219014 ** by this module.
@@ -223657,12 +223770,12 @@
223770 }
223771 #endif /* SQLITE_CORE */
223772 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
223773
223774 /************** End of stmt.c ************************************************/
223775 #if __LINE__!=223775
223776 #undef SQLITE_SOURCE_ID
223777 #define SQLITE_SOURCE_ID "2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9aalt2"
223778 #endif
223779 /* Return the source-id for this library */
223780 SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
223781 /************************** End of sqlite3.c ******************************/
223782
+33 -2
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -123,11 +123,11 @@
123123
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
124124
** [sqlite_version()] and [sqlite_source_id()].
125125
*/
126126
#define SQLITE_VERSION "3.29.0"
127127
#define SQLITE_VERSION_NUMBER 3029000
128
-#define SQLITE_SOURCE_ID "2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6c2be4"
128
+#define SQLITE_SOURCE_ID "2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9acaf6"
129129
130130
/*
131131
** CAPI3REF: Run-Time Library Version Numbers
132132
** KEYWORDS: sqlite3_version sqlite3_sourceid
133133
**
@@ -2218,10 +2218,38 @@
22182218
** the writable_schema, positive to enable writable_schema, or negative to
22192219
** leave the setting unchanged. The second parameter is a pointer to an
22202220
** integer into which is written 0 or 1 to indicate whether the writable_schema
22212221
** is enabled or disabled following this call.
22222222
** </dd>
2223
+**
2224
+** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
2225
+** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
2226
+** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
2227
+** the legacy behavior of the [ALTER TABLE RENAME] command such it
2228
+** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
2229
+** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
2230
+** additional information. This feature can also be turned on and off
2231
+** using the [PRAGMA legacy_alter_table] statement.
2232
+** </dd>
2233
+**
2234
+** [[SQLITE_DBCONFIG_DQS_DML]]
2235
+** <dt>SQLITE_DBCONFIG_DQS_DML</td>
2236
+** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
2237
+** the legacy [double-quoted string literal] misfeature for DML statement
2238
+** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
2239
+** default value of this setting is determined by the [-DSQLITE_DQS]
2240
+** compile-time option.
2241
+** </dd>
2242
+**
2243
+** [[SQLITE_DBCONFIG_DQS_DDL]]
2244
+** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
2245
+** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
2246
+** the legacy [double-quoted string literal] misfeature for DDL statements,
2247
+** such as CREATE TABLE and CREATE INDEX. The
2248
+** default value of this setting is determined by the [-DSQLITE_DQS]
2249
+** compile-time option.
2250
+** </dd>
22232251
** </dl>
22242252
*/
22252253
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
22262254
#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
22272255
#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
@@ -2232,11 +2260,14 @@
22322260
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
22332261
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
22342262
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
22352263
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
22362264
#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
2237
-#define SQLITE_DBCONFIG_MAX 1011 /* Largest DBCONFIG */
2265
+#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
2266
+#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
2267
+#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
2268
+#define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
22382269
22392270
/*
22402271
** CAPI3REF: Enable Or Disable Extended Result Codes
22412272
** METHOD: sqlite3
22422273
**
22432274
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -123,11 +123,11 @@
123 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
124 ** [sqlite_version()] and [sqlite_source_id()].
125 */
126 #define SQLITE_VERSION "3.29.0"
127 #define SQLITE_VERSION_NUMBER 3029000
128 #define SQLITE_SOURCE_ID "2019-06-13 14:07:41 f8696b60eec0dcacfe92d9a31cbf1436d674140e5447de0cd1c2f52bff6c2be4"
129
130 /*
131 ** CAPI3REF: Run-Time Library Version Numbers
132 ** KEYWORDS: sqlite3_version sqlite3_sourceid
133 **
@@ -2218,10 +2218,38 @@
2218 ** the writable_schema, positive to enable writable_schema, or negative to
2219 ** leave the setting unchanged. The second parameter is a pointer to an
2220 ** integer into which is written 0 or 1 to indicate whether the writable_schema
2221 ** is enabled or disabled following this call.
2222 ** </dd>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2223 ** </dl>
2224 */
2225 #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
2226 #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
2227 #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
@@ -2232,11 +2260,14 @@
2232 #define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
2233 #define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
2234 #define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
2235 #define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
2236 #define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
2237 #define SQLITE_DBCONFIG_MAX 1011 /* Largest DBCONFIG */
 
 
 
2238
2239 /*
2240 ** CAPI3REF: Enable Or Disable Extended Result Codes
2241 ** METHOD: sqlite3
2242 **
2243
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -123,11 +123,11 @@
123 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
124 ** [sqlite_version()] and [sqlite_source_id()].
125 */
126 #define SQLITE_VERSION "3.29.0"
127 #define SQLITE_VERSION_NUMBER 3029000
128 #define SQLITE_SOURCE_ID "2019-07-08 13:45:02 8fb0c6d5a38e77aa4c5f394fb8af1b0c7c6a4790e932aabc213a3078ee9acaf6"
129
130 /*
131 ** CAPI3REF: Run-Time Library Version Numbers
132 ** KEYWORDS: sqlite3_version sqlite3_sourceid
133 **
@@ -2218,10 +2218,38 @@
2218 ** the writable_schema, positive to enable writable_schema, or negative to
2219 ** leave the setting unchanged. The second parameter is a pointer to an
2220 ** integer into which is written 0 or 1 to indicate whether the writable_schema
2221 ** is enabled or disabled following this call.
2222 ** </dd>
2223 **
2224 ** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
2225 ** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
2226 ** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
2227 ** the legacy behavior of the [ALTER TABLE RENAME] command such it
2228 ** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
2229 ** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
2230 ** additional information. This feature can also be turned on and off
2231 ** using the [PRAGMA legacy_alter_table] statement.
2232 ** </dd>
2233 **
2234 ** [[SQLITE_DBCONFIG_DQS_DML]]
2235 ** <dt>SQLITE_DBCONFIG_DQS_DML</td>
2236 ** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
2237 ** the legacy [double-quoted string literal] misfeature for DML statement
2238 ** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
2239 ** default value of this setting is determined by the [-DSQLITE_DQS]
2240 ** compile-time option.
2241 ** </dd>
2242 **
2243 ** [[SQLITE_DBCONFIG_DQS_DDL]]
2244 ** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
2245 ** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
2246 ** the legacy [double-quoted string literal] misfeature for DDL statements,
2247 ** such as CREATE TABLE and CREATE INDEX. The
2248 ** default value of this setting is determined by the [-DSQLITE_DQS]
2249 ** compile-time option.
2250 ** </dd>
2251 ** </dl>
2252 */
2253 #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
2254 #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
2255 #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
@@ -2232,11 +2260,14 @@
2260 #define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
2261 #define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
2262 #define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
2263 #define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
2264 #define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
2265 #define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
2266 #define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
2267 #define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
2268 #define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
2269
2270 /*
2271 ** CAPI3REF: Enable Or Disable Extended Result Codes
2272 ** METHOD: sqlite3
2273 **
2274
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -83,17 +83,17 @@
8383
8484
# define the SQLite files, which need special flags on compile
8585
SQLITESRC=sqlite3.c
8686
ORIGSQLITESRC=$(foreach sf,$(SQLITESRC),$(SRCDIR)$(sf))
8787
SQLITEOBJ=$(foreach sf,$(SQLITESRC),$(sf:.c=.obj))
88
-SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_WIN32_NO_ANSI
88
+SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_WIN32_NO_ANSI
8989
9090
# define the SQLite shell files, which need special flags on compile
9191
SQLITESHELLSRC=shell.c
9292
ORIGSQLITESHELLSRC=$(foreach sf,$(SQLITESHELLSRC),$(SRCDIR)$(sf))
9393
SQLITESHELLOBJ=$(foreach sf,$(SQLITESHELLSRC),$(sf:.c=.obj))
94
-SQLITESHELLDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
94
+SQLITESHELLDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
9595
9696
# define the th scripting files, which need special flags on compile
9797
THSRC=th.c th_lang.c
9898
ORIGTHSRC=$(foreach sf,$(THSRC),$(SRCDIR)$(sf))
9999
THOBJ=$(foreach sf,$(THSRC),$(sf:.c=.obj))
100100
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -83,17 +83,17 @@
83
84 # define the SQLite files, which need special flags on compile
85 SQLITESRC=sqlite3.c
86 ORIGSQLITESRC=$(foreach sf,$(SQLITESRC),$(SRCDIR)$(sf))
87 SQLITEOBJ=$(foreach sf,$(SQLITESRC),$(sf:.c=.obj))
88 SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_WIN32_NO_ANSI
89
90 # define the SQLite shell files, which need special flags on compile
91 SQLITESHELLSRC=shell.c
92 ORIGSQLITESHELLSRC=$(foreach sf,$(SQLITESHELLSRC),$(SRCDIR)$(sf))
93 SQLITESHELLOBJ=$(foreach sf,$(SQLITESHELLSRC),$(sf:.c=.obj))
94 SQLITESHELLDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
95
96 # define the th scripting files, which need special flags on compile
97 THSRC=th.c th_lang.c
98 ORIGTHSRC=$(foreach sf,$(THSRC),$(SRCDIR)$(sf))
99 THOBJ=$(foreach sf,$(THSRC),$(sf:.c=.obj))
100
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -83,17 +83,17 @@
83
84 # define the SQLite files, which need special flags on compile
85 SQLITESRC=sqlite3.c
86 ORIGSQLITESRC=$(foreach sf,$(SQLITESRC),$(SRCDIR)$(sf))
87 SQLITEOBJ=$(foreach sf,$(SQLITESRC),$(sf:.c=.obj))
88 SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_WIN32_NO_ANSI
89
90 # define the SQLite shell files, which need special flags on compile
91 SQLITESHELLSRC=shell.c
92 ORIGSQLITESHELLSRC=$(foreach sf,$(SQLITESHELLSRC),$(SRCDIR)$(sf))
93 SQLITESHELLOBJ=$(foreach sf,$(SQLITESHELLSRC),$(sf:.c=.obj))
94 SQLITESHELLDEFINES=-DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
95
96 # define the th scripting files, which need special flags on compile
97 THSRC=th.c th_lang.c
98 ORIGTHSRC=$(foreach sf,$(THSRC),$(SRCDIR)$(sf))
99 THOBJ=$(foreach sf,$(THSRC),$(sf:.c=.obj))
100
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,13 +24,13 @@
2424
CFLAGS = -o
2525
BCC = $(DMDIR)\bin\dmc $(CFLAGS)
2626
TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
2727
LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32 dnsapi
2828
29
-SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
29
+SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
3030
31
-SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
31
+SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
3232
3333
SRC = add_.c alerts_.c allrepo_.c attach_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
3434
3535
OBJ = $(OBJDIR)\add$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3636
3737
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,13 +24,13 @@
24 CFLAGS = -o
25 BCC = $(DMDIR)\bin\dmc $(CFLAGS)
26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32 dnsapi
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
30
31 SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c alerts_.c allrepo_.c attach_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,13 +24,13 @@
24 CFLAGS = -o
25 BCC = $(DMDIR)\bin\dmc $(CFLAGS)
26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32 dnsapi
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
30
31 SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c alerts_.c allrepo_.c attach_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -2393,10 +2393,11 @@
23932393
23942394
MINGW_OPTIONS = -D_HAVE__MINGW_H
23952395
23962396
SQLITE_OPTIONS = -DNDEBUG=1 \
23972397
-DSQLITE_THREADSAFE=0 \
2398
+ -DSQLITE_DQS=0 \
23982399
-DSQLITE_DEFAULT_MEMSTATUS=0 \
23992400
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
24002401
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
24012402
-DSQLITE_OMIT_DECLTYPE \
24022403
-DSQLITE_OMIT_DEPRECATED \
@@ -2422,10 +2423,11 @@
24222423
-DSQLITE_USE_MALLOC_H \
24232424
-DSQLITE_USE_MSIZE
24242425
24252426
SHELL_OPTIONS = -DNDEBUG=1 \
24262427
-DSQLITE_THREADSAFE=0 \
2428
+ -DSQLITE_DQS=0 \
24272429
-DSQLITE_DEFAULT_MEMSTATUS=0 \
24282430
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
24292431
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
24302432
-DSQLITE_OMIT_DECLTYPE \
24312433
-DSQLITE_OMIT_DEPRECATED \
24322434
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -2393,10 +2393,11 @@
2393
2394 MINGW_OPTIONS = -D_HAVE__MINGW_H
2395
2396 SQLITE_OPTIONS = -DNDEBUG=1 \
2397 -DSQLITE_THREADSAFE=0 \
 
2398 -DSQLITE_DEFAULT_MEMSTATUS=0 \
2399 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2400 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2401 -DSQLITE_OMIT_DECLTYPE \
2402 -DSQLITE_OMIT_DEPRECATED \
@@ -2422,10 +2423,11 @@
2422 -DSQLITE_USE_MALLOC_H \
2423 -DSQLITE_USE_MSIZE
2424
2425 SHELL_OPTIONS = -DNDEBUG=1 \
2426 -DSQLITE_THREADSAFE=0 \
 
2427 -DSQLITE_DEFAULT_MEMSTATUS=0 \
2428 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2429 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2430 -DSQLITE_OMIT_DECLTYPE \
2431 -DSQLITE_OMIT_DEPRECATED \
2432
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -2393,10 +2393,11 @@
2393
2394 MINGW_OPTIONS = -D_HAVE__MINGW_H
2395
2396 SQLITE_OPTIONS = -DNDEBUG=1 \
2397 -DSQLITE_THREADSAFE=0 \
2398 -DSQLITE_DQS=0 \
2399 -DSQLITE_DEFAULT_MEMSTATUS=0 \
2400 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2401 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2402 -DSQLITE_OMIT_DECLTYPE \
2403 -DSQLITE_OMIT_DEPRECATED \
@@ -2422,10 +2423,11 @@
2423 -DSQLITE_USE_MALLOC_H \
2424 -DSQLITE_USE_MSIZE
2425
2426 SHELL_OPTIONS = -DNDEBUG=1 \
2427 -DSQLITE_THREADSAFE=0 \
2428 -DSQLITE_DQS=0 \
2429 -DSQLITE_DEFAULT_MEMSTATUS=0 \
2430 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2431 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2432 -DSQLITE_OMIT_DECLTYPE \
2433 -DSQLITE_OMIT_DEPRECATED \
2434
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -277,10 +277,11 @@
277277
RCC = $(RCC) /DUSE_SEE=1
278278
!endif
279279
280280
SQLITE_OPTIONS = /DNDEBUG=1 \
281281
/DSQLITE_THREADSAFE=0 \
282
+ /DSQLITE_DQS=0 \
282283
/DSQLITE_DEFAULT_MEMSTATUS=0 \
283284
/DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
284285
/DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
285286
/DSQLITE_OMIT_DECLTYPE \
286287
/DSQLITE_OMIT_DEPRECATED \
@@ -303,10 +304,11 @@
303304
/DSQLITE_ENABLE_DBPAGE_VTAB \
304305
/DSQLITE_WIN32_NO_ANSI
305306
306307
SHELL_OPTIONS = /DNDEBUG=1 \
307308
/DSQLITE_THREADSAFE=0 \
309
+ /DSQLITE_DQS=0 \
308310
/DSQLITE_DEFAULT_MEMSTATUS=0 \
309311
/DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
310312
/DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
311313
/DSQLITE_OMIT_DECLTYPE \
312314
/DSQLITE_OMIT_DEPRECATED \
313315
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -277,10 +277,11 @@
277 RCC = $(RCC) /DUSE_SEE=1
278 !endif
279
280 SQLITE_OPTIONS = /DNDEBUG=1 \
281 /DSQLITE_THREADSAFE=0 \
 
282 /DSQLITE_DEFAULT_MEMSTATUS=0 \
283 /DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
284 /DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
285 /DSQLITE_OMIT_DECLTYPE \
286 /DSQLITE_OMIT_DEPRECATED \
@@ -303,10 +304,11 @@
303 /DSQLITE_ENABLE_DBPAGE_VTAB \
304 /DSQLITE_WIN32_NO_ANSI
305
306 SHELL_OPTIONS = /DNDEBUG=1 \
307 /DSQLITE_THREADSAFE=0 \
 
308 /DSQLITE_DEFAULT_MEMSTATUS=0 \
309 /DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
310 /DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
311 /DSQLITE_OMIT_DECLTYPE \
312 /DSQLITE_OMIT_DEPRECATED \
313
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -277,10 +277,11 @@
277 RCC = $(RCC) /DUSE_SEE=1
278 !endif
279
280 SQLITE_OPTIONS = /DNDEBUG=1 \
281 /DSQLITE_THREADSAFE=0 \
282 /DSQLITE_DQS=0 \
283 /DSQLITE_DEFAULT_MEMSTATUS=0 \
284 /DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
285 /DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
286 /DSQLITE_OMIT_DECLTYPE \
287 /DSQLITE_OMIT_DEPRECATED \
@@ -303,10 +304,11 @@
304 /DSQLITE_ENABLE_DBPAGE_VTAB \
305 /DSQLITE_WIN32_NO_ANSI
306
307 SHELL_OPTIONS = /DNDEBUG=1 \
308 /DSQLITE_THREADSAFE=0 \
309 /DSQLITE_DQS=0 \
310 /DSQLITE_DEFAULT_MEMSTATUS=0 \
311 /DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
312 /DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
313 /DSQLITE_OMIT_DECLTYPE \
314 /DSQLITE_OMIT_DEPRECATED \
315

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button