From 6e247c30d9e23e36072adef2d9ea265be9192b09 Mon Sep 17 00:00:00 2001 From: Adrien Crivelli Date: Tue, 14 Feb 2017 12:53:20 +0900 Subject: [PATCH] Drop support for SQLite 2 because it does not exist in PHP 5.6+ anymore --- docs/topics/settings.md | 8 - .../06_Largescale_with_cellcaching_sqlite.php | 15 - .../CachedObjectStorage/SQLite.php | 320 ------------------ .../CachedObjectStorageFactory.php | 3 - src/PhpSpreadsheet/Helper/Migrator.php | 2 +- tests/PhpSpreadsheetTests/SampleTest.php | 1 - 6 files changed, 1 insertion(+), 348 deletions(-) delete mode 100644 samples/06_Largescale_with_cellcaching_sqlite.php delete mode 100644 src/PhpSpreadsheet/CachedObjectStorage/SQLite.php diff --git a/docs/topics/settings.md b/docs/topics/settings.md index a8f7b422..f24adecb 100644 --- a/docs/topics/settings.md +++ b/docs/topics/settings.md @@ -168,14 +168,6 @@ When your script terminates all entries will be cleared from Wincache, regardless of the cacheTime value, so it cannot be used for persistent storage using this mechanism. -### \PhpOffice\PhpSpreadsheet\CachedObjectStorageFactory::CACHE\_TO\_SQLITE - -Uses an SQLite 2 "in-memory" database for caching cell data. Unlike -other caching methods, neither cells nor an index are held in PHP memory -- an indexed database table makes it unnecessary to hold any index in -PHP memory, which makes this the most memory-efficient of the cell -caching methods. - ### \PhpOffice\PhpSpreadsheet\CachedObjectStorageFactory::CACHE\_TO\_SQLITE3; Uses an SQLite 3 "in-memory" database for caching cell data. Unlike diff --git a/samples/06_Largescale_with_cellcaching_sqlite.php b/samples/06_Largescale_with_cellcaching_sqlite.php deleted file mode 100644 index c80505cf..00000000 --- a/samples/06_Largescale_with_cellcaching_sqlite.php +++ /dev/null @@ -1,15 +0,0 @@ -log('Enable Cell Caching using ' . $cacheMethod . ' method'); -} else { - $helper->log('ERROR: Unable to set Cell Caching using ' . $cacheMethod . ' method, reverting to memory'); -} - -$spreadsheet = require __DIR__ . '/templates/largeSpreadsheet.php'; - -// Save -$helper->write($spreadsheet, __FILE__); diff --git a/src/PhpSpreadsheet/CachedObjectStorage/SQLite.php b/src/PhpSpreadsheet/CachedObjectStorage/SQLite.php deleted file mode 100644 index 2139b950..00000000 --- a/src/PhpSpreadsheet/CachedObjectStorage/SQLite.php +++ /dev/null @@ -1,320 +0,0 @@ -currentCellIsDirty && !empty($this->currentObjectID)) { - $this->currentObject->detach(); - - if (!$this->DBHandle->queryExec('INSERT OR REPLACE INTO kvp_' . $this->TableName . " VALUES('" . $this->currentObjectID . "','" . sqlite_escape_string(serialize($this->currentObject)) . "')")) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } - $this->currentCellIsDirty = false; - } - $this->currentObjectID = $this->currentObject = null; - } - - /** - * Add or Update a cell in cache identified by coordinate address. - * - * @param string $pCoord Coordinate address of the cell to update - * @param \PhpOffice\PhpSpreadsheet\Cell $cell Cell to update - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - * - * @return \PhpOffice\PhpSpreadsheet\Cell - */ - public function addCacheData($pCoord, \PhpOffice\PhpSpreadsheet\Cell $cell) - { - if (($pCoord !== $this->currentObjectID) && ($this->currentObjectID !== null)) { - $this->storeData(); - } - - $this->currentObjectID = $pCoord; - $this->currentObject = $cell; - $this->currentCellIsDirty = true; - - return $cell; - } - - /** - * Get cell at a specific coordinate. - * - * @param string $pCoord Coordinate of the cell - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - * - * @return \PhpOffice\PhpSpreadsheet\Cell Cell that was found, or null if not found - */ - public function getCacheData($pCoord) - { - if ($pCoord === $this->currentObjectID) { - return $this->currentObject; - } - $this->storeData(); - - $query = 'SELECT value FROM kvp_' . $this->TableName . " WHERE id='" . $pCoord . "'"; - $cellResultSet = $this->DBHandle->query($query, SQLITE_ASSOC); - if ($cellResultSet === false) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } elseif ($cellResultSet->numRows() == 0) { - // Return null if requested entry doesn't exist in cache - return null; - } - - // Set current entry to the requested entry - $this->currentObjectID = $pCoord; - - $cellResult = $cellResultSet->fetchSingle(); - $this->currentObject = unserialize($cellResult); - // Re-attach this as the cell's parent - $this->currentObject->attach($this); - - // Return requested entry - return $this->currentObject; - } - - /** - * Is a value set for an indexed cell? - * - * @param string $pCoord Coordinate address of the cell to check - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - * - * @return bool - */ - public function isDataSet($pCoord) - { - if ($pCoord === $this->currentObjectID) { - return true; - } - - // Check if the requested entry exists in the cache - $query = 'SELECT id FROM kvp_' . $this->TableName . " WHERE id='" . $pCoord . "'"; - $cellResultSet = $this->DBHandle->query($query, SQLITE_ASSOC); - if ($cellResultSet === false) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } elseif ($cellResultSet->numRows() == 0) { - // Return null if requested entry doesn't exist in cache - return false; - } - - return true; - } - - /** - * Delete a cell in cache identified by coordinate address. - * - * @param string $pCoord Coordinate address of the cell to delete - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - */ - public function deleteCacheData($pCoord) - { - if ($pCoord === $this->currentObjectID) { - $this->currentObject->detach(); - $this->currentObjectID = $this->currentObject = null; - } - - // Check if the requested entry exists in the cache - $query = 'DELETE FROM kvp_' . $this->TableName . " WHERE id='" . $pCoord . "'"; - if (!$this->DBHandle->queryExec($query)) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } - - $this->currentCellIsDirty = false; - } - - /** - * Move a cell object from one address to another. - * - * @param string $fromAddress Current address of the cell to move - * @param string $toAddress Destination address of the cell to move - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - * - * @return bool - */ - public function moveCell($fromAddress, $toAddress) - { - if ($fromAddress === $this->currentObjectID) { - $this->currentObjectID = $toAddress; - } - - $query = 'DELETE FROM kvp_' . $this->TableName . " WHERE id='" . $toAddress . "'"; - $result = $this->DBHandle->exec($query); - if ($result === false) { - throw new \PhpOffice\PhpSpreadsheet\Exception($this->DBHandle->lastErrorMsg()); - } - - $query = 'UPDATE kvp_' . $this->TableName . " SET id='" . $toAddress . "' WHERE id='" . $fromAddress . "'"; - $result = $this->DBHandle->exec($query); - if ($result === false) { - throw new \PhpOffice\PhpSpreadsheet\Exception($this->DBHandle->lastErrorMsg()); - } - - return true; - } - - /** - * Get a list of all cell addresses currently held in cache. - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - * - * @return string[] - */ - public function getCellList() - { - if ($this->currentObjectID !== null) { - $this->storeData(); - } - - $query = 'SELECT id FROM kvp_' . $this->TableName; - $cellIdsResult = $this->DBHandle->unbufferedQuery($query, SQLITE_ASSOC); - if ($cellIdsResult === false) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } - - $cellKeys = []; - foreach ($cellIdsResult as $row) { - $cellKeys[] = $row['id']; - } - - return $cellKeys; - } - - /** - * Clone the cell collection. - * - * @param \PhpOffice\PhpSpreadsheet\Worksheet $parent The new worksheet that we're copying to - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - */ - public function copyCellCollection(\PhpOffice\PhpSpreadsheet\Worksheet $parent) - { - $this->currentCellIsDirty; - $this->storeData(); - - // Get a new id for the new table name - $tableName = str_replace('.', '_', $this->getUniqueID()); - if (!$this->DBHandle->queryExec('CREATE TABLE kvp_' . $tableName . ' (id VARCHAR(12) PRIMARY KEY, value BLOB) - AS SELECT * FROM kvp_' . $this->TableName) - ) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } - - // Copy the existing cell cache file - $this->TableName = $tableName; - } - - /** - * Clear the cell collection and disconnect from our parent. - */ - public function unsetWorksheetCells() - { - if (!is_null($this->currentObject)) { - $this->currentObject->detach(); - $this->currentObject = $this->currentObjectID = null; - } - // detach ourself from the worksheet, so that it can then delete this object successfully - $this->parent = null; - - // Close down the temporary cache file - $this->__destruct(); - } - - /** - * Initialise this new cell collection. - * - * @param \PhpOffice\PhpSpreadsheet\Worksheet $parent The worksheet for this cell collection - * - * @throws \PhpOffice\PhpSpreadsheet\Exception - */ - public function __construct(\PhpOffice\PhpSpreadsheet\Worksheet $parent) - { - parent::__construct($parent); - if (is_null($this->DBHandle)) { - $this->TableName = str_replace('.', '_', $this->getUniqueID()); - $_DBName = ':memory:'; - - $this->DBHandle = new SQLiteDatabase($_DBName); - if ($this->DBHandle === false) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } - if (!$this->DBHandle->queryExec('CREATE TABLE kvp_' . $this->TableName . ' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) { - throw new \PhpOffice\PhpSpreadsheet\Exception(sqlite_error_string($this->DBHandle->lastError())); - } - } - } - - /** - * Destroy this cell collection. - */ - public function __destruct() - { - if (!is_null($this->DBHandle)) { - $this->DBHandle->queryExec('DROP TABLE kvp_' . $this->TableName); - } - $this->DBHandle = null; - } - - /** - * Identify whether the caching method is currently available - * Some methods are dependent on the availability of certain extensions being enabled in the PHP build. - * - * @return bool - */ - public static function cacheMethodIsAvailable() - { - if (!function_exists('sqlite_open')) { - return false; - } - - return true; - } -} diff --git a/src/PhpSpreadsheet/CachedObjectStorageFactory.php b/src/PhpSpreadsheet/CachedObjectStorageFactory.php index e8af0bec..6b81eaf5 100644 --- a/src/PhpSpreadsheet/CachedObjectStorageFactory.php +++ b/src/PhpSpreadsheet/CachedObjectStorageFactory.php @@ -35,7 +35,6 @@ class CachedObjectStorageFactory const CACHE_TO_MEMCACHE = 'Memcache'; const CACHE_TO_PHPTEMP = 'PHPTemp'; const CACHE_TO_WINCACHE = 'Wincache'; - const CACHE_TO_SQLITE = 'SQLite'; const CACHE_TO_SQLITE3 = 'SQLite3'; /** @@ -67,7 +66,6 @@ class CachedObjectStorageFactory self::CACHE_TO_APC, self::CACHE_TO_MEMCACHE, self::CACHE_TO_WINCACHE, - self::CACHE_TO_SQLITE, self::CACHE_TO_SQLITE3, ]; @@ -98,7 +96,6 @@ class CachedObjectStorageFactory self::CACHE_TO_WINCACHE => [ 'cacheTime' => 600, ], - self::CACHE_TO_SQLITE => [], self::CACHE_TO_SQLITE3 => [], ]; diff --git a/src/PhpSpreadsheet/Helper/Migrator.php b/src/PhpSpreadsheet/Helper/Migrator.php index 6615c25d..a00dbb52 100644 --- a/src/PhpSpreadsheet/Helper/Migrator.php +++ b/src/PhpSpreadsheet/Helper/Migrator.php @@ -95,7 +95,7 @@ class Migrator 'PHPExcel_CachedObjectStorage_MemoryGZip' => '\\PhpOffice\\PhpSpreadsheet\\CachedObjectStorage\\MemoryGZip', 'PHPExcel_CachedObjectStorage_MemorySerialized' => '\\PhpOffice\\PhpSpreadsheet\\CachedObjectStorage\\MemorySerialized', 'PHPExcel_CachedObjectStorage_PHPTemp' => '\\PhpOffice\\PhpSpreadsheet\\CachedObjectStorage\\PHPTemp', - 'PHPExcel_CachedObjectStorage_SQLite' => '\\PhpOffice\\PhpSpreadsheet\\CachedObjectStorage\\SQLite', + 'PHPExcel_CachedObjectStorage_SQLite' => '\\PhpOffice\\PhpSpreadsheet\\CachedObjectStorage\\SQLite3', 'PHPExcel_CachedObjectStorage_SQLite3' => '\\PhpOffice\\PhpSpreadsheet\\CachedObjectStorage\\SQLite3', 'PHPExcel_CachedObjectStorage_Wincache' => '\\PhpOffice\\PhpSpreadsheet\\CachedObjectStorage\\Wincache', 'PHPExcel_CalcEngine_CyclicReferenceStack' => '\\PhpOffice\\PhpSpreadsheet\\CalcEngine\\CyclicReferenceStack', diff --git a/tests/PhpSpreadsheetTests/SampleTest.php b/tests/PhpSpreadsheetTests/SampleTest.php index d30c5a26..0a4a4337 100644 --- a/tests/PhpSpreadsheetTests/SampleTest.php +++ b/tests/PhpSpreadsheetTests/SampleTest.php @@ -36,7 +36,6 @@ class SampleTest extends \PHPUnit_Framework_TestCase $tooLongToBeCovered = [ '06 Largescale', '06 Largescale with cellcaching', - '06 Largescale with cellcaching sqlite', '06 Largescale with cellcaching sqlite3', '13 CalculationCyclicFormulae', ];