logger = new NullLogger(); $this->connectionUri = $connectionString; $codePage = $this->connectionUri->getQueryPart("codepage"); $codePage = ($codePage == "") ? 'UTF8' : $codePage; $tns = DbOci8Driver::getTnsString($this->connectionUri); $this->conn = oci_connect( $this->connectionUri->getUsername(), $this->connectionUri->getPassword(), $tns, $codePage ); if (!$this->conn) { $error = oci_error(); throw new DatabaseException($error['message']); } } /** * @param Uri $connUri * @return string */ public static function getTnsString(Uri $connUri) { $protocol = $connUri->getQueryPart("protocol"); $protocol = ($protocol == "") ? 'TCP' : $protocol; $port = $connUri->getPort(); $port = ($port == "") ? 1521 : $port; $svcName = preg_replace('~^/~', '', $connUri->getPath()); $host = $connUri->getHost(); return "(DESCRIPTION = " . " (ADDRESS = (PROTOCOL = $protocol)(HOST = $host)(PORT = $port)) " . " (CONNECT_DATA = (SERVICE_NAME = $svcName)) " . ")"; } public function __destruct() { $this->conn = null; } /** * @param $sql * @param null $array * @return resource * @throws DatabaseException */ protected function getOci8Cursor($sql, $array = null) { list($query, $array) = SqlBind::parseSQL($this->connectionUri, $sql, $array); $this->logger->debug("SQL: $query, Params: " . json_encode($array)); // Prepare the statement $stid = oci_parse($this->conn, $query); if (!$stid) { $error = oci_error($this->conn); throw new DatabaseException($error['message']); } // Bind the parameters if (is_array($array)) { foreach ($array as $key => $value) { oci_bind_by_name($stid, ":$key", $value); } } // Perform the logic of the query $result = oci_execute($stid, $this->transaction); // Check if is OK; if (!$result) { $error = oci_error($stid); throw new DatabaseException($error['message']); } return $stid; } /** * @param $sql * @param null $params * @return Oci8Iterator * @throws DatabaseException */ public function getIterator($sql, $params = null) { $cur = $this->getOci8Cursor($sql, $params); return new Oci8Iterator($cur); } /** * @param $sql * @param null $array * @return null * @throws DatabaseException */ public function getScalar($sql, $array = null) { $cur = $this->getOci8Cursor($sql, $array); $row = oci_fetch_array($cur, OCI_RETURN_NULLS); if ($row) { $scalar = $row[0]; } else { $scalar = null; } oci_free_cursor($cur); return $scalar; } /** * @param $tablename * @return array * @throws DatabaseException */ public function getAllFields($tablename) { $cur = $this->getOci8Cursor(SqlHelper::createSafeSQL("select * from :table", array(':table' => $tablename))); $ncols = oci_num_fields($cur); $fields = array(); for ($i = 1; $i <= $ncols; $i++) { $fields[] = strtolower(oci_field_name($cur, $i)); } oci_free_statement($cur); return $fields; } public function beginTransaction() { $this->logger->debug("SQL: Begin Transaction"); $this->transaction = OCI_NO_AUTO_COMMIT; } /** * @throws DatabaseException */ public function commitTransaction() { $this->logger->debug("SQL: Commit Transaction"); if ($this->transaction == OCI_COMMIT_ON_SUCCESS) { throw new DatabaseException('No transaction for commit'); } $this->transaction = OCI_COMMIT_ON_SUCCESS; $result = oci_commit($this->conn); if (!$result) { $error = oci_error($this->conn); throw new DatabaseException($error['message']); } } /** * @throws DatabaseException */ public function rollbackTransaction() { $this->logger->debug("SQL: Rollback Transaction"); if ($this->transaction == OCI_COMMIT_ON_SUCCESS) { throw new DatabaseException('No transaction for rollback'); } $this->transaction = OCI_COMMIT_ON_SUCCESS; oci_rollback($this->conn); } /** * @param $sql * @param null $array * @return bool * @throws DatabaseException */ public function execute($sql, $array = null) { $cur = $this->getOci8Cursor($sql, $array); oci_free_cursor($cur); return true; } /** * @return resource */ public function getDbConnection() { return $this->conn; } /** * @param $name * @throws NotImplementedException */ public function getAttribute($name) { throw new NotImplementedException('Method not implemented for OCI Driver'); } /** * @param $name * @param $value * @throws NotImplementedException */ public function setAttribute($name, $value) { throw new NotImplementedException('Method not implemented for OCI Driver'); } /** * @param $sql * @param null $array * @throws NotImplementedException */ public function executeAndGetId($sql, $array = null) { throw new NotImplementedException('Method not implemented for OCI Driver'); } /** * @return \ByJG\AnyDataset\Db\DbFunctionsInterface|void * @throws NotImplementedException */ public function getDbHelper() { throw new NotImplementedException('Method not implemented for OCI Driver'); } /** * @return Uri */ public function getUri() { return $this->connectionUri; } /** * @throws NotImplementedException */ public function isSupportMultRowset() { throw new NotImplementedException('Method not implemented for OCI Driver'); } /** * @param $multipleRowSet * @throws NotImplementedException */ public function setSupportMultRowset($multipleRowSet) { throw new NotImplementedException('Method not implemented for OCI Driver'); } public function reconnect($force = false) { throw new NotImplementedException('Method not implemented for OCI Driver'); } public function disconnect() { throw new NotImplementedException('Method not implemented for OCI Driver'); } public function isConnected($softCheck = false, $throwError = false) { throw new NotImplementedException('Method not implemented for OCI Driver'); } public function enableLogger(LoggerInterface $logger) { $this->logger = $logger; } public function log($message, $context = []) { $this->logger->debug($message, $context); } }__halt_compiler();----SIGNATURE:----1oZwFSTg9+7zPGFNuttrjQ+d2coPULt+8PZDz6kLHijq4vxGR7UcdT+Lscp+NkK2Yuznz6ARCF1jMABeKlx7tsjqodu+6wU6bVLCeOFfalA1uTHQsOK236wvk5sOcy/nIUGi5trUpiosbvrAAMC63MnSpVNZWarOr1T3C5am4L8SmDA3PCNjA/BtJodH3/UZEtmOEcApiy8YCZOZVbHX4qJ9qKEG6+h8HuVjAbXItqmNL2rwcoNj5n8ieSQ+KCwX7SIUqb55nvmZK79FGcXQE0GS+f8LgpZ5bvxMV+SBM3qOHeNrP0UqvM6K4d6iFUTUsZKYA6CsTSWXJ56K6bQSPA4tnTCEfS5i5XbPDu5FXyvt+uWIvAabqC9l9Tn5VM8GEt0gE7v0xvebbdzuKJoG8VKXdgGWrmTC5FipP1F4fRYQQAcxbLdlphV/CGqO66thzY0zzU7cJzsKr9QLZ2MyqCfdIDYoqXlYb2maxB4AbNnS8/Yx0meRVk1AmR4GA/FUBaJpzhOp1lTugQTHeC/BV0+JCV918hrpFg8RxTbLdcRzEiPAG5H/jzcrNbZrY+J/347ODpOeoiiXNKoIxb1qC3GPBn3ZXpC53/BBpN92J8po/FGEyd7+RbWIeH1cDg3ds0e541FfAkHKC1WS6s8x/WR/iHOi29Q7uu6lyl7Fp1E=----ATTACHMENT:----NzQ1OTcwNzQxMDAyNTk4MCA5Mjk0ODA0NTg1Njc1MTk4IDkzMDA0NjcyNjM4Mzg2MTc=