Skip to content

Instantly share code, notes, and snippets.

@dshafik
Created August 9, 2011 18:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dshafik/1bdd3fb370c0449f8aa4 to your computer and use it in GitHub Desktop.
Save dshafik/1bdd3fb370c0449f8aa4 to your computer and use it in GitHub Desktop.
diff --git a/libraries/ezcomponents/Database/src/handler.php b/libraries/ezcomponents/Database/src/handler.php
index 107cb67..f137e27 100644
--- a/libraries/ezcomponents/Database/src/handler.php
+++ b/libraries/ezcomponents/Database/src/handler.php
@@ -19,9 +19,16 @@
* @package Database
* @mainclass
*/
-abstract class ezcDbHandler extends PDO
+abstract class ezcDbHandler
{
/**
+ * Internal PDO instance
+ *
+ * @var pdo
+ */
+ protected $pdo;
+
+ /**
* Stores the transaction nesting level.
*
* @var int
@@ -65,30 +72,36 @@ abstract class ezcDbHandler extends PDO
$pass = null;
$driverOptions = null;
- foreach ( $dbParams as $key => $val )
- {
- switch ( $key )
+ if (is_array($dbParams)) {
+ foreach ( $dbParams as $key => $val )
{
- case 'user':
- case 'username':
- $user = $val;
- break;
+ switch ( $key )
+ {
+ case 'user':
+ case 'username':
+ $user = $val;
+ break;
- case 'pass':
- case 'password':
- $pass = $val;
- break;
+ case 'pass':
+ case 'password':
+ $pass = $val;
+ break;
- case 'driver-opts':
- $driverOptions = $val;
- break;
+ case 'driver-opts':
+ $driverOptions = $val;
+ break;
+ }
}
}
- parent::__construct( $dsn, $user, $pass, $driverOptions );
+ if ($dsn instanceof PDO) {
+ $this->pdo = $dsn;
+ } else {
+ $this->pdo = new PDO( $dsn, $user, $pass, $driverOptions );
+ }
- $this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
- $this->setAttribute( PDO::ATTR_CASE, PDO::CASE_LOWER );
+ $this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
+ $this->pdo->setAttribute( PDO::ATTR_CASE, PDO::CASE_LOWER );
}
/**
@@ -140,7 +153,7 @@ abstract class ezcDbHandler extends PDO
$retval = true;
if ( $this->transactionNestingLevel == 0 )
{
- $retval = parent::beginTransaction();
+ $retval = $this->pdo->beginTransaction();
}
// else NOP
@@ -177,13 +190,13 @@ abstract class ezcDbHandler extends PDO
{
if ( $this->transactionErrorFlag )
{
- parent::rollback();
+ $this->pdo->rollback();
$this->transactionErrorFlag = false; // reset error flag
$retval = false;
}
else
{
- parent::commit();
+ $this->pdo->commit();
}
}
// else NOP
@@ -216,7 +229,7 @@ abstract class ezcDbHandler extends PDO
if ( $this->transactionNestingLevel == 1 )
{
- parent::rollback();
+ $this->pdo->rollback();
$this->transactionErrorFlag = false; // reset error flag
}
else
@@ -313,5 +326,15 @@ abstract class ezcDbHandler extends PDO
}
return $identifier;
}
+
+ public function __call( $method, $args )
+ {
+ $callback = array($this->pdo, $method);
+ if (is_callable($callback)) {
+ call_user_func_array($callback, $args);
+ } else {
+ throw new ezcDbException("Invalid method ($method).");
+ }
+ }
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment