-
-
Save dshafik/1bdd3fb370c0449f8aa4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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