From c935c261b02da6aa54029b411ff4936e72458a75 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Thu, 22 May 2014 10:09:33 -0400 Subject: [PATCH] BUG 14056 "Oracle Connection Parameters with TNS" SOLVED - Oracle Connection Parameters with TNS. - Problema resuelto, en DATABASE CONNECTIONS al hacer click en New, en el dynaform "Add new Database Source" se agrega dos campos un dropdown "Select Connection Type" con dos opciones "NORMAL y TNS" y el campo de tipo "TNS", estos nuevos campos se muestran cuando se selecciona la opcion en engine "oracle" si es en otro caso se ocultaran. Tambien se adiciona dos nuevos campos en la tabla "DB_SOURCE" que son: "DBS_CONNECTION_TYPE" y "DBS_TNS". Cuando se selecciona "oracle" y tipo de conexion "TNS", al llenar los datos al dynaform y hacer click en el boton "test connection" realizara la prueba con exito o falla. Cuando se selecciona "oracle" y tipo de conexion "NORMAL", al llenar los datos al dynaform y hacer click en el boton "test connection" realizara la conexion tal como se hacia anteriomente. --- .../engine/classes/class.dbConnections.php | 16 +++++++++++++++- workflow/engine/classes/class.pmScript.php | 13 ++++++++++--- workflow/engine/classes/model/DbSource.php | 4 ++-- .../dbConnections/genericDbConnections.php | 18 +++++++++++++----- .../dbConnections/dbConnections_Edit.xml | 2 +- .../dbConnections/dbConnections_New.xml | 2 +- 6 files changed, 42 insertions(+), 13 deletions(-) diff --git a/workflow/engine/classes/class.dbConnections.php b/workflow/engine/classes/class.dbConnections.php index 10706b115..2a027c125 100755 --- a/workflow/engine/classes/class.dbConnections.php +++ b/workflow/engine/classes/class.dbConnections.php @@ -74,6 +74,8 @@ class dbConnections $c->addSelectColumn( DbSourcePeer::DBS_PASSWORD ); $c->addSelectColumn( DbSourcePeer::DBS_PORT ); $c->addSelectColumn( DbSourcePeer::DBS_ENCODE ); + $c->addSelectColumn(DbSourcePeer::DBS_CONNECTION_TYPE); + $c->addSelectColumn(DbSourcePeer::DBS_TNS); $c->addSelectColumn( ContentPeer::CON_VALUE ); $c->add( DbSourcePeer::PRO_UID, $this->PRO_UID ); @@ -85,8 +87,20 @@ class dbConnections $row = $result->getRow(); while ($row = $result->getRow()) { - $connections[] = Array ('DBS_UID' => $row[0],'DBS_TYPE' => $row[2],'DBS_SERVER' => $row[3],'DBS_DATABASE_NAME' => $row[4],'DBS_USERNAME' => $row[5],'DBS_PASSWORD' => $row[6],'DBS_PORT' => $row[7],'DBS_ENCODE' => $row[8],'CON_VALUE' => $row[9] + $connections[] = array ( + "DBS_UID" => $row[0], + "DBS_TYPE" => $row[2], + "DBS_SERVER" => $row[3], + "DBS_DATABASE_NAME" => $row[4], + "DBS_USERNAME" => $row[5], + "DBS_PASSWORD" => $row[6], + "DBS_PORT" => $row[7], + "DBS_ENCODE" => $row[8], + "DBS_CONNECTION_TYPE" => $row[9], + "DBS_TNS" => $row[10], + "CON_VALUE" => $row[11] ); + $result->next(); } if (! in_array( $row[2], $types )) { diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index bd3e82f66..43e196aa2 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -710,8 +710,8 @@ function getEngineDataBaseName ($connection) */ function executeQueryOci ($sql, $connection, $aParameter = array()) { - $aDNS = $connection->getDSN(); + $sUsername = $aDNS["username"]; $sPassword = $aDNS["password"]; $sHostspec = $aDNS["hostspec"]; @@ -719,8 +719,14 @@ function executeQueryOci ($sql, $connection, $aParameter = array()) $sPort = $aDNS["port"]; if ($sPort != "1521") { - // if not default port - $conn = oci_connect( $sUsername, $sPassword, $sHostspec . ":" . $sPort . "/" . $sDatabse ); + $flagTns = ($sDatabse == "" && ($sPort . "" == "" || $sPort . "" == "0"))? 1 : 0; + + if ($flagTns == 0) { + // if not default port + $conn = oci_connect($sUsername, $sPassword, $sHostspec . ":" . $sPort . "/" . $sDatabse); + } else { + $conn = oci_connect($sUsername, $sPassword, $sHostspec); + } } else { $conn = oci_connect( $sUsername, $sPassword, $sHostspec . "/" . $sDatabse ); } @@ -734,6 +740,7 @@ function executeQueryOci ($sql, $connection, $aParameter = array()) switch (true) { case preg_match( "/^(SELECT|SHOW|DESCRIBE|DESC|WITH)\s/i", $sql ): $stid = oci_parse( $conn, $sql ); + if (count( $aParameter ) > 0) { foreach ($aParameter as $key => $val) { oci_bind_by_name( $stid, $key, $val ); diff --git a/workflow/engine/classes/model/DbSource.php b/workflow/engine/classes/model/DbSource.php index dee1bb11a..a6064db30 100755 --- a/workflow/engine/classes/model/DbSource.php +++ b/workflow/engine/classes/model/DbSource.php @@ -68,8 +68,8 @@ class DbSource extends BaseDbSource $oCriteria->addSelectColumn(DbSourcePeer::DBS_UID); $oCriteria->addSelectColumn(DbSourcePeer::PRO_UID); $oCriteria->addSelectColumn(DbSourcePeer::DBS_TYPE); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_SERVER); - $oCriteria->addSelectColumn(DbSourcePeer::DBS_DATABASE_NAME); + $oCriteria->addAsColumn("DBS_SERVER", "CASE WHEN " . DbSourcePeer::DBS_TYPE . " = 'oracle' AND " . DbSourcePeer::DBS_CONNECTION_TYPE . " = 'TNS' THEN CONCAT('[', " . DbSourcePeer::DBS_TNS . ", ']') ELSE " . DbSourcePeer::DBS_SERVER . " END"); + $oCriteria->addAsColumn("DBS_DATABASE_NAME", "CASE WHEN " . DbSourcePeer::DBS_TYPE . " = 'oracle' AND " . DbSourcePeer::DBS_CONNECTION_TYPE . " = 'TNS' THEN CONCAT('[', " . DbSourcePeer::DBS_TNS . ", ']') ELSE " . DbSourcePeer::DBS_DATABASE_NAME . " END"); $oCriteria->addSelectColumn(DbSourcePeer::DBS_USERNAME); $oCriteria->addSelectColumn(DbSourcePeer::DBS_PASSWORD); $oCriteria->addSelectColumn(DbSourcePeer::DBS_PORT); diff --git a/workflow/engine/methods/dbConnections/genericDbConnections.php b/workflow/engine/methods/dbConnections/genericDbConnections.php index 38332f7cb..b1ab2f09e 100755 --- a/workflow/engine/methods/dbConnections/genericDbConnections.php +++ b/workflow/engine/methods/dbConnections/genericDbConnections.php @@ -13,13 +13,21 @@ if (isset( $_SESSION['PROCESS'] )) { $oDbConnections = new dbConnections( $_SESSION['PROCESS'] ); foreach ($oDbConnections->connections as $db) { $db['DBS_PASSWORD'] = $oDbConnections->getPassWithoutEncrypt( $db ); - $dbsPort = ($db['DBS_PORT'] == '') ? ('') : (':' . $db['DBS_PORT']); - $ENCODE = (trim( $db['DBS_ENCODE'] ) == '') ? '' : '?encoding=' . $db['DBS_ENCODE']; - if (strpos( $db['DBS_SERVER'], "\\" ) && $db['DBS_TYPE'] == 'mssql') { - $pro['datasources'][$db['DBS_UID']]['connection'] = $db['DBS_TYPE'] . '://' . $db['DBS_USERNAME'] . ':' . $db['DBS_PASSWORD'] . '@' . $db['DBS_SERVER'] . '/' . $db['DBS_DATABASE_NAME'] . $ENCODE; + + $flagTns = ($db["DBS_TYPE"] == "oracle" && $db["DBS_CONNECTION_TYPE"] == "TNS")? 1 : 0; + + if ($flagTns == 0) { + $dbsPort = ($db['DBS_PORT'] == '') ? ('') : (':' . $db['DBS_PORT']); + $ENCODE = (trim( $db['DBS_ENCODE'] ) == '') ? '' : '?encoding=' . $db['DBS_ENCODE']; + if (strpos( $db['DBS_SERVER'], "\\" ) && $db['DBS_TYPE'] == 'mssql') { + $pro['datasources'][$db['DBS_UID']]['connection'] = $db['DBS_TYPE'] . '://' . $db['DBS_USERNAME'] . ':' . $db['DBS_PASSWORD'] . '@' . $db['DBS_SERVER'] . '/' . $db['DBS_DATABASE_NAME'] . $ENCODE; + } else { + $pro['datasources'][$db['DBS_UID']]['connection'] = $db['DBS_TYPE'] . '://' . $db['DBS_USERNAME'] . ':' . $db['DBS_PASSWORD'] . '@' . $db['DBS_SERVER'] . $dbsPort . '/' . $db['DBS_DATABASE_NAME'] . $ENCODE; + } } else { - $pro['datasources'][$db['DBS_UID']]['connection'] = $db['DBS_TYPE'] . '://' . $db['DBS_USERNAME'] . ':' . $db['DBS_PASSWORD'] . '@' . $db['DBS_SERVER'] . $dbsPort . '/' . $db['DBS_DATABASE_NAME'] . $ENCODE; + $pro["datasources"][$db["DBS_UID"]]["connection"] = $db["DBS_TYPE"] . "://" . $db["DBS_USERNAME"] . ":" . $db["DBS_PASSWORD"] . "@" . $db["DBS_TNS"]; } + $pro['datasources'][$db['DBS_UID']]['adapter'] = $db['DBS_TYPE']; } return $pro; diff --git a/workflow/engine/xmlform/dbConnections/dbConnections_Edit.xml b/workflow/engine/xmlform/dbConnections/dbConnections_Edit.xml index 85cb04f8d..37ce0aa03 100755 --- a/workflow/engine/xmlform/dbConnections/dbConnections_Edit.xml +++ b/workflow/engine/xmlform/dbConnections/dbConnections_Edit.xml @@ -16,7 +16,7 @@ - Select type connection + Select Connection Type diff --git a/workflow/engine/xmlform/dbConnections/dbConnections_New.xml b/workflow/engine/xmlform/dbConnections/dbConnections_New.xml index 98ef1df01..f3151e511 100755 --- a/workflow/engine/xmlform/dbConnections/dbConnections_New.xml +++ b/workflow/engine/xmlform/dbConnections/dbConnections_New.xml @@ -15,7 +15,7 @@ - Select type connection + Select Connection Type