Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: third_party/sqlite/patches/0005-Virtual-table-supporting-recovery-of-corrupted-datab.patch

Issue 1610963002: Import SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 From ec588be0416fab3e957d0901eb6e638543b01229 Mon Sep 17 00:00:00 2001 1 From 29b8ad9263dbc700c002e9044c7c712a566a26d7 Mon Sep 17 00:00:00 2001
2 From: Scott Hess <shess@chromium.org> 2 From: Scott Hess <shess@chromium.org>
3 Date: Sat, 20 Jul 2013 11:42:21 -0700 3 Date: Sat, 20 Jul 2013 11:42:21 -0700
4 Subject: [PATCH 06/11] Virtual table supporting recovery of corrupted 4 Subject: [PATCH 05/10] Virtual table supporting recovery of corrupted
5 databases. 5 databases.
6 6
7 "recover" implements a virtual table which uses the SQLite pager layer 7 "recover" implements a virtual table which uses the SQLite pager layer
8 to read table pages and pull out the data which is structurally sound 8 to read table pages and pull out the data which is structurally sound
9 (at least at the storage layer). 9 (at least at the storage layer).
10 10
11 BUG=109482 11 BUG=109482
12 12
13 Since this implements a new feature for SQLite, the review URLs aren't 13 Since this implements a new feature for SQLite, the review URLs aren't
14 listed. This patch and the top of recover.c should be considered 14 listed. This patch and the top of recover.c should be considered
15 authoritative. The history is mostly under 15 authoritative. The history is mostly under
16 third_party/sqlite/src/src/{recover,recover-alt}.c . 16 third_party/sqlite/src/src/{recover,recover-alt}.c .
17 --- 17 ---
18 third_party/sqlite/src/Makefile.in | 1 + 18 third_party/sqlite/src/Makefile.in | 1 +
19 third_party/sqlite/src/Makefile.linux-gcc | 4 + 19 third_party/sqlite/src/Makefile.linux-gcc | 4 +
20 third_party/sqlite/src/main.mk | 4 +- 20 third_party/sqlite/src/main.mk | 5 +-
21 third_party/sqlite/src/src/main.c | 8 + 21 third_party/sqlite/src/src/main.c | 8 +
22 third_party/sqlite/src/src/recover.c | 2165 ++++++++++++++++++++++++++++ 22 third_party/sqlite/src/src/recover.c | 2167 ++++++++++++++++++++++++++++
23 third_party/sqlite/src/src/sqlite.h.in | 16 + 23 third_party/sqlite/src/src/sqlite.h.in | 16 +
24 third_party/sqlite/src/test/recover.test | 147 ++ 24 third_party/sqlite/src/test/recover.test | 147 ++
25 third_party/sqlite/src/test/recover0.test | 532 +++++++ 25 third_party/sqlite/src/test/recover0.test | 532 +++++++
26 third_party/sqlite/src/test/recover1.test | 429 ++++++ 26 third_party/sqlite/src/test/recover1.test | 429 ++++++
27 third_party/sqlite/src/test/recover2.test | 157 ++ 27 third_party/sqlite/src/test/recover2.test | 157 ++
28 third_party/sqlite/src/tool/mksqlite3c.tcl | 2 + 28 third_party/sqlite/src/tool/mksqlite3c.tcl | 2 +
29 11 files changed, 3464 insertions(+), 1 deletion(-) 29 11 files changed, 3467 insertions(+), 1 deletion(-)
30 create mode 100644 third_party/sqlite/src/src/recover.c 30 create mode 100644 third_party/sqlite/src/src/recover.c
31 create mode 100644 third_party/sqlite/src/test/recover.test 31 create mode 100644 third_party/sqlite/src/test/recover.test
32 create mode 100644 third_party/sqlite/src/test/recover0.test 32 create mode 100644 third_party/sqlite/src/test/recover0.test
33 create mode 100644 third_party/sqlite/src/test/recover1.test 33 create mode 100644 third_party/sqlite/src/test/recover1.test
34 create mode 100644 third_party/sqlite/src/test/recover2.test 34 create mode 100644 third_party/sqlite/src/test/recover2.test
35 35
36 diff --git a/third_party/sqlite/src/Makefile.in b/third_party/sqlite/src/Makefil e.in 36 diff --git a/third_party/sqlite/src/Makefile.in b/third_party/sqlite/src/Makefil e.in
37 index a2213e8..1389486 100644 37 index 1fe49d6..8b965c7 100644
38 --- a/third_party/sqlite/src/Makefile.in 38 --- a/third_party/sqlite/src/Makefile.in
39 +++ b/third_party/sqlite/src/Makefile.in 39 +++ b/third_party/sqlite/src/Makefile.in
40 @@ -253,6 +253,7 @@ SRC = \ 40 @@ -260,6 +260,7 @@ SRC = \
41 $(TOP)/src/prepare.c \ 41 $(TOP)/src/prepare.c \
42 $(TOP)/src/printf.c \ 42 $(TOP)/src/printf.c \
43 $(TOP)/src/random.c \ 43 $(TOP)/src/random.c \
44 + $(TOP)/src/recover.c \ 44 + $(TOP)/src/recover.c \
45 $(TOP)/src/resolve.c \ 45 $(TOP)/src/resolve.c \
46 $(TOP)/src/rowset.c \ 46 $(TOP)/src/rowset.c \
47 $(TOP)/src/select.c \ 47 $(TOP)/src/select.c \
48 diff --git a/third_party/sqlite/src/Makefile.linux-gcc b/third_party/sqlite/src/ Makefile.linux-gcc 48 diff --git a/third_party/sqlite/src/Makefile.linux-gcc b/third_party/sqlite/src/ Makefile.linux-gcc
49 index 4f6cdf1..dd8f46d 100644 49 index 952e8d1..f6291c0 100644
50 --- a/third_party/sqlite/src/Makefile.linux-gcc 50 --- a/third_party/sqlite/src/Makefile.linux-gcc
51 +++ b/third_party/sqlite/src/Makefile.linux-gcc 51 +++ b/third_party/sqlite/src/Makefile.linux-gcc
52 @@ -81,6 +81,10 @@ OPTS += -DSQLITE_MEMDEBUG=1 52 @@ -81,6 +81,10 @@ OPTS += -DSQLITE_MEMDEBUG=1
53 # TODO(shess) I can't see why I need this setting. 53 # TODO(shess) I can't see why I need this setting.
54 OPTS += -DOS_UNIX=1 54 OPTS += -DOS_UNIX=1
55 55
56 +# The recover virtual table is not generally enabled. Enable it for testing 56 +# The recover virtual table is not generally enabled. Enable it for testing
57 +# purposes. 57 +# purposes.
58 +OPTS += -DDEFAULT_ENABLE_RECOVER=1 58 +OPTS += -DDEFAULT_ENABLE_RECOVER=1
59 + 59 +
60 #### The suffix to add to executable files. ".exe" for windows. 60 #### The suffix to add to executable files. ".exe" for windows.
61 # Nothing for unix. 61 # Nothing for unix.
62 # 62 #
63 diff --git a/third_party/sqlite/src/main.mk b/third_party/sqlite/src/main.mk 63 diff --git a/third_party/sqlite/src/main.mk b/third_party/sqlite/src/main.mk
64 index dc56b0d..2189fd6 100644 64 index 6ff3bd4..a8629aa 100644
65 --- a/third_party/sqlite/src/main.mk 65 --- a/third_party/sqlite/src/main.mk
66 +++ b/third_party/sqlite/src/main.mk 66 +++ b/third_party/sqlite/src/main.mk
67 @@ -65,7 +65,7 @@ LIBOBJ+= vdbe.o parse.o \ 67 @@ -67,7 +67,8 @@ LIBOBJ+= vdbe.o parse.o \
68 mutex.o mutex_noop.o mutex_unix.o mutex_w32.o \ 68 mutex.o mutex_noop.o mutex_unix.o mutex_w32.o \
69 notify.o opcodes.o os.o os_unix.o os_win.o \ 69 notify.o opcodes.o os.o os_unix.o os_win.o \
70 pager.o pcache.o pcache1.o pragma.o prepare.o printf.o \ 70 pager.o pcache.o pcache1.o pragma.o prepare.o printf.o \
71 - random.o resolve.o rowset.o rtree.o select.o status.o \ 71 - random.o resolve.o rowset.o rtree.o select.o sqlite3rbu.o status.o \
72 + random.o recover.o resolve.o rowset.o rtree.o select.o status.o \ 72 + random.o recover.o resolve.o rowset.o rtree.o \
73 table.o threads.o tokenize.o trigger.o \ 73 + select.o sqlite3rbu.o status.o \
74 table.o threads.o tokenize.o treeview.o trigger.o \
74 update.o userauth.o util.o vacuum.o \ 75 update.o userauth.o util.o vacuum.o \
75 vdbeapi.o vdbeaux.o vdbeblob.o vdbemem.o vdbesort.o \ 76 vdbeapi.o vdbeaux.o vdbeblob.o vdbemem.o vdbesort.o \
76 @@ -135,6 +135,7 @@ SRC = \ 77 @@ -140,6 +141,7 @@ SRC = \
77 $(TOP)/src/prepare.c \ 78 $(TOP)/src/prepare.c \
78 $(TOP)/src/printf.c \ 79 $(TOP)/src/printf.c \
79 $(TOP)/src/random.c \ 80 $(TOP)/src/random.c \
80 + $(TOP)/src/recover.c \ 81 + $(TOP)/src/recover.c \
81 $(TOP)/src/resolve.c \ 82 $(TOP)/src/resolve.c \
82 $(TOP)/src/rowset.c \ 83 $(TOP)/src/rowset.c \
83 $(TOP)/src/select.c \ 84 $(TOP)/src/select.c \
84 @@ -315,6 +316,7 @@ TESTSRC2 = \ 85 @@ -360,6 +362,7 @@ TESTSRC2 = \
85 $(TOP)/src/prepare.c \ 86 $(TOP)/src/prepare.c \
86 $(TOP)/src/printf.c \ 87 $(TOP)/src/printf.c \
87 $(TOP)/src/random.c \ 88 $(TOP)/src/random.c \
88 + $(TOP)/src/recover.c \ 89 + $(TOP)/src/recover.c \
89 $(TOP)/src/pcache.c \ 90 $(TOP)/src/pcache.c \
90 $(TOP)/src/pcache1.c \ 91 $(TOP)/src/pcache1.c \
91 $(TOP)/src/select.c \ 92 $(TOP)/src/select.c \
92 diff --git a/third_party/sqlite/src/src/main.c b/third_party/sqlite/src/src/main .c 93 diff --git a/third_party/sqlite/src/src/main.c b/third_party/sqlite/src/src/main .c
93 index fc03700..d15ab9bb 100644 94 index 3be7c77..301808c 100644
94 --- a/third_party/sqlite/src/src/main.c 95 --- a/third_party/sqlite/src/src/main.c
95 +++ b/third_party/sqlite/src/src/main.c 96 +++ b/third_party/sqlite/src/src/main.c
96 @@ -2644,6 +2644,14 @@ static int openDatabase( 97 @@ -2927,6 +2927,14 @@ static int openDatabase(
97 } 98 }
98 #endif 99 #endif
99 100
100 +#ifdef DEFAULT_ENABLE_RECOVER 101 +#ifdef DEFAULT_ENABLE_RECOVER
101 + /* Initialize recover virtual table for testing. */ 102 + /* Initialize recover virtual table for testing. */
102 + extern int recoverVtableInit(sqlite3 *db); 103 + extern int recoverVtableInit(sqlite3 *db);
103 + if( !db->mallocFailed && rc==SQLITE_OK ){ 104 + if( !db->mallocFailed && rc==SQLITE_OK ){
104 + rc = recoverVtableInit(db); 105 + rc = recoverVtableInit(db);
105 + } 106 + }
106 +#endif 107 +#endif
107 + 108 +
108 #ifdef SQLITE_ENABLE_ICU 109 #ifdef SQLITE_ENABLE_ICU
109 if( !db->mallocFailed && rc==SQLITE_OK ){ 110 if( !db->mallocFailed && rc==SQLITE_OK ){
110 rc = sqlite3IcuInit(db); 111 rc = sqlite3IcuInit(db);
111 diff --git a/third_party/sqlite/src/src/recover.c b/third_party/sqlite/src/src/r ecover.c 112 diff --git a/third_party/sqlite/src/src/recover.c b/third_party/sqlite/src/src/r ecover.c
112 new file mode 100644 113 new file mode 100644
113 index 0000000..6882d6f 114 index 0000000..8e3929d
114 --- /dev/null 115 --- /dev/null
115 +++ b/third_party/sqlite/src/src/recover.c 116 +++ b/third_party/sqlite/src/src/recover.c
116 @@ -0,0 +1,2165 @@ 117 @@ -0,0 +1,2167 @@
117 +/* 118 +/*
118 +** 2012 Jan 11 119 +** 2012 Jan 11
119 +** 120 +**
120 +** The author disclaims copyright to this source code. In place of 121 +** The author disclaims copyright to this source code. In place of
121 +** a legal notice, here is a blessing: 122 +** a legal notice, here is a blessing:
122 +** 123 +**
123 +** May you do good and not evil. 124 +** May you do good and not evil.
124 +** May you find forgiveness for yourself and forgive others. 125 +** May you find forgiveness for yourself and forgive others.
125 +** May you share freely, never taking more than you give. 126 +** May you share freely, never taking more than you give.
126 +*/ 127 +*/
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 +#include <ctype.h> 329 +#include <ctype.h>
329 +#include <stdio.h> 330 +#include <stdio.h>
330 +#include <string.h> 331 +#include <string.h>
331 + 332 +
332 +/* Internal SQLite things that are used: 333 +/* Internal SQLite things that are used:
333 + * u32, u64, i64 types. 334 + * u32, u64, i64 types.
334 + * Btree, Pager, and DbPage structs. 335 + * Btree, Pager, and DbPage structs.
335 + * DbPage.pData, .pPager, and .pgno 336 + * DbPage.pData, .pPager, and .pgno
336 + * sqlite3 struct. 337 + * sqlite3 struct.
337 + * sqlite3BtreePager() and sqlite3BtreeGetPageSize() 338 + * sqlite3BtreePager() and sqlite3BtreeGetPageSize()
338 + * sqlite3PagerAcquire() and sqlite3PagerUnref() 339 + * sqlite3BtreeGetOptimalReserve()
340 + * sqlite3PagerGet() and sqlite3PagerUnref()
339 + * getVarint(). 341 + * getVarint().
340 + */ 342 + */
341 +#include "sqliteInt.h" 343 +#include "sqliteInt.h"
342 + 344 +
343 +/* For debugging. */ 345 +/* For debugging. */
344 +#if 0 346 +#if 0
345 +#define FNENTRY() fprintf(stderr, "In %s\n", __FUNCTION__) 347 +#define FNENTRY() fprintf(stderr, "In %s\n", __FUNCTION__)
346 +#else 348 +#else
347 +#define FNENTRY() 349 +#define FNENTRY()
348 +#endif 350 +#endif
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 + if( ascii_strcasecmp(db->aDb[i].zName, zName)==0 ){ 516 + if( ascii_strcasecmp(db->aDb[i].zName, zName)==0 ){
515 + pBt = db->aDb[i].pBt; 517 + pBt = db->aDb[i].pBt;
516 + break; 518 + break;
517 + } 519 + }
518 + } 520 + }
519 + if( !pBt ){ 521 + if( !pBt ){
520 + return SQLITE_ERROR; 522 + return SQLITE_ERROR;
521 + } 523 + }
522 + 524 +
523 + *pPager = sqlite3BtreePager(pBt); 525 + *pPager = sqlite3BtreePager(pBt);
524 + *pnPageSize = sqlite3BtreeGetPageSize(pBt) - sqlite3BtreeGetReserve(pBt); 526 + *pnPageSize =
527 + sqlite3BtreeGetPageSize(pBt) - sqlite3BtreeGetOptimalReserve(pBt);
525 + return SQLITE_OK; 528 + return SQLITE_OK;
526 +} 529 +}
527 + 530 +
528 +/* iSerialType is a type read from a record header. See "2.1 Record Format". 531 +/* iSerialType is a type read from a record header. See "2.1 Record Format".
529 + */ 532 + */
530 + 533 +
531 +/* Storage size of iSerialType in bytes. My interpretation of SQLite 534 +/* Storage size of iSerialType in bytes. My interpretation of SQLite
532 + * documentation is that text and blob fields can have 32-bit length. 535 + * documentation is that text and blob fields can have 32-bit length.
533 + * Values past 2^31-12 will need more than 32 bits to encode, which is 536 + * Values past 2^31-12 will need more than 32 bits to encode, which is
534 + * why iSerialType is u64. 537 + * why iSerialType is u64.
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 + int rc; 889 + int rc;
887 + const unsigned char *pPageHeader; /* Header of found page. */ 890 + const unsigned char *pPageHeader; /* Header of found page. */
888 + 891 +
889 + /* Find a valid child page which isn't on the stack. */ 892 + /* Find a valid child page which isn't on the stack. */
890 + while( pCursor->iChild<pCursor->nChildren ){ 893 + while( pCursor->iChild<pCursor->nChildren ){
891 + const unsigned iPage = interiorCursorChildPage(pCursor); 894 + const unsigned iPage = interiorCursorChildPage(pCursor);
892 + pCursor->iChild++; 895 + pCursor->iChild++;
893 + if( interiorCursorPageInUse(pCursor, iPage) ){ 896 + if( interiorCursorPageInUse(pCursor, iPage) ){
894 + fprintf(stderr, "Loop detected at %d\n", iPage); 897 + fprintf(stderr, "Loop detected at %d\n", iPage);
895 + }else{ 898 + }else{
896 + int rc = sqlite3PagerAcquire(pCursor->pPage->pPager, iPage, ppPage, 0); 899 + int rc = sqlite3PagerGet(pCursor->pPage->pPager, iPage, ppPage, 0);
897 + if( rc==SQLITE_OK ){ 900 + if( rc==SQLITE_OK ){
898 + return SQLITE_ROW; 901 + return SQLITE_ROW;
899 + } 902 + }
900 + } 903 + }
901 + } 904 + }
902 + 905 +
903 + /* This page has no more children. Get next page from parent. */ 906 + /* This page has no more children. Get next page from parent. */
904 + if( !pCursor->pParent ){ 907 + if( !pCursor->pParent ){
905 + return SQLITE_DONE; 908 + return SQLITE_DONE;
906 + } 909 + }
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 + nBytes = nLocalRecordBytes; 1033 + nBytes = nLocalRecordBytes;
1031 + 1034 +
1032 + /* While there are more pages to read, and more bytes are needed, 1035 + /* While there are more pages to read, and more bytes are needed,
1033 + * get another page. 1036 + * get another page.
1034 + */ 1037 + */
1035 + pFirstOverflow = pLastOverflow = NULL; 1038 + pFirstOverflow = pLastOverflow = NULL;
1036 + rc = SQLITE_OK; 1039 + rc = SQLITE_OK;
1037 + while( iNextPage && nBytes<nRecordBytes ){ 1040 + while( iNextPage && nBytes<nRecordBytes ){
1038 + RecoverOverflow *pOverflow; /* New overflow page for the list. */ 1041 + RecoverOverflow *pOverflow; /* New overflow page for the list. */
1039 + 1042 +
1040 + rc = sqlite3PagerAcquire(pPage->pPager, iNextPage, &pPage, 0); 1043 + rc = sqlite3PagerGet(pPage->pPager, iNextPage, &pPage, 0);
1041 + if( rc!=SQLITE_OK ){ 1044 + if( rc!=SQLITE_OK ){
1042 + break; 1045 + break;
1043 + } 1046 + }
1044 + 1047 +
1045 + pOverflow = sqlite3_malloc(sizeof(RecoverOverflow)); 1048 + pOverflow = sqlite3_malloc(sizeof(RecoverOverflow));
1046 + if( !pOverflow ){ 1049 + if( !pOverflow ){
1047 + sqlite3PagerUnref(pPage); 1050 + sqlite3PagerUnref(pPage);
1048 + rc = SQLITE_NOMEM; 1051 + rc = SQLITE_NOMEM;
1049 + break; 1052 + break;
1050 + } 1053 + }
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1359 + * - pPage is a valid interior page who's leaves contain no valid cells. 1362 + * - pPage is a valid interior page who's leaves contain no valid cells.
1360 + * - pPage is not a valid leaf or interior page. 1363 + * - pPage is not a valid leaf or interior page.
1361 + */ 1364 + */
1362 +static int leafCursorCreate(Pager *pPager, unsigned nPageSize, 1365 +static int leafCursorCreate(Pager *pPager, unsigned nPageSize,
1363 + u32 iRootPage, RecoverLeafCursor **ppCursor){ 1366 + u32 iRootPage, RecoverLeafCursor **ppCursor){
1364 + DbPage *pPage; /* Reference to page at iRootPage. */ 1367 + DbPage *pPage; /* Reference to page at iRootPage. */
1365 + RecoverLeafCursor *pCursor; /* Leaf cursor being constructed. */ 1368 + RecoverLeafCursor *pCursor; /* Leaf cursor being constructed. */
1366 + int rc; 1369 + int rc;
1367 + 1370 +
1368 + /* Start out with the root page. */ 1371 + /* Start out with the root page. */
1369 + rc = sqlite3PagerAcquire(pPager, iRootPage, &pPage, 0); 1372 + rc = sqlite3PagerGet(pPager, iRootPage, &pPage, 0);
1370 + if( rc!=SQLITE_OK ){ 1373 + if( rc!=SQLITE_OK ){
1371 + return rc; 1374 + return rc;
1372 + } 1375 + }
1373 + 1376 +
1374 + pCursor = sqlite3_malloc(sizeof(RecoverLeafCursor)); 1377 + pCursor = sqlite3_malloc(sizeof(RecoverLeafCursor));
1375 + if( !pCursor ){ 1378 + if( !pCursor ){
1376 + sqlite3PagerUnref(pPage); 1379 + sqlite3PagerUnref(pPage);
1377 + return SQLITE_NOMEM; 1380 + return SQLITE_NOMEM;
1378 + } 1381 + }
1379 + memset(pCursor, 0, sizeof(*pCursor)); 1382 + memset(pCursor, 0, sizeof(*pCursor));
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after
2273 + sqlite3_free(zCreateSql); 2276 + sqlite3_free(zCreateSql);
2274 + if( rc!=SQLITE_OK ){ 2277 + if( rc!=SQLITE_OK ){
2275 + recoverRelease(pRecover); 2278 + recoverRelease(pRecover);
2276 + return rc; 2279 + return rc;
2277 + } 2280 + }
2278 + 2281 +
2279 + *ppVtab = (sqlite3_vtab *)pRecover; 2282 + *ppVtab = (sqlite3_vtab *)pRecover;
2280 + return SQLITE_OK; 2283 + return SQLITE_OK;
2281 +} 2284 +}
2282 diff --git a/third_party/sqlite/src/src/sqlite.h.in b/third_party/sqlite/src/src /sqlite.h.in 2285 diff --git a/third_party/sqlite/src/src/sqlite.h.in b/third_party/sqlite/src/src /sqlite.h.in
2283 index 36aa999..333adfe 100644 2286 index e5673fd..6829bcb 100644
2284 --- a/third_party/sqlite/src/src/sqlite.h.in 2287 --- a/third_party/sqlite/src/src/sqlite.h.in
2285 +++ b/third_party/sqlite/src/src/sqlite.h.in 2288 +++ b/third_party/sqlite/src/src/sqlite.h.in
2286 @@ -7408,6 +7408,22 @@ int sqlite3_vtab_on_conflict(sqlite3 *); 2289 @@ -7411,6 +7411,22 @@ int sqlite3_strnicmp(const char *, const char *, int);
2287 2290 */
2288 2291 int sqlite3_strglob(const char *zGlob, const char *zStr);
2289 2292
2290 +/* Begin recover virtual table patch for Chromium */ 2293 +/* Begin recover virtual table patch for Chromium */
2291 +/* Our patches don't conform to SQLite's amalgamation processing. Hack it. */ 2294 +/* Our patches don't conform to SQLite's amalgamation processing. Hack it. */
2292 +#ifndef CHROMIUM_SQLITE_API 2295 +#ifndef CHROMIUM_SQLITE_API
2293 +#define CHROMIUM_SQLITE_API SQLITE_API 2296 +#define CHROMIUM_SQLITE_API SQLITE_API
2294 +#endif 2297 +#endif
2295 +/* 2298 +/*
2296 +** Call to initialize the recover virtual-table modules (see recover.c). 2299 +** Call to initialize the recover virtual-table modules (see recover.c).
2297 +** 2300 +**
2298 +** This could be loaded by default in main.c, but that would make the 2301 +** This could be loaded by default in main.c, but that would make the
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after
3589 + 3592 +
3590 + execsql { 3593 + execsql {
3591 + PRAGMA page_count; 3594 + PRAGMA page_count;
3592 + PRAGMA page_size; 3595 + PRAGMA page_size;
3593 + SELECT rowid, TYPEOF(value), length(value), value FROM overflow_recover; 3596 + SELECT rowid, TYPEOF(value), length(value), value FROM overflow_recover;
3594 + } 3597 + }
3595 +} [list 4 1024 1 text [string length $substr] $substr] 3598 +} [list 4 1024 1 text [string length $substr] $substr]
3596 + 3599 +
3597 +finish_test 3600 +finish_test
3598 diff --git a/third_party/sqlite/src/tool/mksqlite3c.tcl b/third_party/sqlite/src /tool/mksqlite3c.tcl 3601 diff --git a/third_party/sqlite/src/tool/mksqlite3c.tcl b/third_party/sqlite/src /tool/mksqlite3c.tcl
3599 index 0e97923..9e2b0fe 100644 3602 index 23241e2..1113758 100644
3600 --- a/third_party/sqlite/src/tool/mksqlite3c.tcl 3603 --- a/third_party/sqlite/src/tool/mksqlite3c.tcl
3601 +++ b/third_party/sqlite/src/tool/mksqlite3c.tcl 3604 +++ b/third_party/sqlite/src/tool/mksqlite3c.tcl
3602 @@ -316,6 +316,8 @@ foreach file { 3605 @@ -361,6 +361,8 @@ foreach file {
3603 main.c 3606 main.c
3604 notify.c 3607 notify.c
3605 3608
3606 + recover.c 3609 + recover.c
3607 + 3610 +
3608 fts3.c 3611 fts3.c
3609 fts3_aux.c 3612 fts3_aux.c
3610 fts3_expr.c 3613 fts3_expr.c
3611 -- 3614 --
3612 2.4.5 3615 2.7.0
3613 3616
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698