ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
SQLite3.php
Go to the documentation of this file.
1 <?php
37 
43  private $_TableName = null;
44 
50  private $_DBHandle = null;
51 
57  private $_selectQuery;
58 
64  private $_insertQuery;
65 
71  private $_updateQuery;
72 
78  private $_deleteQuery;
79 
87  protected function _storeData() {
88  if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
89  $this->_currentObject->detach();
90 
91  $this->_insertQuery->bindValue('id',$this->_currentObjectID,SQLITE3_TEXT);
92  $this->_insertQuery->bindValue('data',serialize($this->_currentObject),SQLITE3_BLOB);
93  $result = $this->_insertQuery->execute();
94  if ($result === false)
95  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
96  $this->_currentCellIsDirty = false;
97  }
98  $this->_currentObjectID = $this->_currentObject = null;
99  } // function _storeData()
100 
101 
110  public function addCacheData($pCoord, PHPExcel_Cell $cell) {
111  if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
112  $this->_storeData();
113  }
114 
115  $this->_currentObjectID = $pCoord;
116  $this->_currentObject = $cell;
117  $this->_currentCellIsDirty = true;
118 
119  return $cell;
120  } // function addCacheData()
121 
122 
130  public function getCacheData($pCoord) {
131  if ($pCoord === $this->_currentObjectID) {
132  return $this->_currentObject;
133  }
134  $this->_storeData();
135 
136  $this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
137  $cellResult = $this->_selectQuery->execute();
138  if ($cellResult === FALSE) {
139  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
140  }
141  $cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
142  if ($cellData === FALSE) {
143  // Return null if requested entry doesn't exist in cache
144  return NULL;
145  }
146 
147  // Set current entry to the requested entry
148  $this->_currentObjectID = $pCoord;
149 
150  $this->_currentObject = unserialize($cellData['value']);
151  // Re-attach this as the cell's parent
152  $this->_currentObject->attach($this);
153 
154  // Return requested entry
155  return $this->_currentObject;
156  } // function getCacheData()
157 
158 
165  public function isDataSet($pCoord) {
166  if ($pCoord === $this->_currentObjectID) {
167  return TRUE;
168  }
169 
170  // Check if the requested entry exists in the cache
171  $this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
172  $cellResult = $this->_selectQuery->execute();
173  if ($cellResult === FALSE) {
174  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
175  }
176  $cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
177 
178  return ($cellData === FALSE) ? FALSE : TRUE;
179  } // function isDataSet()
180 
181 
188  public function deleteCacheData($pCoord) {
189  if ($pCoord === $this->_currentObjectID) {
190  $this->_currentObject->detach();
191  $this->_currentObjectID = $this->_currentObject = NULL;
192  }
193 
194  // Check if the requested entry exists in the cache
195  $this->_deleteQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
196  $result = $this->_deleteQuery->execute();
197  if ($result === FALSE)
198  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
199 
200  $this->_currentCellIsDirty = FALSE;
201  } // function deleteCacheData()
202 
203 
211  public function moveCell($fromAddress, $toAddress) {
212  if ($fromAddress === $this->_currentObjectID) {
213  $this->_currentObjectID = $toAddress;
214  }
215 
216  $this->_deleteQuery->bindValue('id',$toAddress,SQLITE3_TEXT);
217  $result = $this->_deleteQuery->execute();
218  if ($result === false)
219  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
220 
221  $this->_updateQuery->bindValue('toid',$toAddress,SQLITE3_TEXT);
222  $this->_updateQuery->bindValue('fromid',$fromAddress,SQLITE3_TEXT);
223  $result = $this->_updateQuery->execute();
224  if ($result === false)
225  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
226 
227  return TRUE;
228  } // function moveCell()
229 
230 
236  public function getCellList() {
237  if ($this->_currentObjectID !== null) {
238  $this->_storeData();
239  }
240 
241  $query = "SELECT id FROM kvp_".$this->_TableName;
242  $cellIdsResult = $this->_DBHandle->query($query);
243  if ($cellIdsResult === false)
244  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
245 
246  $cellKeys = array();
247  while ($row = $cellIdsResult->fetchArray(SQLITE3_ASSOC)) {
248  $cellKeys[] = $row['id'];
249  }
250 
251  return $cellKeys;
252  } // function getCellList()
253 
254 
261  public function copyCellCollection(PHPExcel_Worksheet $parent) {
263  $this->_storeData();
264 
265  // Get a new id for the new table name
266  $tableName = str_replace('.','_',$this->_getUniqueID());
267  if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)
268  AS SELECT * FROM kvp_'.$this->_TableName))
269  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
270 
271  // Copy the existing cell cache file
272  $this->_TableName = $tableName;
273  } // function copyCellCollection()
274 
275 
281  public function unsetWorksheetCells() {
282  if(!is_null($this->_currentObject)) {
283  $this->_currentObject->detach();
284  $this->_currentObject = $this->_currentObjectID = null;
285  }
286  // detach ourself from the worksheet, so that it can then delete this object successfully
287  $this->_parent = null;
288 
289  // Close down the temporary cache file
290  $this->__destruct();
291  } // function unsetWorksheetCells()
292 
293 
299  public function __construct(PHPExcel_Worksheet $parent) {
300  parent::__construct($parent);
301  if (is_null($this->_DBHandle)) {
302  $this->_TableName = str_replace('.','_',$this->_getUniqueID());
303  $_DBName = ':memory:';
304 
305  $this->_DBHandle = new SQLite3($_DBName);
306  if ($this->_DBHandle === false)
307  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
308  if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)'))
309  throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
310  }
311 
312  $this->_selectQuery = $this->_DBHandle->prepare("SELECT value FROM kvp_".$this->_TableName." WHERE id = :id");
313  $this->_insertQuery = $this->_DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES(:id,:data)");
314  $this->_updateQuery = $this->_DBHandle->prepare("UPDATE kvp_".$this->_TableName." SET id=:toId WHERE id=:fromId");
315  $this->_deleteQuery = $this->_DBHandle->prepare("DELETE FROM kvp_".$this->_TableName." WHERE id = :id");
316  } // function __construct()
317 
318 
322  public function __destruct() {
323  if (!is_null($this->_DBHandle)) {
324  $this->_DBHandle->exec('DROP TABLE kvp_'.$this->_TableName);
325  $this->_DBHandle->close();
326  }
327  $this->_DBHandle = null;
328  } // function __destruct()
329 
330 
337  public static function cacheMethodIsAvailable() {
338  if (!class_exists('SQLite3',FALSE)) {
339  return false;
340  }
341 
342  return true;
343  }
344 
345 }
addCacheData($pCoord, PHPExcel_Cell $cell)
Add or Update a cell in cache identified by coordinate address.
Definition: SQLite3.php:110
$result
deleteCacheData($pCoord)
Delete a cell in cache identified by coordinate address.
Definition: SQLite3.php:188
_storeData()
Store cell data in cache for the current cell object if it&#39;s "dirty", and the &#39;nullify&#39; the current c...
Definition: SQLite3.php:87
isDataSet($pCoord)
Is a value set for an indexed cell?
Definition: SQLite3.php:165
static cacheMethodIsAvailable()
Identify whether the caching method is currently available Some methods are dependent on the availabi...
Definition: SQLite3.php:337
getCellList()
Get a list of all cell addresses currently held in cache.
Definition: SQLite3.php:236
moveCell($fromAddress, $toAddress)
Move a cell object from one address to another.
Definition: SQLite3.php:211
unsetWorksheetCells()
Clear the cell collection and disconnect from our parent.
Definition: SQLite3.php:281
getCacheData($pCoord)
Get cell at a specific coordinate.
Definition: SQLite3.php:130
_getUniqueID()
Generate a unique ID for cache referencing.
Definition: CacheBase.php:311
__construct(PHPExcel_Worksheet $parent)
Initialise this new cell collection.
Definition: SQLite3.php:299
copyCellCollection(PHPExcel_Worksheet $parent)
Clone the cell collection.
Definition: SQLite3.php:261
Create styles array
The data for the language used.
__destruct()
Destroy this cell collection.
Definition: SQLite3.php:322