diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php
index bf10cc6ab..216cc0995 100755
--- a/workflow/engine/classes/class.pmFunctions.php
+++ b/workflow/engine/classes/class.pmFunctions.php
@@ -254,43 +254,46 @@ function pauseCase($sApplicationUID = '', $iDelegation = 0, $sUserUID = '', $sUn
* @return array or string | $Resultquery | Result | Result of the query | If executing a SELECT statement, it returns an array of associative arrays
*
*/
-function executeQuery($SqlStatement, $DBConnectionUID = 'workflow') {
+function executeQuery($SqlStatement, $DBConnectionUID = 'workflow', $aParameter = array()) {
+ $con = Propel::getConnection($DBConnectionUID);
+ $con->begin();
try {
$statement = trim($SqlStatement);
$statement = str_replace('(', '', $statement);
- $con = Propel::getConnection($DBConnectionUID);
- $con->begin();
$result = false;
+ if (getEngineDataBaseName($con) != 'oracle' ) {
+ switch(true) {
+ case preg_match("/^(SELECT|EXECUTE|EXEC|SHOW|DESCRIBE|EXPLAIN|BEGIN)\s/i", $statement):
+ $rs = $con->executeQuery($SqlStatement);
+ $con->commit();
- switch(true) {
- case preg_match("/^SELECT\s/i", $statement):
- case preg_match("/^EXECUTE\s/i", $statement):
- $rs = $con->executeQuery($SqlStatement);
- $con->commit();
-
- $result = Array();
- $i=1;
- while ($rs->next()) {
- $result[$i++] = $rs->getRow();
- }
- break;
- case preg_match("/^INSERT\s/i", $statement):
- $rs = $con->executeUpdate($SqlStatement);
- $con->commit();
- //$result = $lastId->getId();
- $result = 1;
- break;
- case preg_match("/^UPDATE\s/i", $statement):
- $rs = $con->executeUpdate($SqlStatement);
- $con->commit();
- $result = $con->getUpdateCount();
- break;
- case preg_match("/^DELETE\s/i", $statement):
- $rs = $con->executeUpdate($SqlStatement);
- $con->commit();
- $result = $con->getUpdateCount();
- break;
+ $result = Array();
+ $i = 1;
+ while ($rs->next()) {
+ $result[$i++] = $rs->getRow();
+ }
+ break;
+ case preg_match("/^INSERT\s/i", $statement):
+ $rs = $con->executeUpdate($SqlStatement);
+ $con->commit();
+ //$result = $lastId->getId();
+ $result = 1;
+ break;
+ case preg_match("/^UPDATE\s/i", $statement):
+ $rs = $con->executeUpdate($SqlStatement);
+ $con->commit();
+ $result = $con->getUpdateCount();
+ break;
+ case preg_match("/^DELETE\s/i", $statement):
+ $rs = $con->executeUpdate($SqlStatement);
+ $con->commit();
+ $result = $con->getUpdateCount();
+ break;
+ }
+ }
+ else {
+ $result = executeQueryOci($SqlStatement, $con, $aParameter);
}
return $result;
diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php
index e66a51228..4507f82e9 100755
--- a/workflow/engine/classes/class.pmScript.php
+++ b/workflow/engine/classes/class.pmScript.php
@@ -630,4 +630,109 @@ function registerError($iType, $sError, $iLine, $sCode)
{
$sType = ($iType == 1 ? 'ERROR' : 'FATAL');
$_SESSION['TRIGGER_DEBUG']['ERRORS'][][$sType] = $sError . ($iLine > 0 ? ' (line ' . $iLine . ')' : '') . ':
' . $sCode;
-}
\ No newline at end of file
+}
+
+/**
+ * Obtain engine Data Base name
+ *
+ * @param type $connection
+ * @return type
+ */
+function getEngineDataBaseName($connection)
+{
+ $aDNS = $connection->getDSN();
+ return $aDNS["phptype"];
+}
+
+/**
+ * Execute Queries for Oracle Database
+ *
+ * @param type $sql
+ * @param type $connection
+ */
+function executeQueryOci($sql, $connection, $aParameter = array())
+{
+
+ $aDNS = $connection->getDSN();
+ $sUsername = $aDNS["username"];
+ $sPassword = $aDNS["password"];
+ $sHostspec = $aDNS["hostspec"];
+ $sDatabse = $aDNS["database"];
+ $sPort = $aDNS["port"];
+
+ if ($sPort != "1521") { // if not default port
+ $conn = oci_connect($sUsername, $sPassword, $sHostspec . ":" . $sPort . "/" . $sDatabse);
+ }
+ else {
+ $conn = oci_connect($sUsername, $sPassword, $sHostspec . "/" . $sDatabse);
+ }
+
+ if (!$conn) {
+ $e = oci_error();
+ trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+ return $e;
+ }
+
+ switch(true) {
+ case preg_match("/^(SELECT|SHOW|DESCRIBE|DESC)\s/i", $sql):
+ $stid = oci_parse($conn, $sql);
+ if (count($aParameter) > 0) {
+ foreach ($aParameter as $key => $val) {
+ oci_bind_by_name($stid, $key, $val);
+ }
+ }
+ oci_execute($stid, OCI_DEFAULT);
+
+ $result = Array();
+ $i = 1;
+ while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
+ $result[$i++] = $row;
+ }
+ oci_free_statement($stid);
+ oci_close($conn);
+ return $result;
+ break;
+ case preg_match("/^(INSERT|UPDATE|DELETE)\s/i", $sql):
+ $stid = oci_parse($conn, $sql);
+ $isValid = true;
+ if (count($aParameter) > 0){
+ foreach ($aParameter as $key => $val) {
+ oci_bind_by_name($stid, $key, $val);
+ }
+ }
+ $objExecute = oci_execute($stid, OCI_DEFAULT);
+ if ($objExecute) {
+ oci_commit($conn);
+ }
+ else {
+ oci_rollback($conn);
+ $isValid = false;
+ }
+ oci_free_statement($stid);
+ oci_close($conn);
+ if ($isValid) {
+ return true;
+ }
+ else {
+ return oci_error();
+ }
+ break;
+ default:
+ // Stored procedures
+ $stid = oci_parse($conn, $sql);
+ $aParameterRet = array();
+ if (count($aParameter) > 0){
+ foreach ($aParameter as $key => $val) {
+ $aParameterRet[$key] = $val;
+ // The third parameter ($aParameterRet[$key]) returned a value by reference.
+ oci_bind_by_name($stid, $key, $aParameterRet[$key]);
+ }
+ }
+ $objExecute = oci_execute($stid, OCI_DEFAULT);
+ oci_free_statement($stid);
+ oci_close($conn);
+ return $aParameterRet;
+ break;
+ }
+
+}