registerConnection($connection); $this->registerStatementPrototype(($statementPrototype) ?: new Statement()); $this->registerResultPrototype(($resultPrototype) ?: new Result()); } /** * @param Profiler\ProfilerInterface $profiler * @return IbmDb2 */ public function setProfiler(Profiler\ProfilerInterface $profiler) { $this->profiler = $profiler; if ($this->connection instanceof Profiler\ProfilerAwareInterface) { $this->connection->setProfiler($profiler); } if ($this->statementPrototype instanceof Profiler\ProfilerAwareInterface) { $this->statementPrototype->setProfiler($profiler); } return $this; } /** * @return null|Profiler\ProfilerInterface */ public function getProfiler() { return $this->profiler; } /** * @param Connection $connection * @return IbmDb2 */ public function registerConnection(Connection $connection) { $this->connection = $connection; $this->connection->setDriver($this); return $this; } /** * @param Statement $statementPrototype * @return IbmDb2 */ public function registerStatementPrototype(Statement $statementPrototype) { $this->statementPrototype = $statementPrototype; $this->statementPrototype->setDriver($this); return $this; } /** * @param Result $resultPrototype * @return IbmDb2 */ public function registerResultPrototype(Result $resultPrototype) { $this->resultPrototype = $resultPrototype; return $this; } /** * Get database platform name * * @param string $nameFormat * @return string */ public function getDatabasePlatformName($nameFormat = self::NAME_FORMAT_CAMELCASE) { if ($nameFormat == self::NAME_FORMAT_CAMELCASE) { return 'IbmDb2'; } else { return 'IBM DB2'; } } /** * Check environment * * @return bool */ public function checkEnvironment() { if (!extension_loaded('ibm_db2')) { throw new Exception\RuntimeException('The ibm_db2 extension is required by this driver.'); } } /** * Get connection * * @return Connection */ public function getConnection() { return $this->connection; } /** * Create statement * * @param string|resource $sqlOrResource * @return Statement */ public function createStatement($sqlOrResource = null) { $statement = clone $this->statementPrototype; if (is_resource($sqlOrResource) && get_resource_type($sqlOrResource) == 'DB2 Statement') { $statement->setResource($sqlOrResource); } else { if (is_string($sqlOrResource)) { $statement->setSql($sqlOrResource); } elseif ($sqlOrResource !== null) { throw new Exception\InvalidArgumentException( __FUNCTION__ . ' only accepts an SQL string or a ibm_db2 resource' ); } if (!$this->connection->isConnected()) { $this->connection->connect(); } $statement->initialize($this->connection->getResource()); } return $statement; } /** * Create result * * @param resource $resource * @return Result */ public function createResult($resource) { $result = clone $this->resultPrototype; $result->initialize($resource, $this->connection->getLastGeneratedValue()); return $result; } /** * Get prepare type * * @return array */ public function getPrepareType() { return self::PARAMETERIZATION_POSITIONAL; } /** * Format parameter name * * @param string $name * @param mixed $type * @return string */ public function formatParameterName($name, $type = null) { return '?'; } /** * Get last generated value * * @return mixed */ public function getLastGeneratedValue() { return $this->connection->getLastGeneratedValue(); } }