Firebird exceptions

This commit is contained in:
Timothy Warren 2012-03-07 14:50:45 -05:00
parent b75209d486
commit e89a2cedba
2 changed files with 28 additions and 16 deletions

View File

@ -19,7 +19,7 @@
*/ */
class firebird extends DB_PDO { class firebird extends DB_PDO {
protected $statement, $trans, $count, $result; protected $statement, $trans, $count, $result, $conn;
/** /**
* Open the link to the database * Open the link to the database
@ -34,13 +34,12 @@ class firebird extends DB_PDO {
// pass around the resource that this provides. // pass around the resource that this provides.
// Since the resource is not required by the // Since the resource is not required by the
// functions that would use it, I'm dumping it. // functions that would use it, I'm dumping it.
$conn = @ibase_connect($dbpath, $user, $pass, 'utf-8'); $this->conn = ibase_connect($dbpath, $user, $pass, 'utf-8');
// Throw an exception to make this match other pdo classes // Throw an exception to make this match other pdo classes
if ( ! is_resource($conn)) if ( ! is_resource($this->conn))
{ {
throw new PDOException(ibase_errmsg()); throw new PDOException(ibase_errcode() . "\n" . ibase_errmsg());
die();
} }
$class = __CLASS__."_sql"; $class = __CLASS__."_sql";
@ -96,10 +95,9 @@ class firebird extends DB_PDO {
// Throw the error as a exception // Throw the error as a exception
// if there is one // if there is one
if ($this->statement === FALSE) if (ibase_errmsg() !== FALSE)
{ {
throw new PDOException(ibase_errmsg()); throw new PDOException(ibase_errcode() . "\n" . ibase_errmsg());
die();
} }
return $this->statement; return $this->statement;
@ -118,17 +116,24 @@ class firebird extends DB_PDO {
switch($fetch_style) switch($fetch_style)
{ {
case PDO::FETCH_OBJ: case PDO::FETCH_OBJ:
return ibase_fetch_object($this->statement, IBASE_FETCH_BLOBS); $row = @ibase_fetch_object($this->statement, IBASE_FETCH_BLOBS);
break; break;
case PDO::FETCH_NUM: case PDO::FETCH_NUM:
return ibase_fetch_row($this->statement, IBASE_FETCH_BLOBS); $row = @ibase_fetch_row($this->statement, IBASE_FETCH_BLOBS);
break; break;
default: default:
return ibase_fetch_assoc($this->statement, IBASE_FETCH_BLOBS); $row = @ibase_fetch_assoc($this->statement, IBASE_FETCH_BLOBS);
break; break;
} }
if (ibase_errmsg() !== FALSE)
{
throw new PDOException(ibase_errcode() . "\n" . ibase_errmsg());
}
return $row;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@ -168,8 +173,7 @@ class firebird extends DB_PDO {
// Throw the error as an exception // Throw the error as an exception
if ($this->statement === FALSE) if ($this->statement === FALSE)
{ {
throw new PDOException(ibase_errmsg()); throw new PDOException(ibase_errcode() . "\n" . ibase_errmsg());
die();
} }
return $this->statement; return $this->statement;
@ -271,7 +275,7 @@ SQL;
*/ */
public function beginTransaction() public function beginTransaction()
{ {
if(($this->trans = ibase_trans()) !== NULL) if(($this->trans = ibase_trans($this->conn, IBASE_DEFAULT)) !== FALSE)
{ {
return TRUE; return TRUE;
} }

View File

@ -33,13 +33,21 @@ class FirebirdTest extends UnitTestCase {
function setUp() function setUp()
{ {
$dbpath = TEST_DIR.DS.'test_dbs'.DS.'FB_TEST_DB.FDB'; $dbpath = TEST_DIR.DS.'test_dbs'.DS.'FB_TEST_DB.FDB';
$this->db = new Firebird($dbpath);
try
{
$this->db = new Firebird('localhost:'.$dbpath, 'sysdba', 'masterkey');
}
catch(PDOException $e)
{
die('Firebird connection fail: '.$e->getMessage());
}
$this->tables = $this->db->get_tables(); $this->tables = $this->db->get_tables();
} }
function tearDown() function tearDown()
{ {
unset($this->db);
unset($this->tables); unset($this->tables);
} }