- Sqlite now handles concurrency with transactions
This commit is contained in:
		
							parent
							
								
									0fd6889c6f
								
							
						
					
					
						commit
						e0ec140661
					
				| @ -27,6 +27,7 @@ class SQLite implements AdapterInterface, MigrateInterface, SqlAdapterInterface | ||||
|     public function connect() : PdoObject | ||||
|     { | ||||
|         try { | ||||
|             #$pdo = new PdoObject($this->buildDataSourceName(), null, null);
 | ||||
|             $pdo = new PdoObject\SqlitePdoObject($this->buildDataSourceName(), null, null); | ||||
|             $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); | ||||
|             $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); | ||||
|  | ||||
| @ -56,7 +56,7 @@ class PdoObject extends PDO { | ||||
|             } | ||||
|         } | ||||
|         catch (\Throwable $e) { | ||||
|             throw new \PdoException($e->getMessage() . " `$sql` with data:" . json_encode($parameters)); | ||||
|             throw new \PdoException($e->getMessage() . " `$sql` with data:" . json_encode($parameters), (int) $e->getCode(), $e); | ||||
|         } | ||||
|          | ||||
|         return null; | ||||
| @ -83,7 +83,7 @@ class PdoObject extends PDO { | ||||
|         $this->lastInsertId = null; | ||||
| 
 | ||||
|         try { | ||||
|             if ( ! $this->inTransaction() ) { | ||||
|             if (! $this->inTransaction()) { | ||||
|                 $this->beginTransaction(); | ||||
|             } | ||||
| 
 | ||||
| @ -113,8 +113,6 @@ class PdoObject extends PDO { | ||||
|         catch (\Throwable $e) { | ||||
|             throw $e; | ||||
|         } | ||||
| 
 | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     protected function bindVariables(PDOStatement $statement, array &$parameters) : void | ||||
|  | ||||
| @ -12,7 +12,7 @@ class SqlPdoObject extends \Ulmus\Common\PdoObject | ||||
|             return $this->openTransaction(); | ||||
|         } | ||||
| 
 | ||||
|         return $this->exec('SAVEPOINT transaction_'.$this->openedTransaction) !== false; | ||||
|         return $this->exec("SAVEPOINT transaction_{$this->openedTransaction}") !== false; | ||||
|     } | ||||
| 
 | ||||
|     public function commit() : bool | ||||
| @ -21,16 +21,19 @@ class SqlPdoObject extends \Ulmus\Common\PdoObject | ||||
|             return parent::commit(); | ||||
|         } | ||||
| 
 | ||||
|         return false; | ||||
|         return $this->exec("RELEASE SAVEPOINT transaction_{$this->openedTransaction}") !== false; | ||||
|     } | ||||
| 
 | ||||
|     public function rollback() : bool | ||||
|     { | ||||
|         if (0 !== $this->openedTransaction) { | ||||
|         if ($this->openedTransaction > 1) { | ||||
|             return $this->exec('ROLLBACK TO transaction_' . $this->openedTransaction--) !== false; | ||||
|         } | ||||
|         elseif ($this->openedTransaction-- === 1) { | ||||
|             return parent::rollback(); | ||||
|         } | ||||
| 
 | ||||
|         return parent::rollback(); | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     protected function openTransaction() : bool | ||||
|  | ||||
| @ -17,6 +17,19 @@ class SqlitePdoObject extends SqlPdoObject | ||||
|             return $this->exec("COMMIT") !== false; | ||||
|         } | ||||
| 
 | ||||
|         return $this->exec("RELEASE SAVEPOINT transaction_{$this->openedTransaction}") !== false; | ||||
|     } | ||||
| 
 | ||||
|     public function rollback() : bool | ||||
|     { | ||||
|         if ($this->openedTransaction > 1) { | ||||
|             return $this->exec('ROLLBACK TO transaction_' . $this->openedTransaction--) !== false; | ||||
|         } | ||||
|         elseif ($this->openedTransaction-- === 1) { | ||||
|             # We must do it manually since opening a transaction manually stucks PDO into thinking we've got no transaction opened
 | ||||
|             return $this->exec('ROLLBACK') !== false; | ||||
|         } | ||||
| 
 | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -20,6 +20,6 @@ abstract class SearchParameter { | ||||
| 
 | ||||
|     public function getParameters() : array | ||||
|     { | ||||
|         return array_filter((array) $this->parameter); | ||||
|         return array_filter((array) ( $this->parameter ?? [] )); | ||||
|     } | ||||
| } | ||||
| @ -76,7 +76,8 @@ trait SearchRequestFromRequestTrait | ||||
|                     case $attribute instanceof SearchManual: | ||||
|                         if ($attribute->toggle) { | ||||
|                             $this->$propertyName = !empty($value); | ||||
|                         } elseif ($value !== null) { | ||||
|                         } | ||||
|                         elseif ($value !== null) { | ||||
|                             foreach ($property->getTypes() as $type) { | ||||
|                                 $enum = $type->type; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user