App = $app; $this->Handle = NULL; $dsn .= ';user=' . $username; parent::__construct($dsn, $username, $password); } public function Begin() { parent::beginTransaction(); } public function Commit() { parent::commit(); } public function Rollback() { parent::rollback(); } public function InsertID($name=NULL) { return parent::lastInsertId($name); } public function Prepare($statement) { ex_info('Database: Prepare: ' . $statement); if ($this->Handle !== NULL) $this->Handle->closeCursor(); $this->Handle = parent::prepare($statement, array(PDO::ATTR_STATEMENT_CLASS => array('DatabaseStatement'))); if (!$this->Handle instanceof PDOStatement) { $error_info = parent::errorInfo(); throw new Exception('Could not prepare query: ' . $error_info[2]); } return $this->Handle; } public function Execute($statement) { return parent::exec($statement); } public function Query($statement) { $prepared_statement = $this->Prepare($statement); $prepared_statement->Execute(); return $prepared_statement; } public function GetRow() { return; } static public function CreateDSN($database, $hostname=NULL, $driver='pgsql') { $dsn = $driver . ':'; if ($hostname == NULL) $hostname = 'localhost'; $dsn .= 'dbname=' . $database . ';host=' . $hostname; return $dsn; } static public function Connect($app, $identifier) { $db = $app->Conf['db'][$identifier]; $dsn = Database::CreateDSN($db['database'], $db['hostname'], $db['driver']); $dbh = new Database($app, $dsn, $db['username'], $db['password']); if ($app->Conf['debug'] === true) $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $dbh; } } class DatabaseStatement extends PDOStatement { public function BindColumn($column, &$parameter, $data_type=NULL) { return parent::bindColumn($column, $parameter, $data_type); } public function BindParam($parameter, &$variable, $data_type=NULL, $length=NULL) { return parent::bindParam($parameter, $variable, $data_type, $length); } public function BindValue($parameter, $value, $data_type=NULL) { return parent::bindValue($parameter, $value, $data_type); } public function CloseCursor() { return parent::closeCursor(); } public function ColumnCount() { return parent::columnCount(); } // PDOStatement::columnCount // PDOStatement::errorCode // PDOStatement::errorInfo public function Execute($parameters=NULL) { return parent::execute($parameters); } public function Fetch($fetch_style=NULL) { return parent::fetch($fetch_style); } public function FetchAll($fetch_style=NULL) { return parent::fetchAll($fetch_style); } public function FetchColumn($column_number=NULL) { return parent::fetchColumn($column_number); } // PDOStatement::fetchObject // PDOStatement::getAttribute // PDOStatement::getColumnMeta // PDOStatement::nextRowset public function RowCount() { return parent::rowCount(); } // PDOStatement::setAttribute // PDOStatement::setFetchMode } ?>