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