OLD | NEW |
1 Index: src/build.c | 1 diff --git a/third_party/sqlite/src/src/build.c b/third_party/sqlite/src/src/bui
ld.c |
2 =================================================================== | 2 index 2cfb1f4..c9eed5e 100644 |
3 --- src/build.c»2009-09-11 07:02:46.000000000 -0700 | 3 --- a/third_party/sqlite/src/src/build.c |
4 +++ src/build.c»2009-09-14 18:16:46.000000000 -0700 | 4 +++ b/third_party/sqlite/src/src/build.c |
5 @@ -26,6 +26,9 @@ | 5 @@ -24,6 +24,9 @@ |
6 */ | 6 */ |
7 #include "sqliteInt.h" | 7 #include "sqliteInt.h" |
8 | 8 |
9 +#include "pager.h" | 9 +#include "pager.h" |
10 +#include "btree.h" | 10 +#include "btree.h" |
11 + | 11 + |
12 /* | 12 /* |
13 ** This routine is called when a new SQL statement is beginning to | 13 ** This routine is called when a new SQL statement is beginning to |
14 ** be parsed. Initialize the pParse structure as needed. | 14 ** be parsed. Initialize the pParse structure as needed. |
15 @@ -3659,3 +3662,30 @@ | 15 @@ -3688,3 +3691,30 @@ KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){ |
16 } | 16 } |
17 return pKey; | 17 return pKey; |
18 } | 18 } |
19 + | 19 + |
20 +/* Begin preload-cache.patch for Chromium */ | 20 +/* Begin preload-cache.patch for Chromium */ |
21 +/* See declaration in sqlite3.h for information */ | 21 +/* See declaration in sqlite3.h for information */ |
22 +int sqlite3Preload(sqlite3 *db) | 22 +int sqlite3Preload(sqlite3 *db) |
23 +{ | 23 +{ |
24 + Pager *pPager; | 24 + Pager *pPager; |
25 + Btree *pBt; | 25 + Btree *pBt; |
(...skipping 10 matching lines...) Expand all Loading... |
36 + rc = sqlite3PagerLoadall(pPager); | 36 + rc = sqlite3PagerLoadall(pPager); |
37 + if (rc == SQLITE_OK) | 37 + if (rc == SQLITE_OK) |
38 + dbsLoaded++; | 38 + dbsLoaded++; |
39 + } | 39 + } |
40 + } | 40 + } |
41 + if (dbsLoaded == 0) | 41 + if (dbsLoaded == 0) |
42 + return SQLITE_ERROR; | 42 + return SQLITE_ERROR; |
43 + return SQLITE_OK; | 43 + return SQLITE_OK; |
44 +} | 44 +} |
45 +/* End preload-cache.patch for Chromium */ | 45 +/* End preload-cache.patch for Chromium */ |
46 Index: src/sqlite3.h.in | 46 diff --git a/third_party/sqlite/src/src/pager.c b/third_party/sqlite/src/src/pag
er.c |
47 =================================================================== | 47 index 2faeb15..ba88923 100644 |
48 --- src/sqlite.h.in» 2009-09-09 07:03:20.000000000 -0700 | 48 --- a/third_party/sqlite/src/src/pager.c |
49 +++ src/sqlite.h.in» 2009-09-15 11:34:26.000000000 -0700 | 49 +++ b/third_party/sqlite/src/src/pager.c |
50 @@ -4677,6 +4677,21 @@ | 50 @@ -790,6 +790,16 @@ static int pagerUseWal(Pager *pPager){ |
51 */ | 51 # define pagerBeginReadTransaction(z) SQLITE_OK |
52 int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); | 52 #endif |
53 | |
54 +/* Begin preload-cache.patch for Chromium */ | |
55 +/* | |
56 +** Preload the databases into the pager cache, up to the maximum size of the | |
57 +** pager cache. | |
58 +** | |
59 +** For a database to be loaded successfully, the pager must be active. That is, | |
60 +** there must be an open statement on that database. See sqlite3pager_loadall | |
61 +** | |
62 +** There might be many databases attached to the given connection. We iterate | |
63 +** them all and try to load them. If none are loadable successfully, we return | |
64 +** an error. Otherwise, we return OK. | |
65 +*/ | |
66 +int sqlite3Preload(sqlite3 *db); | |
67 +/* End preload-cache.patch for Chromium */ | |
68 + | |
69 /* | |
70 ** CAPI3REF: Virtual File System Objects {H11200} <S20100> | |
71 ** | |
72 Index: src/pager.c | |
73 =================================================================== | |
74 --- src/pager.c»2009-09-07 08:58:09.000000000 -0700 | |
75 +++ src/pager.c»2009-09-15 16:43:07.000000000 -0700 | |
76 @@ -388,6 +388,16 @@ | |
77 */ | |
78 #define PAGER_MAX_PGNO 2147483647 | |
79 | 53 |
80 +/* Begin preload-cache.patch for Chromium */ | 54 +/* Begin preload-cache.patch for Chromium */ |
81 +/* See comments above the definition. */ | 55 +/* See comments above the definition. */ |
82 +int sqlite3PagerAcquire2( | 56 +int sqlite3PagerAcquire2( |
83 + Pager *pPager, | 57 + Pager *pPager, |
84 + Pgno pgno, | 58 + Pgno pgno, |
85 + DbPage **ppPage, | 59 + DbPage **ppPage, |
86 + int noContent, | 60 + int noContent, |
87 + unsigned char *pDataToFill); | 61 + unsigned char *pDataToFill); |
88 +/* End preload-cache.patch for Chromium */ | 62 +/* End preload-cache.patch for Chromium */ |
89 + | 63 + |
90 #ifndef NDEBUG | 64 #ifndef NDEBUG |
91 /* | 65 /* |
92 ** Usage: | 66 ** Usage: |
93 @@ -3788,6 +3798,25 @@ | 67 @@ -4869,6 +4879,25 @@ int sqlite3PagerAcquire( |
94 DbPage **ppPage, /* Write a pointer to the page here */ | 68 DbPage **ppPage, /* Write a pointer to the page here */ |
95 int noContent /* Do not bother reading content from disk if true */ | 69 int noContent /* Do not bother reading content from disk if true */ |
96 ){ | 70 ){ |
97 + /* This just passes through to our modified version with NULL data. */ | 71 + /* This just passes through to our modified version with NULL data. */ |
98 + return sqlite3PagerAcquire2(pPager, pgno, ppPage, noContent, 0); | 72 + return sqlite3PagerAcquire2(pPager, pgno, ppPage, noContent, 0); |
99 +} | 73 +} |
100 + | 74 + |
101 +/* | 75 +/* |
102 +** This is an internal version of sqlite3PagerAcquire that takes an extra | 76 +** This is an internal version of sqlite3PagerAcquire that takes an extra |
103 +** parameter of data to use to fill the page with. This allows more efficient | 77 +** parameter of data to use to fill the page with. This allows more efficient |
104 +** filling for preloaded data. If this extra parameter is NULL, we'll go to | 78 +** filling for preloaded data. If this extra parameter is NULL, we'll go to |
105 +** the file. | 79 +** the file. |
106 +** | 80 +** |
107 +** See sqlite3PagerLoadall which uses this function. | 81 +** See sqlite3PagerLoadall which uses this function. |
108 +*/ | 82 +*/ |
109 +int sqlite3PagerAcquire2( | 83 +int sqlite3PagerAcquire2( |
110 + Pager *pPager, /* The pager open on the database file */ | 84 + Pager *pPager, /* The pager open on the database file */ |
111 + Pgno pgno, /* Page number to fetch */ | 85 + Pgno pgno, /* Page number to fetch */ |
112 + DbPage **ppPage, /* Write a pointer to the page here */ | 86 + DbPage **ppPage, /* Write a pointer to the page here */ |
113 + int noContent, /* Do not bother reading content from disk if true */ | 87 + int noContent, /* Do not bother reading content from disk if true */ |
114 + unsigned char* pDataToFill | 88 + unsigned char* pDataToFill |
115 +){ | 89 +){ |
116 int rc; | 90 int rc; |
117 PgHdr *pPg; | 91 PgHdr *pPg; |
118 | 92 |
119 @@ -3870,9 +3899,17 @@ | 93 @@ -4944,9 +4973,17 @@ int sqlite3PagerAcquire( |
120 IOTRACE(("ZERO %p %d\n", pPager, pgno)); | 94 IOTRACE(("ZERO %p %d\n", pPager, pgno)); |
121 }else{ | 95 }else{ |
122 assert( pPg->pPager==pPager ); | 96 assert( pPg->pPager==pPager ); |
123 - rc = readDbPage(pPg); | 97 - rc = readDbPage(pPg); |
124 - if( rc!=SQLITE_OK ){ | 98 - if( rc!=SQLITE_OK ){ |
125 - goto pager_acquire_err; | 99 - goto pager_acquire_err; |
126 + if( pDataToFill ){ | 100 + if( pDataToFill ){ |
127 + /* Just copy from the given memory */ | 101 + /* Just copy from the given memory */ |
128 + memcpy(pPg->pData, pDataToFill, pPager->pageSize); | 102 + memcpy(pPg->pData, pDataToFill, pPager->pageSize); |
129 + CODEC1(pPager, pPg->pData, pPg->pgno, 3, rc = SQLITE_NOMEM; | 103 + CODEC1(pPager, pPg->pData, pPg->pgno, 3, rc = SQLITE_NOMEM; |
130 + goto pager_acquire_err); | 104 + goto pager_acquire_err); |
131 + }else{ | 105 + }else{ |
132 + /* Load from disk (old regular sqlite code path) */ | 106 + /* Load from disk (old regular sqlite code path) */ |
133 + rc = readDbPage(pPg); | 107 + rc = readDbPage(pPg); |
134 + if( rc!=SQLITE_OK ){ | 108 + if( rc!=SQLITE_OK ){ |
135 + goto pager_acquire_err; | 109 + goto pager_acquire_err; |
136 + } | 110 + } |
137 } | 111 } |
138 } | 112 } |
139 #ifdef SQLITE_CHECK_PAGES | 113 pager_set_pagehash(pPg); |
140 @@ -5221,6 +5258,91 @@ | 114 @@ -6318,6 +6355,91 @@ int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno
pgno, int isCommit){ |
141 } | 115 } |
142 #endif | 116 #endif |
143 | 117 |
144 +/* Begin preload-cache.patch for Chromium */ | 118 +/* Begin preload-cache.patch for Chromium */ |
145 +/** | 119 +/** |
146 +** When making large allocations, there is no need to stress the heap and | 120 +** When making large allocations, there is no need to stress the heap and |
147 +** potentially hold its lock while we allocate a bunch of memory. If we know | 121 +** potentially hold its lock while we allocate a bunch of memory. If we know |
148 +** the allocation will be large, go directly to the OS instead of the heap. | 122 +** the allocation will be large, go directly to the OS instead of the heap. |
149 +**/ | 123 +**/ |
150 +static void* allocLarge(size_t size) { | 124 +static void* allocLarge(size_t size) { |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 + sqlite3PagerUnref(pPage); | 196 + sqlite3PagerUnref(pPage); |
223 + } | 197 + } |
224 + freeLarge(fileData); | 198 + freeLarge(fileData); |
225 + return SQLITE_OK; | 199 + return SQLITE_OK; |
226 +} | 200 +} |
227 +/* End preload-cache.patch for Chromium */ | 201 +/* End preload-cache.patch for Chromium */ |
228 + | 202 + |
229 /* | 203 /* |
230 ** Return a pointer to the data for the specified page. | 204 ** Return a pointer to the data for the specified page. |
231 */ | 205 */ |
232 Index: src/pager.h | 206 diff --git a/third_party/sqlite/src/src/pager.h b/third_party/sqlite/src/src/pag
er.h |
233 =================================================================== | 207 index c12afa7..f451a47 100644 |
234 --- src/pager.h»2009-09-04 13:37:42.000000000 -0700 | 208 --- a/third_party/sqlite/src/src/pager.h |
235 +++ src/pager.h»2009-09-15 11:31:55.000000000 -0700 | 209 +++ b/third_party/sqlite/src/src/pager.h |
236 @@ -143,6 +143,8 @@ | 210 @@ -153,6 +153,8 @@ const sqlite3_vfs *sqlite3PagerVfs(Pager*); |
237 sqlite3_file *sqlite3PagerFile(Pager*); | 211 sqlite3_file *sqlite3PagerFile(Pager*); |
238 const char *sqlite3PagerJournalname(Pager*); | 212 const char *sqlite3PagerJournalname(Pager*); |
239 int sqlite3PagerNosync(Pager*); | 213 int sqlite3PagerNosync(Pager*); |
240 +/* This function is for preload-cache.patch for Chromium: */ | 214 +/* This function is for preload-cache.patch for Chromium: */ |
241 +int sqlite3PagerLoadall(Pager*); | 215 +int sqlite3PagerLoadall(Pager*); |
242 void *sqlite3PagerTempSpace(Pager*); | 216 void *sqlite3PagerTempSpace(Pager*); |
243 int sqlite3PagerIsMemdb(Pager*); | 217 int sqlite3PagerIsMemdb(Pager*); |
244 | 218 |
| 219 diff --git a/third_party/sqlite/src/src/sqlite.h.in b/third_party/sqlite/src/src
/sqlite.h.in |
| 220 index 2bbd687..25012ad 100644 |
| 221 --- a/third_party/sqlite/src/src/sqlite.h.in |
| 222 +++ b/third_party/sqlite/src/src/sqlite.h.in |
| 223 @@ -4683,6 +4683,21 @@ int sqlite3_declare_vtab(sqlite3*, const char *zSQL); |
| 224 */ |
| 225 int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); |
| 226 |
| 227 +/* Begin preload-cache.patch for Chromium */ |
| 228 +/* |
| 229 +** Preload the databases into the pager cache, up to the maximum size of the |
| 230 +** pager cache. |
| 231 +** |
| 232 +** For a database to be loaded successfully, the pager must be active. That is, |
| 233 +** there must be an open statement on that database. See sqlite3pager_loadall |
| 234 +** |
| 235 +** There might be many databases attached to the given connection. We iterate |
| 236 +** them all and try to load them. If none are loadable successfully, we return |
| 237 +** an error. Otherwise, we return OK. |
| 238 +*/ |
| 239 +int sqlite3Preload(sqlite3 *db); |
| 240 +/* End preload-cache.patch for Chromium */ |
| 241 + |
| 242 /* |
| 243 ** The interface to the virtual-table mechanism defined above (back up |
| 244 ** to a comment remarkably similar to this one) is currently considered |
OLD | NEW |