. */ #namespace Doctrine::DBAL::Connections; /** * Doctrine_Connection_Sqlite * * @package Doctrine * @subpackage Connection * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @author Konsta Vesterinen * @author Lukas Smith (PEAR MDB2 library) * @version $Revision$ * @link www.phpdoctrine.org * @since 1.0 */ class Doctrine_Connection_Sqlite extends Doctrine_Connection_Common { /** * @var string $driverName the name of this connection driver */ protected $_driverName = 'Sqlite'; /** * the constructor * * @param Doctrine_Manager $manager * @param PDO $pdo database handle */ public function __construct(array $params) { parent::__construct($params); if ($this->_isConnected) { $this->_pdo->sqliteCreateFunction('mod', array('Doctrine_Expression_Sqlite', 'modImpl'), 2); $this->_pdo->sqliteCreateFunction('md5', 'md5', 1); $this->_pdo->sqliteCreateFunction('now', 'time', 0); } } /** * initializes database functions missing in sqlite * * @see Doctrine_Expression * @return void */ public function connect() { if ($this->_isConnected) { return false; } parent::connect(); $this->_pdo->sqliteCreateFunction('mod', array('Doctrine_Expression_Sqlite', 'modImpl'), 2); $this->_pdo->sqliteCreateFunction('md5', 'md5', 1); $this->_pdo->sqliteCreateFunction('now', 'time', 0); } /** * createDatabase * * @return void */ public function createDatabase() { try { if ( ! $dsn = $this->getOption('dsn')) { throw new Doctrine_Connection_Exception('You must create your Doctrine_Connection by using a valid Doctrine style dsn in order to use the create/drop database functionality'); } $info = $this->getManager()->parseDsn($dsn); $this->export->createDatabase($info['database']); return 'Successfully created database for connection "' . $this->getName() . '" at path "' . $info['database'] . '"'; } catch (Exception $e) { return $e; } } /** * dropDatabase * * @return void */ public function dropDatabase() { try { if ( ! $dsn = $this->getOption('dsn')) { throw new Doctrine_Connection_Exception('You must create your Doctrine_Connection by using a valid Doctrine style dsn in order to use the create/drop database functionality'); } $info = $this->getManager()->parseDsn($dsn); $this->export->dropDatabase($info['database']); return 'Successfully dropped database for connection "' . $this->getName() . '" at path "' . $info['database'] . '"'; } catch (Exception $e) { return $e; } } /** * Constructs the Sqlite PDO DSN. * * Overrides Connection#_constructPdoDsn(). * * @return string The DSN. */ protected function _constructPdoDsn() { $dsn = 'sqlite:'; if (isset($this->_params['path'])) { $dsn .= $this->_params['path']; } else if (isset($this->_params['memory'])) { $dsn .= ':memory:'; } return $dsn; } }