diff options
Diffstat (limited to 'chrome/third_party/sqlite/preload-cache.patch')
-rw-r--r-- | chrome/third_party/sqlite/preload-cache.patch | 246 |
1 files changed, 0 insertions, 246 deletions
diff --git a/chrome/third_party/sqlite/preload-cache.patch b/chrome/third_party/sqlite/preload-cache.patch deleted file mode 100644 index 3601a4b..0000000 --- a/chrome/third_party/sqlite/preload-cache.patch +++ /dev/null @@ -1,246 +0,0 @@ -Index: build.c
-===================================================================
---- build.c (revision 12588)
-+++ build.c (working copy)
-@@ -27,6 +27,9 @@
- #include "sqliteInt.h" - #include <ctype.h> - -+#include "pager.h" -+#include "btree.h" -+ - /* - ** This routine is called when a new SQL statement is beginning to - ** be parsed. Initialize the pParse structure as needed. -@@ -3359,3 +3362,28 @@
- } - return pKey; - } -+ -+/* See declaration in sqlite3.h for information */ -+int sqlite3Preload(sqlite3 *db) -+{ -+ Pager *pPager; -+ Btree *pBt; -+ int rc; -+ int i; -+ int dbsLoaded = 0; -+ -+ for(i=0; i<db->nDb; i++) { -+ pBt = db->aDb[i].pBt; -+ if( !pBt ) -+ continue; -+ pPager = sqlite3BtreePager(pBt); -+ if( pPager ) { -+ rc = sqlite3PagerLoadall(pPager); -+ if (rc == SQLITE_OK) -+ dbsLoaded++; -+ } -+ } -+ if (dbsLoaded == 0) -+ return SQLITE_ERROR; -+ return SQLITE_OK; -+} -Index: sqlite3.h
-===================================================================
---- sqlite3.h (revision 12588)
-+++ sqlite3.h (working copy)
-@@ -2696,6 +2696,19 @@
- int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); - - /* -+** Preload the databases into the pager cache, up to the maximum size of the -+** pager cache. -+** -+** For a database to be loaded successfully, the pager must be active. That is, -+** there must be an open statement on that database. See sqlite3pager_loadall -+** -+** There might be many databases attached to the given connection. We iterate -+** them all and try to load them. If none are loadable successfully, we return -+** an error. Otherwise, we return OK. -+*/ -+int sqlite3Preload(sqlite3 *db); -+ -+/* - ** Undo the hack that converts floating point types to integer for - ** builds on processors without floating point support. - */ -Index: pager.c
-===================================================================
---- pager.c (revision 12588)
-+++ pager.c (working copy)
-@@ -453,6 +453,14 @@
- */ - #define PAGER_MAX_PGNO 2147483647 - -+/* See comments above the definition. */ -+int sqlite3PagerAcquire2( -+ Pager *pPager, -+ Pgno pgno, -+ DbPage **ppPage, -+ int noContent, -+ unsigned char *pDataToFill); -+ - /* - ** Enable reference count tracking (for debugging) here: - */ -@@ -2000,14 +2008,14 @@
- } - if( pPager->dbSize>=0 ){ - n = pPager->dbSize; -- } else { -+ }else{ - if( (rc = sqlite3OsFileSize(pPager->fd, &n))!=SQLITE_OK ){ - pager_error(pPager, rc); - return 0; - } - if( n>0 && n<pPager->pageSize ){ - n = 1; -- }else{ -+ } else { - n /= pPager->pageSize; - } - if( pPager->state!=PAGER_UNLOCK ){ -@@ -3101,6 +3109,25 @@
- DbPage **ppPage, /* Write a pointer to the page here */ - int noContent /* Do not bother reading content from disk if true */ - ){ -+ /* This just passes through to our modified version with NULL data. */ -+ return sqlite3PagerAcquire2(pPager, pgno, ppPage, noContent, 0); -+} -+ -+/* -+** This is an internal version of sqlite3PagerAcquire that takes an extra -+** parameter of data to use to fill the page with. This allows more efficient -+** filling for preloaded data. If this extra parameter is NULL, we'll go to -+** the file. -+** -+** See sqlite3PagerLoadall which uses this function. -+*/ -+int sqlite3PagerAcquire2( -+ Pager *pPager, /* The pager open on the database file */ -+ Pgno pgno, /* Page number to fetch */ -+ DbPage **ppPage, /* Write a pointer to the page here */ -+ int noContent, /* Do not bother reading content from disk if true */ -+ unsigned char* pDataToFill -+){ - PgHdr *pPg; - int rc; - -@@ -3181,11 +3208,18 @@
- pPg->needRead = noContent && !pPager->alwaysRollback; - IOTRACE(("ZERO %p %d\n", pPager, pgno)); - }else{ -- rc = readDbPage(pPager, pPg, pgno); -- if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ -- pPg->pgno = 0; -- sqlite3PagerUnref(pPg); -- return rc; -+ if (pDataToFill) { -+ /* Just copy from the given memory. */ -+ memcpy(PGHDR_TO_DATA(pPg), pDataToFill, pPager->pageSize); -+ CODEC1(pPager, PGHDR_TO_DATA(pPg), pPg->pgno, 3); -+ } else { -+ /* Load from disk (old regular sqlite code path). */ -+ rc = readDbPage(pPager, pPg, pgno); -+ if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ -+ pPg->pgno = 0; -+ sqlite3PagerUnref(pPg); -+ return rc; -+ } - } - pPg->needRead = 0; - } -@@ -4416,6 +4450,68 @@
- } - #endif - -+/** -+** Addition: This will attempt to populate the database cache with -+** the first N bytes of the file, where N is the total size of the cache. -+** Because we can load this as one chunk from the disk, this is much faster -+** than loading a subset of the pages one at a time in random order. -+** -+** The pager must be initialized before this function is called. This means a -+** statement must be open that has initialized the pager and is keeping the -+** cache in memory. -+**/ -+int sqlite3PagerLoadall(Pager* pPager) -+{ -+ int i; -+ int rc; -+ int loadSize; -+ int loadPages; -+ unsigned char *fileData; -+ -+ if (pPager->dbSize < 0 || pPager->pageSize < 0) { -+ /* pager not initialized, this means a statement is not open */ -+ return SQLITE_MISUSE; -+ } -+ -+ /* compute sizes */ -+ if (pPager->mxPage < pPager->dbSize) -+ loadPages = pPager->mxPage; -+ else -+ loadPages = pPager->dbSize; -+ loadSize = loadPages * pPager->pageSize; -+ -+ rc = sqlite3OsSeek(pPager->fd, 0); -+ if (rc != SQLITE_OK) -+ return rc; -+ -+ /* load the file as one chunk */ -+ fileData = sqliteMallocRaw(loadSize); -+ if (! fileData) -+ return SQLITE_NOMEM; -+ rc = sqlite3OsRead(pPager->fd, fileData, loadSize); -+ if (rc != SQLITE_OK) { -+ sqliteFree(fileData); -+ return rc; -+ } -+ -+ /* Copy the data to each page. Note that the page numbers we pass to _get -+ * are one-based, 0 is a marker for no page. We also need to check that we -+ * haven't loaded more pages than the cache can hold total. There may have -+ * already been a few pages loaded before, so we may fill the cache before -+ * loading all of the pages we want to. -+ */ -+ for(i=1; i <= loadPages && pPager->nPage < pPager->mxPage; i++) { -+ DbPage *pPage; -+ rc = sqlite3PagerAcquire2(pPager, i, &pPage, 0, -+ &fileData[(i-1)*(i64)pPager->pageSize]); -+ if (rc != SQLITE_OK) -+ break; -+ sqlite3PagerUnref(pPage); -+ } -+ sqliteFree(fileData); -+ return SQLITE_OK; -+} -+ - /* - ** Return a pointer to the data for the specified page. - */ -Index: pager.h
-===================================================================
---- pager.h (revision 12588)
-+++ pager.h (working copy)
-@@ -93,6 +93,7 @@
- void *sqlite3PagerGetData(DbPage *); - void *sqlite3PagerGetExtra(DbPage *); - int sqlite3PagerLockingMode(Pager *, int); -+int sqlite3PagerLoadall(Pager*); - - #if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) && !defined(SQLITE_OMIT_DISKIO) - int sqlite3PagerReleaseMemory(int); -+Index: pager.h
-+===================================================================
-+--- pager.h (revision 12588)
-++++ pager.h (working copy)
-+@@ -93,6 +93,7 @@
-+ void *sqlite3PagerGetData(DbPage *); -+ void *sqlite3PagerGetExtra(DbPage *); -+ int sqlite3PagerLockingMode(Pager *, int); -++int sqlite3PagerLoadall(Pager*); -+ -+ #if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) && !defined(SQLITE_OMIT_DISKIO) -+ int sqlite3PagerReleaseMemory(int); |