@@ -1,8 +1,8 @@
1 1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/******************************************************************************
2 2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file is an amalgamation of many separate C source files from SQLite
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** version 3.6.15. By combining all the individual C code files into this
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version 3.6.16. By combining all the individual C code files into this
4 4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** single large file, the entire code can be compiled as a one translation
5 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unit. This allows many compilers to do optimizations that would not be
6 6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** possible if the files were compiled separately. Performance improvements
7 7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of 5% are more are commonly seen when SQLite is compiled as a single
8 8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** translation unit.
@@ -15,11 +15,11 @@
15 15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** needed if you want a wrapper to interface SQLite with your choice of
16 16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** programming language. The code for the "sqlite3" command-line shell
17 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is also in a separate file. This file contains only code for the core
18 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite library.
19 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This amalgamation was generated on 2009-06-23 14:42:37 UTC.
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This amalgamation was generated on 2009-06-27 13:43:17 UTC.
21 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_CORE 1
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_AMALGAMATION 1
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_PRIVATE
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_PRIVATE static
@@ -39,11 +39,11 @@
39 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
40 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
41 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
42 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Internal interface definitions for SQLite.
43 43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** @(#) $Id: sqliteInt.h,v 1.886 2009/06/19 14:06:03 drh Exp $
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** @(#) $Id: sqliteInt.h,v 1.890 2009/06/26 15:14:55 drh Exp $
45 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef _SQLITEINT_H_
47 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define _SQLITEINT_H_
48 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -489,13 +489,12 @@
489 489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
490 490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_COVERAGE_TEST)
491 491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ALWAYS(X) (1)
492 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define NEVER(X) (0)
493 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif !defined(NDEBUG)
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Assert(void);
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define ALWAYS(X) ((X)?1:sqlite3Assert())
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define NEVER(X) ((X)?sqlite3Assert():0)
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define ALWAYS(X) ((X)?1:(assert(0),0))
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define NEVER(X) ((X)?(assert(0),1):0)
497 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
498 497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ALWAYS(X) (X)
499 498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define NEVER(X) (X)
500 499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
501 500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -614,12 +613,12 @@
614 613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
615 614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()].
616 615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
617 616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Requirements: [H10011] [H10014]
618 617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION "3.6.15"
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION_NUMBER 3006015
618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION "3.6.16"
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION_NUMBER 3006016
621 620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
622 621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
623 622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers {H10020} <S60100>
624 623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version
625 624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -6693,10 +6692,11 @@
6693 6692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
6694 6693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Forward references to structures
6695 6694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
6696 6695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct AggInfo AggInfo;
6697 6696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct AuthContext AuthContext;
6697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct AutoincInfo AutoincInfo;
6698 6698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Bitvec Bitvec;
6699 6699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct RowSet RowSet;
6700 6700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct CollSeq CollSeq;
6701 6701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Column Column;
6702 6702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Db Db;
@@ -8218,11 +8218,10 @@
8218 8218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */
8219 8219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nextPagesize; /* Pagesize after VACUUM if >0 */
8220 8220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTable; /* Number of tables in the database */
8221 8221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pDfltColl; /* The default collating sequence (BINARY) */
8222 8222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 lastRowid; /* ROWID of most recent insert (see above) */
8223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 priorNewRowid; /* Last randomly generated ROWID */
8224 8223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 magic; /* Magic number for detect library misuse */
8225 8224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nChange; /* Value returned by sqlite3_changes() */
8226 8225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTotalChange; /* Value returned by sqlite3_total_changes() */
8227 8226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex *mutex; /* Connection mutex */
8228 8227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int aLimit[SQLITE_N_LIMIT]; /* Limits */
@@ -9354,10 +9353,26 @@
9354 9353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iParm; /* A parameter used by the eDest disposal method */
9355 9354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iMem; /* Base register where results are written */
9356 9355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMem; /* Number of registers allocated */
9357 9356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
9358 9357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
9359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** During code generation of statements that do inserts into AUTOINCREMENT
9360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tables, the following information is attached to the Table.u.autoInc.p
9361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pointer of each autoincrement table to record some side information that
9362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the code generator needs. We have to keep per-table autoincrement
9363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** information in case inserts are down within triggers. Triggers do not
9364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** normally coordinate their activities, but we do need to coordinate the
9365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** loading and saving of autoincrement information.
9366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
9367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct AutoincInfo {
9368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AutoincInfo *pNext; /* Next info block in a list of them all */
9369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab; /* Table this info block refers to */
9370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDb; /* Index in sqlite3.aDb[] of database holding pTab */
9371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regCtr; /* Memory register holding the rowid counter */
9372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
9373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
9359 9374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
9360 9375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Size of the column cache
9361 9376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
9362 9377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_N_COLCACHE
9363 9378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_N_COLCACHE 10
@@ -9420,10 +9435,11 @@
9420 9435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTableLock; /* Number of locks in aTableLock */
9421 9436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TableLock *aTableLock; /* Required table locks for shared-cache mode */
9422 9437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
9423 9438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRowid; /* Register holding rowid of CREATE TABLE entry */
9424 9439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRoot; /* Register holding root page number for new objects */
9440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */
9425 9441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9426 9442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Above is constant between recursions. Below is reset before and after
9427 9443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** each recursion */
9428 9444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9429 9445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVar; /* Number of '?' variables seen in the SQL so far */
@@ -9910,10 +9926,17 @@
9910 9926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3ViewGetColumnNames(A,B) 0
9911 9927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
9912 9928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9913 9929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int);
9914 9930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DeleteTable(Table*);
9931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_AUTOINCREMENT
9932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse);
9933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse);
9934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
9935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3AutoincrementBegin(X)
9936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3AutoincrementEnd(X)
9937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
9915 9938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
9916 9939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*);
9917 9940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*);
9918 9941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*);
9919 9942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int);
@@ -15212,11 +15235,11 @@
15212 15235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
15213 15236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
15214 15237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
15215 15238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Memory allocation functions used throughout sqlite.
15216 15239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
15217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: malloc.c,v 1.62 2009/05/03 20:23:54 drh Exp $
15240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: malloc.c,v 1.64 2009/06/27 00:48:33 drh Exp $
15218 15241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
15219 15242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
15220 15243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
15221 15244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine runs when the memory allocator sees that the
15222 15245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** total memory allocation is about to exceed the soft heap
@@ -15464,19 +15487,16 @@
15464 15487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocate memory. This routine is like sqlite3_malloc() except that it
15465 15488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** assumes the memory subsystem has already been initialized.
15466 15489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
15467 15490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3Malloc(int n){
15468 15491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p;
15469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n<=0 || NEVER(n>=0x7fffff00) ){
15470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The NEVER(n>=0x7fffff00) term is added out of paranoia. We want to make
15471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** absolutely sure that there is nothing within SQLite that can cause a
15472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** memory allocation of a number of bytes which is near the maximum signed
15473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** integer value and thus cause an integer overflow inside of the xMalloc()
15474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** implementation. The n>=0x7fffff00 gives us 255 bytes of headroom. The
15475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** test should never be true because SQLITE_MAX_LENGTH should be much
15476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** less than 0x7fffff00 and it should catch large memory allocations
15477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** before they reach this point. */
15492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n<=0 || n>=0x7fffff00 ){
15493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A memory allocation of a number of bytes which is near the maximum
15494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** signed integer value might cause an integer overflow inside of the
15495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xMalloc(). Hence we limit the maximum size to 0x7fffff00, giving
15496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 255 bytes of overhead. SQLite itself will never use anything near
15497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this amount. The only way to reach the limit is with sqlite3_malloc() */
15478 15498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = 0;
15479 15499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( sqlite3GlobalConfig.bMemstat ){
15480 15500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
15481 15501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mallocWithAlarm(n, &p);
15482 15502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
@@ -15674,14 +15694,17 @@
15674 15694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOld, nNew;
15675 15695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pNew;
15676 15696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOld==0 ){
15677 15697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3Malloc(nBytes);
15678 15698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
15679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nBytes<=0 || NEVER(nBytes>=0x7fffff00) ){
15680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The NEVER(...) term is explained in comments on sqlite3Malloc() */
15699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nBytes<=0 ){
15681 15700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pOld);
15682 15701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
15702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
15703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nBytes>=0x7fffff00 ){
15704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */
15705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
15683 15706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
15684 15707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOld = sqlite3MallocSize(pOld);
15685 15708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bMemstat ){
15686 15709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
15687 15710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
@@ -17977,11 +18000,11 @@
17977 18000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Utility functions used throughout sqlite.
17978 18001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
17979 18002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains functions for allocating memory, comparing
17980 18003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** strings, and stuff like that.
17981 18004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
17982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: util.c,v 1.260 2009/06/17 16:20:04 drh Exp $
18005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: util.c,v 1.261 2009/06/24 10:26:33 drh Exp $
17983 18006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17984 18007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_HAVE_ISNAN
17985 18008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <math.h>
17986 18009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
17987 18010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -17991,31 +18014,10 @@
17991 18014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_COVERAGE_TEST
17992 18015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Coverage(int x){
17993 18016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int dummy = 0;
17994 18017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dummy += x;
17995 18018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
17997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
17999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Routine needed to support the ALWAYS() and NEVER() macros.
18000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
18001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The argument to ALWAYS() should always be true and the argument
18002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to NEVER() should always be false. If either is not the case
18003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then this routine is called in order to throw an error.
18004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
18005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine only exists if assert() is operational. It always
18006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** throws an assert on its first invocation. The variable has a long
18007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** name to help the assert() message be more readable. The variable
18008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is used to prevent a too-clever optimizer from optimizing out the
18009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** entire call.
18010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
18011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef NDEBUG
18012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Assert(void){
18013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static volatile int ALWAYS_was_false_or_NEVER_was_true = 0;
18014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ALWAYS_was_false_or_NEVER_was_true ); /* Always fails */
18015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return ALWAYS_was_false_or_NEVER_was_true++; /* Not Reached */
18016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
18017 18019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
18018 18020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18019 18021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
18020 18022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the floating point value is Not a Number (NaN).
18021 18023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -30495,11 +30497,11 @@
30495 30497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is separate from the database file. The pager also implements file
30496 30498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** locking to prevent two processes from writing the same database
30497 30499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file simultaneously, or one process from reading the database while
30498 30500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** another is writing.
30499 30501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
30500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** @(#) $Id: pager.c,v 1.601 2009/06/22 05:43:24 danielk1977 Exp $
30502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** @(#) $Id: pager.c,v 1.603 2009/06/26 12:15:23 drh Exp $
30501 30503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
30502 30504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_DISKIO
30503 30505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30504 30506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
30505 30507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for troubleshooting. Normally turned off
@@ -31233,11 +31235,10 @@
31233 31235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff;
31234 31236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31235 31237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31236 31238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31237 31239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager);
31238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
31239 31240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31240 31241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31241 31242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Write the nRec Field - the number of page records that follow this
31242 31243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** journal header. Normally, zero is written to this value at this time.
31243 31244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** After the records are added to the journal (and the journal synced,
@@ -31259,12 +31260,14 @@
31259 31260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31260 31261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isOpen(pPager->fd) || pPager->noSync );
31261 31262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pPager->noSync) || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY)
31262 31263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND)
31263 31264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
31265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
31264 31266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff);
31265 31267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
31268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zHeader[0] = '\0';
31266 31269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put32bits(&zHeader[sizeof(aJournalMagic)], 0);
31267 31270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31268 31271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31269 31272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The random check-hash initialiser */
31270 31273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit);
@@ -31328,10 +31331,11 @@
31328 31331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned and *pNRec and *PDbSize are undefined. If JOURNAL_HDR_SZ bytes
31329 31332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cannot be read from the journal file an error code is returned.
31330 31333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31331 31334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int readJournalHdr(
31332 31335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pager *pPager, /* Pager object */
31336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isHot,
31333 31337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 journalSize, /* Size of the open journal file in bytes */
31334 31338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 *pNRec, /* OUT: Value read from the nRec field */
31335 31339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 *pDbSize /* OUT: Value of original database size field */
31336 31340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
31337 31341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* Return code */
@@ -31353,16 +31357,18 @@
31353 31357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Read in the first 8 bytes of the journal header. If they do not match
31354 31358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the magic string found at the start of each journal header, return
31355 31359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise,
31356 31360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** proceed.
31357 31361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff);
31359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ){
31360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
31361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
31362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){
31363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_DONE;
31362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isHot || iHdrOff!=pPager->journalHdr ){
31363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff);
31364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ){
31365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
31366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){
31368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_DONE;
31369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31364 31370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31365 31371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31366 31372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Read the first three 32-bit fields of the journal header: The nRec
31367 31373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** field, the checksum-initializer and the database size at the start
31368 31374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the transaction. Return an error code if anything goes wrong.
@@ -32453,11 +32459,11 @@
32453 32459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Read the next journal header from the journal file. If there are
32454 32460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not enough bytes left in the journal file for a complete header, or
32455 32461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it is corrupted, then a process must of failed while writing it.
32456 32462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This indicates nothing more needs to be rolled back.
32457 32463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = readJournalHdr(pPager, szJ, &nRec, &mxPg);
32464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg);
32459 32465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
32460 32466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_DONE ){
32461 32467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
32462 32468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32463 32469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto end_playback;
@@ -32673,11 +32679,11 @@
32673 32679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32674 32680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( rc==SQLITE_OK && pPager->journalOff<szJ ){
32675 32681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 ii; /* Loop counter */
32676 32682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 nJRec = 0; /* Number of Journal Records */
32677 32683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 dummy;
32678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = readJournalHdr(pPager, szJ, &nJRec, &dummy);
32684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = readJournalHdr(pPager, 0, szJ, &nJRec, &dummy);
32679 32685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc!=SQLITE_DONE );
32680 32686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32681 32687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
32682 32688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The "pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff"
32683 32689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test is related to ticket #2565. See the discussion in the
@@ -33236,16 +33242,10 @@
33236 33242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* Return code */
33237 33243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
33238 33244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isOpen(pPager->jfd) );
33239 33245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33240 33246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
33241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Variable iNRecOffset is set to the offset in the journal file
33242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the nRec field of the most recently written journal header.
33243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This field will be updated following the xSync() operation
33244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** on the journal file. */
33245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iNRecOffset = pPager->journalHdr + sizeof(aJournalMagic);
33246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
33247 33247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This block deals with an obscure problem. If the last connection
33248 33248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that wrote to this database was operating in persistent-journal
33249 33249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mode, then the journal file may at this point actually be larger
33250 33250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** than Pager.journalOff bytes. If the next thing in the journal
33251 33251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file happens to be a journal-header (written as part of the
@@ -33264,12 +33264,18 @@
33264 33264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Variable iNextHdrOffset is set to the offset at which this
33265 33265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** problematic header will occur, if it exists. aMagic is used
33266 33266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as a temporary buffer to inspect the first couple of bytes of
33267 33267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the potential journal header.
33268 33268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iNextHdrOffset = journalHdrOffset(pPager);
33269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iNextHdrOffset;
33270 33270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 aMagic[8];
33271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 zHeader[sizeof(aJournalMagic)+4];
33272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
33274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec);
33275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iNextHdrOffset = journalHdrOffset(pPager);
33271 33277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset);
33272 33278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){
33273 33279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const u8 zerobyte = 0;
33274 33280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset);
33275 33281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -33292,12 +33298,14 @@
33292 33298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
33293 33299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IOTRACE(("JSYNC %p\n", pPager))
33294 33300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsSync(pPager->jfd, pPager->sync_flags);
33295 33301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) return rc;
33296 33302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IOTRACE(("JHDR %p %lld %d\n", pPager, iNRecOffset, 4));
33298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = write32bits(pPager->jfd, iNRecOffset, pPager->nRec);
33303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr));
33304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsWrite(
33305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr
33306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
33299 33307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) return rc;
33300 33308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33301 33309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
33302 33310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
33303 33311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IOTRACE(("JSYNC %p\n", pPager))
@@ -35864,11 +35872,11 @@
35864 35872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you do good and not evil.
35865 35873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you find forgiveness for yourself and forgive others.
35866 35874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
35867 35875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35868 35876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
35869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: btreeInt.h,v 1.48 2009/06/22 12:05:10 drh Exp $
35877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: btreeInt.h,v 1.49 2009/06/24 05:40:34 danielk1977 Exp $
35870 35878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35871 35879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file implements a external (disk-based) database using BTrees.
35872 35880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For a detailed discussion of BTrees, refer to
35873 35881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35874 35882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3:
@@ -36330,13 +36338,10 @@
36330 36338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int skip; /* (skip<0) -> Prev() is a no-op. (skip>0) -> Next() is */
36331 36339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_INCRBLOB
36332 36340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 isIncrblobHandle; /* True if this cursor is an incr. io handle */
36333 36341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pgno *aOverflow; /* Cache of overflow page locations */
36334 36342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
36335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef NDEBUG
36336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 pagesShuffled; /* True if Btree pages are rearranged by balance()*/
36337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
36338 36343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 iPage; /* Index of current page in apPage */
36339 36344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */
36340 36345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 aiIdx[BTCURSOR_MAX_DEPTH]; /* Current index in apPage[i] */
36341 36346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
36342 36347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -36858,11 +36863,11 @@
36858 36863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you do good and not evil.
36859 36864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you find forgiveness for yourself and forgive others.
36860 36865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
36861 36866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36862 36867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
36863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: btree.c,v 1.639 2009/06/23 11:22:29 danielk1977 Exp $
36868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: btree.c,v 1.645 2009/06/26 16:32:13 shane Exp $
36864 36869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36865 36870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file implements a external (disk-based) database using BTrees.
36866 36871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See the header comment on "btreeInt.h" for additional information.
36867 36872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Including a description of file format and an overview of operation.
36868 36873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -37785,11 +37790,10 @@
37785 37790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
37786 37791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nByte <= (
37787 37792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
get2byte(&data[hdr+5])-(hdr+8+(pPage->leaf?0:4)+2*get2byte(&data[hdr+3]))
37788 37793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
37789 37794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->nFree -= (u16)nByte;
37791 37795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFrag = data[hdr+7];
37792 37796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nFrag>=60 ){
37793 37797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
defragmentPage(pPage);
37794 37798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
37795 37799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Search the freelist looking for a free slot big enough to satisfy
@@ -37864,11 +37868,11 @@
37864 37868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
37865 37869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pbegin>addr || pbegin==0 );
37866 37870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put2byte(&data[addr], start);
37867 37871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put2byte(&data[start], pbegin);
37868 37872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put2byte(&data[start+2], size);
37869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->nFree += (u16)size;
37873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->nFree = pPage->nFree + (u16)size;
37870 37874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37871 37875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Coalesce adjacent free blocks */
37872 37876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = pPage->hdrOffset + 1;
37873 37877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (pbegin = get2byte(&data[addr]))>0 ){
37874 37878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pnext, psize, x;
@@ -38963,14 +38967,14 @@
38963 38967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If there is a transaction in progress, this routine is a no-op.
38964 38968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38965 38969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void unlockBtreeIfUnused(BtShared *pBt){
38966 38970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pBt->mutex) );
38967 38971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pBt->inTransaction==TRANS_NONE && pBt->pCursor==0 && pBt->pPage1!=0 ){
38968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3PagerRefcount(pBt->pPager)>=1 ){
38969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pBt->pPage1->aData );
38970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- releasePage(pBt->pPage1);
38971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pBt->pPage1->aData );
38973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3PagerRefcount(pBt->pPager)==1 );
38974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pBt->pPage1->aData );
38975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ releasePage(pBt->pPage1);
38972 38976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt->pPage1 = 0;
38973 38977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38974 38978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38975 38979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38976 38980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -41961,11 +41965,11 @@
41961 41965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( end <= get2byte(&data[hdr+5]) );
41962 41966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if (idx+sz > pPage->pBt->usableSize) {
41963 41967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_CORRUPT_BKPT;
41964 41968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
41965 41969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->nCell++;
41966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->nFree -= 2;
41970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->nFree = pPage->nFree - (u16)(2 + sz);
41967 41971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip);
41968 41972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iChild ){
41969 41973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put4byte(&data[idx], iChild);
41970 41974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
41971 41975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=end-2, ptr=&data[j]; j>ins; j-=2, ptr-=2){
@@ -41977,11 +41981,11 @@
41977 41981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOVACUUM
41978 41982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPage->pBt->autoVacuum ){
41979 41983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The cell may contain a pointer to an overflow page. If so, write
41980 41984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the entry for the overflow page into the pointer map.
41981 41985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
41982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = ptrmapPutOvflPtr(pPage, pCell);
41986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return ptrmapPutOvflPtr(pPage, pCell);
41983 41987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
41984 41988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
41985 41989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
41986 41990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
41987 41991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
@@ -42186,10 +42190,59 @@
42186 42190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42187 42191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
42188 42192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42189 42193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
42190 42194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
42196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used to copy the contents of the b-tree node stored
42197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on page pFrom to page pTo. If page pFrom was not a leaf page, then
42198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the pointer-map entries for each child page are updated so that the
42199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parent page stored in the pointer map is page pTo. If pFrom contained
42200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** any cells with overflow page pointers, then the corresponding pointer
42201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** map entries are also updated so that the parent page is page pTo.
42202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If pFrom is currently carrying any overflow cells (entries in the
42204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** MemPage.aOvfl[] array), they are not copied to pTo.
42205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Before returning, page pTo is reinitialized using sqlite3BtreeInitPage().
42207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The performance of this function is not critical. It is only used by
42209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the balance_shallower() and balance_deeper() procedures, neither of
42210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** which are called often under normal circumstances.
42211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
42212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int copyNodeContent(MemPage *pFrom, MemPage *pTo){
42213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BtShared * const pBt = pFrom->pBt;
42214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 * const aFrom = pFrom->aData;
42215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 * const aTo = pTo->aData;
42216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int const iFromHdr = pFrom->hdrOffset;
42217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int const iToHdr = ((pTo->pgno==1) ? 100 : 0);
42218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
42219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iData;
42220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->isInit );
42222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFrom->nFree>=iToHdr );
42223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( get2byte(&aFrom[iFromHdr+5])<=pBt->usableSize );
42224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Copy the b-tree node content from page pFrom to page pTo. */
42226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iData = get2byte(&aFrom[iFromHdr+5]);
42227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData);
42228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell);
42229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Reinitialize page pTo so that the contents of the MemPage structure
42231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** match the new data. The initialization of pTo "cannot" fail, as the
42232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** data copied from pFrom is known to be valid. */
42233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTo->isInit = 0;
42234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TESTONLY(rc = ) sqlite3BtreeInitPage(pTo);
42235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc==SQLITE_OK );
42236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If this is an auto-vacuum database, update the pointer-map entries
42238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for any b-tree or overflow pages that pTo now contains the pointers to. */
42239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM ){
42240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = setChildPtrmaps(pTo);
42241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
42242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
42243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
42191 42244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42192 42245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
42193 42246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine redistributes cells on the iParentIdx'th child of pParent
42194 42247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (hereafter "the page") and up to 2 siblings so that all pages have about the
42195 42248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** same amount of free space. Usually a single sibling on either side of the
@@ -42230,21 +42283,22 @@
42230 42283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_NOMEM.
42231 42284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
42232 42285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int balance_nonroot(
42233 42286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pParent, /* Parent page of siblings being balanced */
42234 42287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iParentIdx, /* Index of "the page" in pParent */
42235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 *aOvflSpace /* page-size bytes of space for parent ovfl */
42288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *aOvflSpace, /* page-size bytes of space for parent ovfl */
42289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isRoot /* True if pParent is a root-page */
42236 42290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
42237 42291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtShared *pBt; /* The whole database */
42238 42292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell = 0; /* Number of cells in apCell[] */
42239 42293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMaxCells = 0; /* Allocated size of apCell, szCell, aFrom. */
42240 42294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nNew = 0; /* Number of pages in apNew[] */
42241 42295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOld; /* Number of pages in apOld[] */
42242 42296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j, k; /* Loop counters */
42243 42297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nxDiv; /* Next divider slot in pParent->aCell[] */
42244 42298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* The return code */
42245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int leafCorrection; /* 4 if pPage is a leaf. 0 if not */
42299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 leafCorrection; /* 4 if pPage is a leaf. 0 if not */
42246 42300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int leafData; /* True if pPage is a leaf of a LEAFDATA tree */
42247 42301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int usableSpace; /* Bytes in pPage beyond the header */
42248 42302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pageFlags; /* Value of pPage->aData[0] */
42249 42303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int subtotal; /* Subtotal of bytes in cells on one page */
42250 42304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSpace1 = 0; /* First unused byte of aSpace1[] */
@@ -42409,11 +42463,11 @@
42409 42463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
apCell[nCell] = findOverflowCell(pOld, j);
42410 42464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
42411 42465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCell++;
42412 42466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42413 42467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<nOld-1 && !leafData){
42414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u16 sz = szNew[i];
42468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 sz = (u16)szNew[i];
42415 42469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pTemp;
42416 42470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nCell<nMaxCells );
42417 42471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
szCell[nCell] = sz;
42418 42472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTemp = &aSpace1[iSpace1];
42419 42473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSpace1 += sz;
@@ -42420,11 +42474,11 @@
42420 42474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sz<=pBt->pageSize/4 );
42421 42475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iSpace1<=pBt->pageSize );
42422 42476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pTemp, apDiv[i], sz);
42423 42477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
apCell[nCell] = pTemp+leafCorrection;
42424 42478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( leafCorrection==0 || leafCorrection==4 );
42425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- szCell[nCell] -= (u16)leafCorrection;
42479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szCell[nCell] = szCell[nCell] - leafCorrection;
42426 42480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pOld->leaf ){
42427 42481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( leafCorrection==0 );
42428 42482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOld->hdrOffset==0 );
42429 42483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The right pointer of the child page pOld becomes the left
42430 42484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointer of the divider cell */
@@ -42618,11 +42672,12 @@
42618 42672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = cntNew[i];
42619 42673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42620 42674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the sibling page assembled above was not the right-most sibling,
42621 42675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** insert a divider cell into the parent page.
42622 42676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
42623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<nNew-1 && j<nCell ){
42677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( i<nNew-1 || j==nCell );
42678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( j<nCell ){
42624 42679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pCell;
42625 42680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pTemp;
42626 42681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sz;
42627 42682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42628 42683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( j<nMaxCells );
@@ -42678,42 +42733,64 @@
42678 42733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pageFlags & PTF_LEAF)==0 ){
42679 42734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *zChild = &apCopy[nOld-1]->aData[8];
42680 42735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&apNew[nNew-1]->aData[8], zChild, 4);
42681 42736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42682 42737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Fix the pointer-map entries for all the cells that were shifted around.
42684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** There are several different types of pointer-map entries that need to
42685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be dealt with by this routine. Some of these have been set already, but
42686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** many have not. The following is a summary:
42687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 1) The entries associated with new sibling pages that were not
42689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** siblings when this function was called. These have already
42690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** been set. We don't need to worry about old siblings that were
42691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** moved to the free-list - the freePage() code has taken care
42692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of those.
42693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 2) The pointer-map entries associated with the first overflow
42695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** page in any overflow chains used by new divider cells. These
42696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** have also already been taken care of by the insertCell() code.
42697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 3) If the sibling pages are not leaves, then the child pages of
42699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cells stored on the sibling pages may need to be updated.
42700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 4) If the sibling pages are not internal intkey nodes, then any
42702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** overflow pages used by these cells may need to be updated
42703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (internal intkey nodes never contain pointers to overflow pages).
42704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 5) If the sibling pages are not leaves, then the pointer-map
42706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** entries for the right-child pages of each sibling may need
42707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to be updated.
42708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Cases 1 and 2 are dealt with above by other code. The following
42710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** block deals with cases 3 and 4. Since setting a pointer map entry
42711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is a relatively expensive operation, this code only sets pointer
42712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** map entries for child or overflow pages that have actually moved
42713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** between pages. */
42714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
42738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
42739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The root page of the b-tree now contains no cells. The only sibling
42740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page is the right-child of the parent. Copy the contents of the
42741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** child page into the parent, decreasing the overall height of the
42742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** b-tree structure by one. This is described as the "balance-shallower"
42743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sub-algorithm in some documentation.
42744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If this is an auto-vacuum database, the call to copyNodeContent()
42746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sets all pointer-map entries corresponding to database image pages
42747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for which the pointer is stored within the content being copied.
42748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The second assert below verifies that the child page is defragmented
42750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (it must be, as it was just reconstructed using assemblePage()). This
42751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is important if the parent page happens to be page 1 of the database
42752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** image. */
42753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nNew==1 );
42754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( apNew[0]->nFree ==
42755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)
42756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
42757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( SQLITE_OK==(rc = copyNodeContent(apNew[0], pParent)) ){
42758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = freePage(apNew[0]);
42759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
42760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( ISAUTOVACUUM ){
42761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Fix the pointer-map entries for all the cells that were shifted around.
42762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There are several different types of pointer-map entries that need to
42763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be dealt with by this routine. Some of these have been set already, but
42764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** many have not. The following is a summary:
42765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1) The entries associated with new sibling pages that were not
42767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** siblings when this function was called. These have already
42768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** been set. We don't need to worry about old siblings that were
42769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** moved to the free-list - the freePage() code has taken care
42770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of those.
42771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2) The pointer-map entries associated with the first overflow
42773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page in any overflow chains used by new divider cells. These
42774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have also already been taken care of by the insertCell() code.
42775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3) If the sibling pages are not leaves, then the child pages of
42777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cells stored on the sibling pages may need to be updated.
42778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 4) If the sibling pages are not internal intkey nodes, then any
42780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** overflow pages used by these cells may need to be updated
42781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (internal intkey nodes never contain pointers to overflow pages).
42782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 5) If the sibling pages are not leaves, then the pointer-map
42784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** entries for the right-child pages of each sibling may need
42785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be updated.
42786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Cases 1 and 2 are dealt with above by other code. The next
42788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** block deals with cases 3 and 4 and the one after that, case 5. Since
42789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** setting a pointer map entry is a relatively expensive operation, this
42790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** code only sets pointer map entries for child or overflow pages that have
42791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** actually moved between pages. */
42715 42792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pNew = apNew[0];
42716 42793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pOld = apCopy[0];
42717 42794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOverflow = pOld->nOverflow;
42718 42795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iNextOld = pOld->nCell + nOverflow;
42719 42796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iOverflow = (nOverflow ? pOld->aOvfl[0].idx : -1);
@@ -42787,11 +42864,11 @@
42787 42864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42788 42865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42789 42866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParent->isInit );
42790 42867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
42791 42868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOld, nNew, nCell));
42792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42793 42870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
42794 42871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Cleanup before returning.
42795 42872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
42796 42873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
balance_cleanup:
42797 42874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ScratchFree(apCell);
@@ -42800,113 +42877,10 @@
42800 42877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42801 42878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nNew; i++){
42802 42879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
releasePage(apNew[i]);
42803 42880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42804 42881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
42806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
42809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This function is used to copy the contents of the b-tree node stored
42810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** on page pFrom to page pTo. If page pFrom was not a leaf page, then
42811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the pointer-map entries for each child page are updated so that the
42812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** parent page stored in the pointer map is page pTo. If pFrom contained
42813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** any cells with overflow page pointers, then the corresponding pointer
42814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** map entries are also updated so that the parent page is page pTo.
42815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If pFrom is currently carrying any overflow cells (entries in the
42817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** MemPage.aOvfl[] array), they are not copied to pTo.
42818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Before returning, page pTo is reinitialized using sqlite3BtreeInitPage().
42820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The performance of this function is not critical. It is only used by
42822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the balance_shallower() and balance_deeper() procedures, neither of
42823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** which are called often under normal circumstances.
42824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
42825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int copyNodeContent(MemPage *pFrom, MemPage *pTo){
42826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- BtShared * const pBt = pFrom->pBt;
42827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 * const aFrom = pFrom->aData;
42828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 * const aTo = pTo->aData;
42829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int const iFromHdr = pFrom->hdrOffset;
42830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int const iToHdr = ((pTo->pgno==1) ? 100 : 0);
42831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK;
42832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iData;
42833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->isInit );
42835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFrom->nFree>=iToHdr );
42836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( get2byte(&aFrom[iFromHdr+5])<=pBt->usableSize );
42837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Copy the b-tree node content from page pFrom to page pTo. */
42839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iData = get2byte(&aFrom[iFromHdr+5]);
42840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData);
42841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell);
42842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Reinitialize page pTo so that the contents of the MemPage structure
42844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** match the new data. The initialization of pTo "cannot" fail, as the
42845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** data copied from pFrom is known to be valid. */
42846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTo->isInit = 0;
42847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- TESTONLY(rc = ) sqlite3BtreeInitPage(pTo);
42848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( rc==SQLITE_OK );
42849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If this is an auto-vacuum database, update the pointer-map entries
42851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for any b-tree or overflow pages that pTo now contains the pointers to. */
42852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
42853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = setChildPtrmaps(pTo);
42854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
42856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
42859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine is called on the root page of a btree when the root
42860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** page contains no cells. This is an opportunity to make the tree
42861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** shallower by one level.
42862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
42863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int balance_shallower(MemPage *pRoot){
42864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The root page is empty but has one child. Transfer the
42865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** information from that one child into the root page if it
42866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** will fit. This reduces the depth of the tree by one.
42867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the root page is page 1, it has less space available than
42869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** its child (due to the 100 byte header that occurs at the beginning
42870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the database fle), so it might not be able to hold all of the
42871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** information currently contained in the child. If this is the
42872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** case, then do not do the transfer. Leave page 1 empty except
42873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for the right-pointer to the child page. The child page becomes
42874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the virtual root of the tree.
42875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
42876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK; /* Return code */
42877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int const hdr = pRoot->hdrOffset; /* Offset of root page header */
42878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MemPage *pChild; /* Only child of pRoot */
42879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Pgno const pgnoChild = get4byte(&pRoot->aData[pRoot->hdrOffset+8]);
42880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pRoot->nCell==0 );
42882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3_mutex_held(pRoot->pBt->mutex) );
42883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( !pRoot->leaf );
42884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pgnoChild>0 );
42885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pgnoChild<=pagerPagecount(pRoot->pBt) );
42886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( hdr==0 || pRoot->pgno==1 );
42887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeGetPage(pRoot->pBt, pgnoChild, &pChild, 0);
42889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
42890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pChild->nFree>=hdr ){
42891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( hdr ){
42892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = defragmentPage(pChild);
42893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
42895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = copyNodeContent(pChild, pRoot);
42896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
42898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = freePage(pChild);
42899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
42901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The child has more information that will fit on the root.
42902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The tree is already balanced. Do nothing. */
42903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- TRACE(("BALANCE: child %d will not fit on page 1\n", pChild->pgno));
42904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- releasePage(pChild);
42906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
42907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
42908 42882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
42909 42883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
42910 42884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42911 42885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42912 42886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -42974,18 +42948,12 @@
42974 42948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** some way. This function figures out if this modification means the
42975 42949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tree needs to be balanced, and if so calls the appropriate balancing
42976 42950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routine. Balancing routines are:
42977 42951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
42978 42952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** balance_quick()
42979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** balance_shallower()
42980 42953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** balance_deeper()
42981 42954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** balance_nonroot()
42982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
42983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If built with SQLITE_DEBUG, pCur->pagesShuffled is set to true if
42984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** balance_shallower(), balance_deeper() or balance_nonroot() is called.
42985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If none of these functions are invoked, pCur->pagesShuffled is left
42986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** unmodified.
42987 42955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
42988 42956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int balance(BtCursor *pCur){
42989 42957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
42990 42958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int nMin = pCur->pBt->usableSize * 2 / 3;
42991 42959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 aBalanceQuickSpace[13];
@@ -43011,25 +42979,11 @@
43011 42979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->iPage = 1;
43012 42980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->aiIdx[0] = 0;
43013 42981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->aiIdx[1] = 0;
43014 42982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCur->apPage[1]->nOverflow );
43015 42983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
43016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VVA_ONLY( pCur->pagesShuffled = 1 );
43017 42984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
43018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The root page of the b-tree is now empty. If the root-page is not
43019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** also a leaf page, it will have a single child page. Call
43020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** balance_shallower to attempt to copy the contents of the single
43021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** child-page into the root page (this may not be possible if the
43022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** root page is page 1).
43023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
43024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Whether or not this is possible , the tree is now balanced.
43025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Therefore is no next iteration of the do-loop.
43026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
43027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pPage->nCell==0 && !pPage->leaf ){
43028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = balance_shallower(pPage);
43029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VVA_ONLY( pCur->pagesShuffled = 1 );
43030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
43031 42985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
43032 42986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
43033 42987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){
43034 42988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
43035 42989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -43079,11 +43033,11 @@
43079 43033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the previous call, as the overflow cell data will have been
43080 43034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** copied either into the body of a database page or into the new
43081 43035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pSpace buffer passed to the latter call to balance_nonroot().
43082 43036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
43083 43037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize);
43084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = balance_nonroot(pParent, iIdx, pSpace);
43038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1);
43085 43039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFree ){
43086 43040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If pFree is not NULL, it points to the pSpace buffer used
43087 43041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by a previous call to balance_nonroot(). Its contents are
43088 43042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** now stored either on real database pages or within the
43089 43043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** new pSpace buffer, so it may be safely freed here. */
@@ -43092,11 +43046,10 @@
43092 43046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
43093 43047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The pSpace buffer will be freed after the next call to
43094 43048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** balance_nonroot(), or just before this function returns, whichever
43095 43049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comes first. */
43096 43050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFree = pSpace;
43097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VVA_ONLY( pCur->pagesShuffled = 1 );
43098 43051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
43099 43052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
43100 43053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
43101 43054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->nOverflow = 0;
43102 43055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -45290,11 +45243,11 @@
45290 45243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains code use to manipulate "Mem" structure. A "Mem"
45291 45244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** stores a single value in the VDBE. Mem is an opaque structure visible
45292 45245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** only within the VDBE. Interface routines refer to a Mem using the
45293 45246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name sqlite_value
45294 45247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
45295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: vdbemem.c,v 1.149 2009/06/22 19:05:41 drh Exp $
45248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: vdbemem.c,v 1.150 2009/06/25 01:47:12 drh Exp $
45296 45249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
45297 45250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
45298 45251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
45299 45252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*)
45300 45253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P if required.
@@ -45369,11 +45322,11 @@
45369 45322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(pMem->db, pMem->zMalloc);
45370 45323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
45371 45324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45372 45325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45373 45326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
45374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( preserve && pMem->z && pMem->zMalloc && pMem->z!=pMem->zMalloc ){
45327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){
45375 45328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pMem->zMalloc, pMem->z, pMem->n);
45376 45329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45377 45330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pMem->flags&MEM_Dyn && pMem->xDel ){
45378 45331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->xDel((void *)(pMem->z));
45379 45332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -45518,11 +45471,11 @@
45518 45471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return SQLITE_ERROR if the finalizer reports an error. SQLITE_OK
45519 45472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** otherwise.
45520 45473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
45521 45474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
45522 45475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
45523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFunc && pFunc->xFinalize ){
45476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(pFunc && pFunc->xFinalize) ){
45524 45477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context ctx;
45525 45478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
45526 45479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
45527 45480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&ctx, 0, sizeof(ctx));
45528 45481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.s.flags = MEM_Null;
@@ -45531,11 +45484,11 @@
45531 45484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.pFunc = pFunc;
45532 45485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFunc->xFinalize(&ctx);
45533 45486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
45534 45487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(pMem->db, pMem->zMalloc);
45535 45488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pMem, &ctx.s, sizeof(ctx.s));
45536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = (ctx.isError?SQLITE_ERROR:SQLITE_OK);
45489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = ctx.isError;
45537 45490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45538 45491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
45539 45492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45540 45493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
45541 45494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -45806,16 +45759,13 @@
45806 45759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** empty boolean index.
45807 45760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
45808 45761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){
45809 45762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pMem->db;
45810 45763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db!=0 );
45811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pMem->flags & MEM_RowSet ){
45812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3RowSetClear(pMem->u.pRowSet);
45813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
45814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemRelease(pMem);
45815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
45816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
45764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pMem->flags & MEM_RowSet)==0 );
45765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemRelease(pMem);
45766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
45817 45767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
45818 45768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->flags = MEM_Null;
45819 45769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
45820 45770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pMem->zMalloc );
45821 45771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc,
@@ -46153,11 +46103,11 @@
46153 46103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
46154 46104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zData = (char *)sqlite3BtreeDataFetch(pCur, &available);
46155 46105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46156 46106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zData!=0 );
46157 46107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( offset+amt<=available && ((pMem->flags&MEM_Dyn)==0 || pMem->xDel) ){
46108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){
46159 46109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemRelease(pMem);
46160 46110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->z = &zData[offset];
46161 46111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->flags = MEM_Blob|MEM_Ephem;
46162 46112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){
46163 46113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term;
@@ -46370,11 +46320,11 @@
46370 46320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains code used for creating, destroying, and populating
46371 46321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) Prior
46372 46322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to version 2.8.7, all this code was combined into the vdbe.c source file.
46373 46323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** But that file was getting too big so this subroutines were split out.
46374 46324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
46375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: vdbeaux.c,v 1.464 2009/06/23 14:15:04 drh Exp $
46325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: vdbeaux.c,v 1.467 2009/06/26 16:32:13 shane Exp $
46376 46326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46377 46327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46378 46328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46379 46329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46380 46330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -46499,11 +46449,11 @@
46499 46449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = p->nOp;
46500 46450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->magic==VDBE_MAGIC_INIT );
46501 46451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( op>0 && op<0xff );
46502 46452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nOpAlloc<=i ){
46503 46453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( growOpArray(p) ){
46504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
46454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
46505 46455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46506 46456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46507 46457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nOp++;
46508 46458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp = &p->aOp[i];
46509 46459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->opcode = (u8)op;
@@ -46704,11 +46654,11 @@
46704 46654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->magic==VDBE_MAGIC_INIT );
46705 46655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){
46706 46656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
46707 46657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46708 46658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = p->nOp;
46709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nOp>0 ){
46659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(nOp>0) ){
46710 46660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
46711 46661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOpList const *pIn = aOp;
46712 46662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nOp; i++, pIn++){
46713 46663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int p2 = pIn->p2;
46714 46664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pOut = &p->aOp[i+addr];
@@ -46740,44 +46690,47 @@
46740 46690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is useful when a large program is loaded from a
46741 46691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** static array using sqlite3VdbeAddOpList but we want to make a
46742 46692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** few minor changes to the program.
46743 46693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46744 46694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
46745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p==0 || p->magic==VDBE_MAGIC_INIT );
46746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p && addr>=0 && p->nOp>addr && p->aOp ){
46695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
46696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( addr>=0 );
46697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nOp>addr ){
46747 46698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp[addr].p1 = val;
46748 46699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46749 46700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46750 46701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46751 46702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
46752 46703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the value of the P2 operand for a specific instruction.
46753 46704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is useful for setting a jump destination.
46754 46705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46755 46706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
46756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p==0 || p->magic==VDBE_MAGIC_INIT );
46757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p && addr>=0 && p->nOp>addr && p->aOp ){
46707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
46708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( addr>=0 );
46709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nOp>addr ){
46758 46710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp[addr].p2 = val;
46759 46711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46760 46712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46761 46713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46762 46714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
46763 46715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the value of the P3 operand for a specific instruction.
46764 46716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46765 46717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){
46766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p==0 || p->magic==VDBE_MAGIC_INIT );
46767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p && addr>=0 && p->nOp>addr && p->aOp ){
46718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
46719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( addr>=0 );
46720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nOp>addr ){
46768 46721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp[addr].p3 = val;
46769 46722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46770 46723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46771 46724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46772 46725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
46773 46726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the value of the P5 operand for the most recently
46774 46727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** added operation.
46775 46728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46776 46729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){
46777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p==0 || p->magic==VDBE_MAGIC_INIT );
46778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p && p->aOp ){
46730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
46731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->aOp ){
46779 46732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nOp>0 );
46780 46733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp[p->nOp-1].p5 = val;
46781 46734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46782 46735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46783 46736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -46793,11 +46746,11 @@
46793 46746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
46794 46747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the input FuncDef structure is ephemeral, then free it. If
46795 46748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the FuncDef is not ephermal, then do nothing.
46796 46749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46797 46750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
46798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pDef && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){
46751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(pDef) && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){
46799 46752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, pDef);
46800 46753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46801 46754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46802 46755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46803 46756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -46838,11 +46791,11 @@
46838 46791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46839 46792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
46840 46793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change N opcodes starting at addr to No-ops.
46841 46794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46842 46795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr, int N){
46843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p && p->aOp ){
46796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->aOp ){
46844 46797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pOp = &p->aOp[addr];
46845 46798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = p->db;
46846 46799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( N-- ){
46847 46800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeP4(db, pOp->p4type, pOp->p4.p);
46848 46801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pOp, 0, sizeof(pOp[0]));
@@ -46887,14 +46840,14 @@
46887 46840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if (n != P4_KEYINFO) {
46888 46841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeP4(db, n, (void*)*(char**)&zP4);
46889 46842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46890 46843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
46891 46844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->nOp>0 );
46892 46846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( addr<p->nOp );
46893 46847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( addr<0 ){
46894 46848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = p->nOp - 1;
46895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( addr<0 ) return;
46896 46849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46897 46850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp = &p->aOp[addr];
46898 46851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeP4(db, pOp->p4type, pOp->p4.p);
46899 46852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p4.p = 0;
46900 46853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n==P4_INT32 ){
@@ -47498,13 +47451,13 @@
47498 47451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
47499 47452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCsr = p->pFree;
47500 47453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zEnd = &zCsr[nByte];
47501 47454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( nByte && !db->mallocFailed );
47502 47455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
47503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nCursor = nCursor;
47456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nCursor = (u16)nCursor;
47504 47457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->aVar ){
47505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nVar = nVar;
47458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nVar = (u16)nVar;
47506 47459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(n=0; n<nVar; n++){
47507 47460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aVar[n].flags = MEM_Null;
47508 47461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aVar[n].db = db;
47509 47462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
47510 47463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -47632,11 +47585,11 @@
47632 47585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = p->db;
47633 47586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
47634 47587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
47635 47588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, p->aColName);
47636 47589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = nResColumn*COLNAME_N;
47637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nResColumn = nResColumn;
47590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nResColumn = (u16)nResColumn;
47638 47591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aColName = pColName = (Mem*)sqlite3DbMallocZero(db, sizeof(Mem)*n );
47639 47592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->aColName==0 ) return;
47640 47593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( n-- > 0 ){
47641 47594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColName->flags = MEM_Null;
47642 47595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColName->db = p->db;
@@ -47685,10 +47638,17 @@
47685 47638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int vdbeCommit(sqlite3 *db, Vdbe *p){
47686 47639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
47687 47640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTrans = 0; /* Number of databases with an active write-transaction */
47688 47641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
47689 47642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int needXcommit = 0;
47643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
47644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_VIRTUALTABLE
47645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* With this option, sqlite3VtabSync() is defined to be simply
47646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK so p is not used.
47647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
47648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(p);
47649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
47690 47650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
47691 47651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Before doing anything else, call the xSync() callback for any
47692 47652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** virtual module tables written in this transaction. This has to
47693 47653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be done before determining whether a master journal file is
47694 47654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** required, as an xSync() callback may add an attached database
@@ -48792,26 +48752,25 @@
48792 48752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nField = u;
48793 48753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (void*)p;
48794 48754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
48795 48755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
48796 48756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
48797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine destroys a UnpackedRecord object
48757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine destroys a UnpackedRecord object.
48798 48758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
48799 48759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeDeleteUnpackedRecord(UnpackedRecord *p){
48800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p ){
48801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->flags & UNPACKED_NEED_DESTROY ){
48802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
48803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Mem *pMem;
48804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0, pMem=p->aMem; i<p->nField; i++, pMem++){
48805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pMem->zMalloc ){
48806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemRelease(pMem);
48807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
48808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
48809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
48810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->flags & UNPACKED_NEED_FREE ){
48811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(p->pKeyInfo->db, p);
48812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
48760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
48761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Mem *pMem;
48762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
48763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
48764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->flags & UNPACKED_NEED_DESTROY );
48765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0, pMem=p->aMem; i<p->nField; i++, pMem++){
48766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pMem->zMalloc ){
48767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemRelease(pMem);
48768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
48769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
48770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->flags & UNPACKED_NEED_FREE ){
48771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(p->pKeyInfo->db, p);
48813 48772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
48814 48773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
48815 48774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
48816 48775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
48817 48776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function compares the two table rows or index records
@@ -48940,15 +48899,15 @@
48940 48899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 typeRowid; /* Serial type of the rowid */
48941 48900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 lenRowid; /* Size of the rowid */
48942 48901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem m, v;
48943 48902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
48944 48903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Get the size of the index entry. Only indices entries of less
48945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** than 2GiB are support - anything large must be database corruption */
48904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than 2GiB are support - anything large must be database corruption.
48905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so
48906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this code can safely assume that nCellKey is 32-bits */
48946 48907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeKeySize(pCur, &nCellKey);
48947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( unlikely(nCellKey<=0 || nCellKey>0x7fffffff) ){
48948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_CORRUPT_BKPT;
48949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
48908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey );
48950 48909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
48951 48910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Read in the complete content of the index entry */
48952 48911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m.flags = 0;
48953 48912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m.db = db;
48954 48913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m.zMalloc = 0;
@@ -48957,13 +48916,13 @@
48957 48916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
48958 48917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
48959 48918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
48960 48919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The index entry must begin with a header size */
48961 48920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void)getVarint32((u8*)m.z, szHdr);
48962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( szHdr==2 );
48921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( szHdr==3 );
48963 48922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( szHdr==m.n );
48964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( unlikely(szHdr<2 || (int)szHdr>m.n) ){
48923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( unlikely(szHdr<3 || (int)szHdr>m.n) ){
48965 48924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto idx_rowid_corruption;
48966 48925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
48967 48926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
48968 48927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The last field of the index should be an integer - the ROWID.
48969 48928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Verify that the last entry really is an integer. */
@@ -49098,11 +49057,11 @@
49098 49057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
49099 49058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
49100 49059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains code use to implement APIs that are part of the
49101 49060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** VDBE.
49102 49061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
49103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: vdbeapi.c,v 1.166 2009/06/19 14:06:03 drh Exp $
49062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: vdbeapi.c,v 1.167 2009/06/25 01:47:12 drh Exp $
49104 49063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
49105 49064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49106 49065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_DEPRECATED
49107 49066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
49108 49067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return TRUE (non-zero) of the statement supplied as an argument needs
@@ -49238,20 +49197,35 @@
49238 49197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49239 49198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49240 49199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**************************** sqlite3_result_ *******************************
49241 49200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following routines are used by user-defined functions to specify
49242 49201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the function result.
49202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
49203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
49204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** result as a string or blob but if the string or blob is too large, it
49205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then sets the error code to SQLITE_TOOBIG
49243 49206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
49207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void setResultStrOrError(
49208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx, /* Function context */
49209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z, /* String pointer */
49210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n, /* Bytes in string, or negative */
49211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 enc, /* Encoding of z. 0 for BLOBs */
49212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDel)(void*) /* Destructor function */
49213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
49214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
49215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_toobig(pCtx);
49216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
49217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
49244 49218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_blob(
49245 49219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *pCtx,
49246 49220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *z,
49247 49221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
49248 49222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
49249 49223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
49250 49224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( n>=0 );
49251 49225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
49252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemSetStr(&pCtx->s, z, n, 0, xDel);
49226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n, 0, xDel);
49253 49227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49254 49228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
49255 49229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
49256 49230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
49257 49231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -49284,39 +49258,39 @@
49284 49258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z,
49285 49259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
49286 49260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
49287 49261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
49288 49262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
49289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, xDel);
49263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
49290 49264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49291 49265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_UTF16
49292 49266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_text16(
49293 49267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *pCtx,
49294 49268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *z,
49295 49269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
49296 49270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
49297 49271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
49298 49272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
49299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, xDel);
49273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
49300 49274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49301 49275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_text16be(
49302 49276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *pCtx,
49303 49277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *z,
49304 49278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
49305 49279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
49306 49280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
49307 49281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
49308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16BE, xDel);
49282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
49309 49283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49310 49284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_text16le(
49311 49285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *pCtx,
49312 49286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *z,
49313 49287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
49314 49288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
49315 49289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
49316 49290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
49317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16LE, xDel);
49291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
49318 49292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49319 49293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_UTF16 */
49320 49294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
49321 49295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
49322 49296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemCopy(&pCtx->s, pValue);
@@ -50319,11 +50293,11 @@
50319 50293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** documentation, headers files, or other derived files. The formatting
50320 50294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the code in this file is, therefore, important. See other comments
50321 50295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in this file for details. If in doubt, do not deviate from existing
50322 50296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** commenting and indentation practices when changing or adding code.
50323 50297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
50324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: vdbe.c,v 1.862 2009/06/23 14:15:04 drh Exp $
50298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: vdbe.c,v 1.866 2009/06/26 16:32:13 shane Exp $
50325 50299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
50326 50300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
50327 50301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
50328 50302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following global variable is incremented every time a cursor
50329 50303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test
@@ -51615,11 +51589,11 @@
51615 51589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is the same as executing Halt.
51616 51590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
51617 51591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Halt: {
51618 51592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->rc = pOp->p1;
51619 51593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pc = pc;
51620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->errorAction = pOp->p2;
51594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->errorAction = (u8)pOp->p2;
51621 51595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p4.z ){
51622 51596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z);
51623 51597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51624 51598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeHalt(p);
51625 51599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_BUSY || rc==SQLITE_OK );
@@ -52816,10 +52790,11 @@
52816 52790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&u.am.sMem, 0, sizeof(u.am.sMem));
52817 52791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.p1<p->nCursor );
52818 52792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>0 && pOp->p3<=p->nMem );
52819 52793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pDest = &p->aMem[pOp->p3];
52820 52794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemSetTypeFlag(u.am.pDest, MEM_Null);
52795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.zRec = 0;
52821 52796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52822 52797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This block sets the variable u.am.payloadSize to be the total number of
52823 52798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bytes in the record.
52824 52799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
52825 52800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** u.am.zRec is set to be the complete text of the record if it is available.
@@ -52834,16 +52809,15 @@
52834 52809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pC = p->apCsr[u.am.p1];
52835 52810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.pC!=0 );
52836 52811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
52837 52812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.pC->pVtabCursor==0 );
52838 52813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
52839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.am.pC->pCursor!=0 ){
52814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.pCrsr = u.am.pC->pCursor;
52815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( u.am.pCrsr!=0 ){
52840 52816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The record is stored in a B-Tree */
52841 52817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeCursorMoveto(u.am.pC);
52842 52818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) goto abort_due_to_error;
52843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.am.zRec = 0;
52844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.am.pCrsr = u.am.pC->pCursor;
52845 52819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.pC->nullRow ){
52846 52820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = 0;
52847 52821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( u.am.pC->cacheStatus==p->cacheCtr ){
52848 52822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = u.am.pC->payloadSize;
52849 52823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.zRec = (char*)u.am.pC->aRow;
@@ -52855,19 +52829,16 @@
52855 52829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (u.am.payloadSize64 & SQLITE_MAX_U32)==(u64)u.am.payloadSize64 );
52856 52830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = (u32)u.am.payloadSize64;
52857 52831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
52858 52832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeDataSize(u.am.pCrsr, &u.am.payloadSize);
52859 52833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
52860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.am.nField = u.am.pC->nField;
52861 52834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( u.am.pC->pseudoTable ){
52862 52835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The record is the sole entry of a pseudo-table */
52863 52836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = u.am.pC->nData;
52864 52837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.zRec = u.am.pC->pData;
52865 52838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pC->cacheStatus = CACHE_STALE;
52866 52839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.payloadSize==0 || u.am.zRec!=0 );
52867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.am.nField = u.am.pC->nField;
52868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.am.pCrsr = 0;
52869 52840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
52870 52841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Consider the row to be NULL */
52871 52842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = 0;
52872 52843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
52873 52844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -52879,10 +52850,11 @@
52879 52850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 );
52880 52851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
52881 52852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto too_big;
52882 52853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
52883 52854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.nField = u.am.pC->nField;
52884 52856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.p2<u.am.nField );
52885 52857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52886 52858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Read and parse the table header. Store the results of the parse
52887 52859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into the record header cache fields of the cursor.
52888 52860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -54478,11 +54450,11 @@
54478 54450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeSetCachedRowid(u.bf.pC->pCursor, u.bf.v<MAX_ROWID ? u.bf.v+1 : 0);
54479 54451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54480 54452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.bf.pC->useRandomRowid ){
54481 54453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is
54482 54454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an AUTOINCREMENT table. */
54483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.bf.v = db->priorNewRowid;
54455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.bf.v = db->lastRowid;
54484 54456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.cnt = 0;
54485 54457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
54486 54458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.bf.cnt==0 && (u.bf.v&0xffffff)==u.bf.v ){
54487 54459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.v++;
54488 54460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -54490,11 +54462,10 @@
54490 54462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.bf.cnt<5 ) u.bf.v &= 0xffffff;
54491 54463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54492 54464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeMovetoUnpacked(u.bf.pC->pCursor, 0, (u64)u.bf.v, 0, &u.bf.res);
54493 54465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.cnt++;
54494 54466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( u.bf.cnt<100 && rc==SQLITE_OK && u.bf.res==0 );
54495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->priorNewRowid = u.bf.v;
54496 54467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && u.bf.res==0 ){
54497 54468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_FULL;
54498 54469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto abort_due_to_error;
54499 54470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54500 54471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -55359,11 +55330,11 @@
55359 55330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can result in a "no such table: sqlite_master" or "malformed
55360 55331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database schema" error being returned to the user.
55361 55332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
55362 55333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeHoldsMutex(db->aDb[u.bv.iDb].pBt) );
55363 55334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeEnterAll(db);
55364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pOp->p2 || ALWAYS(DbHasProperty(db, u.bv.iDb, DB_SchemaLoaded)) ){
55335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOp->p2 || DbHasProperty(db, u.bv.iDb, DB_SchemaLoaded) ){
55365 55336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bv.zMaster = SCHEMA_TABLE(u.bv.iDb);
55366 55337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bv.initData.db = db;
55367 55338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bv.initData.iDb = pOp->p1;
55368 55339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bv.initData.pzErrMsg = &p->zErrMsg;
55369 55340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bv.zSql = sqlite3MPrintf(db,
@@ -55801,11 +55772,11 @@
55801 55772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.cd */
55802 55773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>0 && pOp->p1<=p->nMem );
55803 55774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cd.pMem = &p->aMem[pOp->p1];
55804 55775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (u.cd.pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
55805 55776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeMemFinalize(u.cd.pMem, pOp->p4.pFunc);
55806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_ERROR ){
55777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ){
55807 55778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.cd.pMem));
55808 55779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
55809 55780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeEncoding(u.cd.pMem, encoding);
55810 55781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UPDATE_MAX_BLOBSIZE(u.cd.pMem);
55811 55782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3VdbeMemTooBig(u.cd.pMem) ){
@@ -56122,10 +56093,13 @@
56122 56093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
56123 56094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = u.cj.pModule->xColumn(pCur->pVtabCursor, &u.cj.sContext, pOp->p2);
56124 56095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, p->zErrMsg);
56125 56096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zErrMsg = u.cj.pVtab->zErrMsg;
56126 56097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cj.pVtab->zErrMsg = 0;
56098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( u.cj.sContext.isError ){
56099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = u.cj.sContext.isError;
56100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56127 56101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
56128 56102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Copy the result of the function to the P3 register. We
56129 56103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** do this regardless of whether or not an error occurred to ensure any
56130 56104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** dynamic allocation in u.cj.sContext.s (a Mem struct) is released.
56131 56105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -64024,11 +63998,11 @@
64024 63998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** creating ID lists
64025 63999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** BEGIN TRANSACTION
64026 64000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMIT
64027 64001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ROLLBACK
64028 64002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
64029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: build.c,v 1.552 2009/06/18 17:22:39 drh Exp $
64003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: build.c,v 1.554 2009/06/25 11:50:21 drh Exp $
64030 64004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
64031 64005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64032 64006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
64033 64007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is called when a new SQL statement is beginning to
64034 64008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be parsed. Initialize the pParse structure as needed.
@@ -64175,10 +64149,16 @@
64175 64149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Once all the cookies have been verified and transactions opened,
64176 64150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** obtain the required table-locks. This is a no-op unless the
64177 64151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** shared-cache feature is enabled.
64178 64152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
64179 64153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
codeTableLocks(pParse);
64154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Initialize any AUTOINCREMENT data structures required.
64156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
64157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AutoincrementBegin(pParse);
64158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Finally, jump back to the beginning of the executable code. */
64180 64160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto);
64181 64161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64182 64162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64183 64163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64184 64164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -64373,14 +64353,11 @@
64373 64353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int len;
64374 64354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Hash *pHash = &db->aDb[iDb].pSchema->idxHash;
64375 64355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64376 64356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
len = sqlite3Strlen30(zIdxName);
64377 64357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0);
64378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Justification of ALWAYS(): This routine is only called from the
64379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** OP_DropIndex opcode. And there is no way that opcode will ever run
64380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** unless the corresponding index is in the symbol table. */
64381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ALWAYS(pIndex) ){
64358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIndex ){
64382 64359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIndex->pTable->pIndex==pIndex ){
64383 64360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->pTable->pIndex = pIndex->pNext;
64384 64361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
64385 64362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *p;
64386 64363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Justification of ALWAYS(); The index must be on the list of
@@ -68090,11 +68067,11 @@
68090 68067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68091 68068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
68092 68069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains C code routines that are called by the parser
68093 68070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in order to generate code for DELETE FROM statements.
68094 68071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: delete.c,v 1.203 2009/05/28 01:00:55 drh Exp $
68072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: delete.c,v 1.204 2009/06/23 20:28:54 drh Exp $
68096 68073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
68097 68074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
68098 68075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
68099 68076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Look up every table that is named in pSrc. If any table is not found,
68100 68077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** add an error message to pParse->zErrMsg and return NULL. If all tables
@@ -68551,10 +68528,18 @@
68551 68528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum);
68552 68529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68553 68530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, iCur);
68554 68531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68555 68532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
68534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Update the sqlite_sequence table by storing the content of the
68535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** maximum rowid counter values recorded while inserting into
68536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** autoincrement tables.
68537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
68538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nested==0 && pParse->trigStack==0 ){
68539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AutoincrementEnd(pParse);
68540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
68556 68541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
68557 68542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
68558 68543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the number of rows that were deleted. If this routine is
68559 68544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** generating code because of a call to sqlite3NestedParse(), do not
68560 68545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** invoke the callback function.
@@ -70184,11 +70169,11 @@
70184 70169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
70185 70170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
70186 70171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains C code routines that are called by the parser
70187 70172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to handle INSERT statements in SQLite.
70188 70173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
70189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: insert.c,v 1.268 2009/05/29 19:00:13 drh Exp $
70174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: insert.c,v 1.269 2009/06/23 20:28:54 drh Exp $
70190 70175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70191 70176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70192 70177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
70193 70178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code that will open a table for reading.
70194 70179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -70333,58 +70318,87 @@
70333 70318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
70334 70319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70335 70320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70336 70321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOINCREMENT
70337 70322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
70338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Write out code to initialize the autoincrement logic. This code
70339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** looks up the current autoincrement value in the sqlite_sequence
70340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** table and stores that value in a register. Code generated by
70341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** autoIncStep() will keep that register holding the largest
70342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** rowid value. Code generated by autoIncEnd() will write the new
70343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** largest value of the counter back into the sqlite_sequence table.
70344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
70345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine returns the index of the mem[] cell that contains
70346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the maximum rowid counter.
70347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
70348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Three consecutive registers are allocated by this routine. The
70349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** first two hold the name of the target table and the maximum rowid
70350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** inserted into the target table, respectively.
70351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The third holds the rowid in sqlite_sequence where we will
70352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** write back the revised maximum rowid. This routine returns the
70353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** index of the second of these three registers.
70323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Locate or create an AutoincInfo structure associated with table pTab
70324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** which is in database iDb. Return the register number for the register
70325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that holds the maximum rowid.
70326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There is at most one AutoincInfo structure per table even if the
70328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** same table is autoincremented multiple times due to inserts within
70329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** triggers. A new AutoincInfo structure is created if this is the
70330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** first use of table pTab. On 2nd and subsequent uses, the original
70331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** AutoincInfo structure is used.
70332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Three memory locations are allocated:
70334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (1) Register to hold the name of the pTab table.
70336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (2) Register to hold the maximum ROWID of pTab.
70337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (3) Register to hold the rowid in sqlite_sequence of pTab
70338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The 2nd register is the one that is returned. That is all the
70340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** insert routine needs to know about.
70354 70341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70355 70342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int autoIncBegin(
70356 70343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parsing context */
70357 70344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb, /* Index of the database holding pTab */
70358 70345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab /* The table we are writing to */
70359 70346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
70360 70347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int memId = 0; /* Register holding maximum rowid */
70361 70348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab->tabFlags & TF_Autoincrement ){
70362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Vdbe *v = pParse->pVdbe;
70363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Db *pDb = &pParse->db->aDb[iDb];
70364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCur = pParse->nTab++;
70365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr; /* Address of the top of the loop */
70366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( v );
70367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nMem++; /* Holds name of table */
70368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memId = ++pParse->nMem;
70369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nMem++;
70370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3OpenTable(pParse, iCur, iDb, pDb->pSchema->pSeqTab, OP_OpenRead);
70371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr = sqlite3VdbeCurrentAddr(v);
70372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, pTab->zName, 0);
70373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Rewind, iCur, addr+9);
70374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Column, iCur, 0, memId);
70375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId);
70376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
70377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Rowid, iCur, memId+1);
70378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Column, iCur, 1, memId);
70379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9);
70380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Next, iCur, addr+2);
70381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, 0, memId);
70382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Close, iCur, 0);
70349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AutoincInfo *pInfo;
70350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo = pParse->pAinc;
70352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
70353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pInfo==0 ){
70354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo));
70355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pInfo==0 ) return 0;
70356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->pNext = pParse->pAinc;
70357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->pAinc = pInfo;
70358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->pTab = pTab;
70359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->iDb = iDb;
70360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem++; /* Register to hold name of table */
70361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pInfo->regCtr = ++pParse->nMem; /* Max rowid register */
70362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem++; /* Rowid in sqlite_sequence */
70363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memId = pInfo->regCtr;
70383 70365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70384 70366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return memId;
70385 70367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine generates code that will initialize all of the
70371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** register used by the autoincrement tracker.
70372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){
70374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AutoincInfo *p; /* Information about an AUTOINCREMENT */
70375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db = pParse->db; /* The database connection */
70376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Db *pDb; /* Database only autoinc table */
70377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int memId; /* Register holding max rowid */
70378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addr; /* A VDBE address */
70379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v = pParse->pVdbe; /* VDBE under construction */
70380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( v ); /* We failed long ago if this is not so */
70382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(p = pParse->pAinc; p; p = p->pNext){
70383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDb = &db->aDb[p->iDb];
70384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memId = p->regCtr;
70385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead);
70386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeCurrentAddr(v);
70387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, p->pTab->zName, 0);
70388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Rewind, 0, addr+9);
70389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, 0, 0, memId);
70390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId);
70391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
70392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
70393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, 0, 1, memId);
70394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9);
70395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Next, 0, addr+2);
70396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, memId);
70397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp0(v, OP_Close);
70398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70386 70400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70387 70401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
70388 70402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Update the maximum rowid for an autoincrement calculation.
70389 70403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
70390 70404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine should be called when the top of the stack holds a
@@ -70397,46 +70411,56 @@
70397 70411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid);
70398 70412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70399 70413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70400 70414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70401 70415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
70402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** After doing one or more inserts, the maximum rowid is stored
70403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in reg[memId]. Generate code to write this value back into the
70404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the sqlite_sequence table.
70416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine generates the code needed to write autoincrement
70417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** maximum rowid values back into the sqlite_sequence register.
70418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Every statement that might do an INSERT into an autoincrement
70419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table (either directly or through triggers) needs to call this
70420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine just before the "exit" code.
70405 70421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void autoIncEnd(
70407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Parse *pParse, /* The parsing context */
70408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iDb, /* Index of the database holding pTab */
70409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab, /* Table we are inserting into */
70410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int memId /* Memory cell holding the maximum rowid */
70411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
70412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTab->tabFlags & TF_Autoincrement ){
70413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCur = pParse->nTab++;
70414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Vdbe *v = pParse->pVdbe;
70415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Db *pDb = &pParse->db->aDb[iDb];
70416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int j1;
70417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iRec = ++pParse->nMem; /* Memory cell used for record */
70418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
70419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( v );
70420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3OpenTable(pParse, iCur, iDb, pDb->pSchema->pSeqTab, OP_OpenWrite);
70422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
70423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AutoincInfo *p;
70424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v = pParse->pVdbe;
70425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db = pParse->db;
70426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( v );
70428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(p = pParse->pAinc; p; p = p->pNext){
70429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Db *pDb = &db->aDb[p->iDb];
70430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int j1, j2, j3, j4, j5;
70431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iRec;
70432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int memId = p->regCtr;
70433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iRec = sqlite3GetTempReg(pParse);
70435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite);
70421 70436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j1 = sqlite3VdbeAddOp1(v, OP_NotNull, memId+1);
70422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_NewRowid, iCur, memId+1);
70437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j2 = sqlite3VdbeAddOp0(v, OP_Rewind);
70438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j3 = sqlite3VdbeAddOp3(v, OP_Column, 0, 0, iRec);
70439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j4 = sqlite3VdbeAddOp3(v, OP_Eq, memId-1, 0, iRec);
70440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Next, 0, j3);
70441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, j2);
70442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_NewRowid, 0, memId+1);
70443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j5 = sqlite3VdbeAddOp0(v, OP_Goto);
70444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, j4);
70445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
70423 70446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, j1);
70447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, j5);
70424 70448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_MakeRecord, memId-1, 2, iRec);
70425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Insert, iCur, iRec, memId+1);
70449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Insert, 0, iRec, memId+1);
70426 70450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
70427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp1(v, OP_Close, iCur);
70451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp0(v, OP_Close);
70452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ReleaseTempReg(pParse, iRec);
70428 70453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70429 70454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70430 70455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
70431 70456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
70432 70457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines
70433 70458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** above are all no-ops
70434 70459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70435 70460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define autoIncBegin(A,B,C) (0)
70436 70461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define autoIncStep(A,B,C)
70437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define autoIncEnd(A,B,C,D)
70438 70462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_AUTOINCREMENT */
70439 70463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70440 70464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70441 70465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Forward declaration */
70442 70466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int xferOptimization(
@@ -70678,11 +70702,11 @@
70678 70702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the 2nd template.
70679 70703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70680 70704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
70681 70705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !pTrigger );
70682 70706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pList==0 );
70683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto insert_cleanup;
70707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto insert_end;
70684 70708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70685 70709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_XFER_OPT */
70686 70710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70687 70711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this is an AUTOINCREMENT table, look up the sequence number in the
70688 70712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite_sequence table and store it in memory cell regAutoinc.
@@ -71160,15 +71184,18 @@
71160 71184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
71161 71185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur);
71162 71186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71163 71187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71164 71188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ insert_end:
71165 71190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Update the sqlite_sequence table by storing the content of the
71166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** counter value in memory regAutoinc back into the sqlite_sequence
71167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** table.
71191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** maximum rowid counter values recorded while inserting into
71192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** autoincrement tables.
71168 71193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- autoIncEnd(pParse, iDb, pTab, regAutoinc);
71194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nested==0 && pParse->trigStack==0 ){
71195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AutoincrementEnd(pParse);
71196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
71170 71197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71171 71198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
71172 71199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the number of rows inserted. If this routine is
71173 71200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** generating code because of a call to sqlite3NestedParse(), do not
71174 71201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** invoke the callback function.
@@ -71887,11 +71914,10 @@
71887 71914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData);
71888 71915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid);
71889 71916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND);
71890 71917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP4(v, -1, pDest->zName, 0);
71891 71918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1);
71892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- autoIncEnd(pParse, iDbDest, pDest, regAutoinc);
71893 71919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
71894 71920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
71895 71921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
71896 71922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71897 71923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrcIdx );
@@ -74504,11 +74530,11 @@
74504 74530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
74505 74531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains the implementation of the sqlite3_prepare()
74506 74532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface, and routines that contribute to loading the database schema
74507 74533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from disk.
74508 74534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
74509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: prepare.c,v 1.124 2009/06/22 12:05:10 drh Exp $
74535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: prepare.c,v 1.125 2009/06/25 11:50:21 drh Exp $
74510 74536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
74511 74537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74512 74538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
74513 74539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Fill the InitData structure with an error message that indicates
74514 74540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the database is corrupt.
@@ -74577,11 +74603,11 @@
74577 74603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc!=SQLITE_OK || zErr==0 );
74578 74604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=rc ){
74579 74605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pData->rc = rc;
74580 74606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_NOMEM ){
74581 74607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->mallocFailed = 1;
74582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( rc!=SQLITE_INTERRUPT ){
74608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( rc!=SQLITE_INTERRUPT && rc!=SQLITE_LOCKED ){
74583 74609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
corruptSchema(pData, argv[0], zErr);
74584 74610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74585 74611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, zErr);
74586 74612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74587 74613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( argv[0]==0 ){
@@ -80648,11 +80674,11 @@
80648 80674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
80649 80675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
80650 80676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains C code routines that are called by the parser
80651 80677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to handle UPDATE statements.
80652 80678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
80653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: update.c,v 1.202 2009/05/28 01:00:55 drh Exp $
80679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: update.c,v 1.204 2009/06/27 11:17:35 drh Exp $
80654 80680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
80655 80681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
80656 80682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
80657 80683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Forward declaration */
80658 80684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void updateVirtualTable(
@@ -81198,10 +81224,18 @@
81198 81224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Close, iCur, 0);
81199 81225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTrigger ){
81200 81226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Close, newIdx, 0);
81201 81227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Close, oldIdx, 0);
81202 81228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
81229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
81230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Update the sqlite_sequence table by storing the content of the
81231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** maximum rowid counter values recorded while inserting into
81232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** autoincrement tables.
81233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
81234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nested==0 && pParse->trigStack==0 ){
81235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AutoincrementEnd(pParse);
81236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
81203 81237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
81204 81238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
81205 81239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the number of rows that were changed. If this routine is
81206 81240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** generating code because of a call to sqlite3NestedParse(), do not
81207 81241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** invoke the callback function.
@@ -81296,21 +81330,20 @@
81296 81330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Select(pParse, pSelect, &dest);
81297 81331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
81298 81332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate code to scan the ephemeral table and call VUpdate. */
81299 81333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iReg = ++pParse->nMem;
81300 81334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nMem += pTab->nCol+1;
81301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0);
81302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr = sqlite3VdbeCurrentAddr(v);
81335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0);
81303 81336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, ephemTab, 0, iReg);
81304 81337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, ephemTab, (pRowid?1:0), iReg+1);
81305 81338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pTab->nCol; i++){
81306 81339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, ephemTab, i+1+(pRowid!=0), iReg+2+i);
81307 81340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
81308 81341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VtabMakeWritable(pParse, pTab);
81309 81342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_VUpdate, 0, pTab->nCol+2, iReg, pVtab, P4_VTAB);
81310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr);
81311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr-1);
81343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr+1);
81344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, addr);
81312 81345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Close, ephemTab, 0);
81313 81346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
81314 81347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Cleanup */
81315 81348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDelete(db, pSelect);
81316 81349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -89455,11 +89488,11 @@
89455 89488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
89456 89489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains C code that splits an SQL input string up into
89457 89490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** individual tokens and sends those tokens one-by-one over to the
89458 89491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parser for analysis.
89459 89492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
89460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: tokenize.c,v 1.161 2009/06/17 01:17:13 drh Exp $
89493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: tokenize.c,v 1.162 2009/06/23 20:28:54 drh Exp $
89461 89494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
89462 89495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89463 89496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
89464 89497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The charMap() macro maps alphabetic characters into their
89465 89498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** lower-case ASCII equivalent. On ASCII machines, this is just
@@ -90226,10 +90259,15 @@
90226 90259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90227 90260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90228 90261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DeleteTrigger(db, pParse->pNewTrigger);
90229 90262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, pParse->apVarExpr);
90230 90263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, pParse->aAlias);
90264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pParse->pAinc ){
90265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AutoincInfo *p = pParse->pAinc;
90266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->pAinc = p->pNext;
90267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, p);
90268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
90231 90269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pParse->pZombieTab ){
90232 90270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *p = pParse->pZombieTab;
90233 90271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->pZombieTab = p->pNextZombie;
90234 90272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DeleteTable(p);
90235 90273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -90534,11 +90572,11 @@
90534 90572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Main file for the SQLite library. The routines in this file
90535 90573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implement the programmer interface to the library. Routines in
90536 90574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** other files are for internal use by SQLite and should not be
90537 90575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** accessed by users of the library.
90538 90576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
90539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: main.c,v 1.558 2009/06/19 14:06:03 drh Exp $
90577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** $Id: main.c,v 1.560 2009/06/26 15:14:55 drh Exp $
90540 90578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
90541 90579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90542 90580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_FTS3
90543 90581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include fts3.h in the middle of main.c ***********************/
90544 90582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file fts3.h ********************************************/
@@ -91356,11 +91394,11 @@
91356 91394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_FULL */ "database or disk is full",
91357 91395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_CANTOPEN */ "unable to open database file",
91358 91396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_PROTOCOL */ 0,
91359 91397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_EMPTY */ "table contains no data",
91360 91398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_SCHEMA */ "database schema has changed",
91361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* SQLITE_TOOBIG */ "String or BLOB exceeded size limit",
91399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* SQLITE_TOOBIG */ "string or blob too big",
91362 91400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_CONSTRAINT */ "constraint failed",
91363 91401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_MISMATCH */ "datatype mismatch",
91364 91402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_MISUSE */ "library routine called out of sequence",
91365 91403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_NOLFS */ "large file support is disabled",
91366 91404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_AUTH */ "authorization denied",
@@ -92169,11 +92207,10 @@
92169 92207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto opendb_out;
92170 92208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
92171 92209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
92172 92210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(db->mutex);
92173 92211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->errMask = 0xff;
92174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->priorNewRowid = 0;
92175 92212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->nDb = 2;
92176 92213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->magic = SQLITE_MAGIC_BUSY;
92177 92214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->aDb = db->aDbStatic;
92178 92215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
92179 92216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
92180 92217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!