HOR-91
This commit is contained in:
@@ -176,9 +176,9 @@ class pmDynaform
|
|||||||
$json->sql = "";
|
$json->sql = "";
|
||||||
$json->optionsSql = array();
|
$json->optionsSql = array();
|
||||||
if ($json->dbConnection !== "" && $json->dbConnection !== "none" && $json->sql !== "") {
|
if ($json->dbConnection !== "" && $json->dbConnection !== "none" && $json->sql !== "") {
|
||||||
$cnn = Propel::getConnection($json->dbConnection);
|
|
||||||
$stmt = $cnn->createStatement();
|
|
||||||
try {
|
try {
|
||||||
|
$cnn = Propel::getConnection($json->dbConnection);
|
||||||
|
$stmt = $cnn->createStatement();
|
||||||
$sql = G::replaceDataField($json->sql, $this->getValuesDependentFields($json));
|
$sql = G::replaceDataField($json->sql, $this->getValuesDependentFields($json));
|
||||||
$rs = $stmt->executeQuery($sql, \ResultSet::FETCHMODE_NUM);
|
$rs = $stmt->executeQuery($sql, \ResultSet::FETCHMODE_NUM);
|
||||||
while ($rs->next()) {
|
while ($rs->next()) {
|
||||||
|
|||||||
@@ -556,13 +556,16 @@ class Variable
|
|||||||
\G::LoadClass('pmDynaform');
|
\G::LoadClass('pmDynaform');
|
||||||
$pmDynaform = new \pmDynaform();
|
$pmDynaform = new \pmDynaform();
|
||||||
$field = $pmDynaform->searchField($arrayVariable["dyn_uid"], $arrayVariable["field_id"]);
|
$field = $pmDynaform->searchField($arrayVariable["dyn_uid"], $arrayVariable["field_id"]);
|
||||||
$variableDbConnectionUid = $field !== null ? $field->dbConnection : "";
|
$dbConnection = "workflow";
|
||||||
|
if ($field !== null && !empty($field->dbConnection)) {
|
||||||
|
$dbConnection = $field->dbConnection;
|
||||||
|
}
|
||||||
$variableSql = $field !== null ? $field->sql : "";
|
$variableSql = $field !== null ? $field->sql : "";
|
||||||
|
|
||||||
//Get data
|
//Get data
|
||||||
$_SESSION["PROCESS"] = $processUid;
|
$_SESSION["PROCESS"] = $processUid;
|
||||||
|
|
||||||
$cnn = \Propel::getConnection(($variableDbConnectionUid . "" != "")? $variableDbConnectionUid : "workflow");
|
$cnn = \Propel::getConnection($dbConnection);
|
||||||
$stmt = $cnn->createStatement();
|
$stmt = $cnn->createStatement();
|
||||||
|
|
||||||
$replaceFields = G::replaceDataField($variableSql, $arrayVariable);
|
$replaceFields = G::replaceDataField($variableSql, $arrayVariable);
|
||||||
@@ -677,13 +680,16 @@ class Variable
|
|||||||
\G::LoadClass('pmDynaform');
|
\G::LoadClass('pmDynaform');
|
||||||
$pmDynaform = new \pmDynaform();
|
$pmDynaform = new \pmDynaform();
|
||||||
$field = $pmDynaform->searchField($arrayVariable["dyn_uid"], $variableName);
|
$field = $pmDynaform->searchField($arrayVariable["dyn_uid"], $variableName);
|
||||||
$variableDbConnectionUid = $field !== null ? $field->dbConnection : "";
|
$dbConnection = "workflow";
|
||||||
|
if ($field !== null && !empty($field->dbConnection)) {
|
||||||
|
$dbConnection = $field->dbConnection;
|
||||||
|
}
|
||||||
$variableSql = $field !== null ? $field->sql : "";
|
$variableSql = $field !== null ? $field->sql : "";
|
||||||
|
|
||||||
//Get data
|
//Get data
|
||||||
$_SESSION["PROCESS"] = $processUid;
|
$_SESSION["PROCESS"] = $processUid;
|
||||||
|
|
||||||
$cnn = \Propel::getConnection(($variableDbConnectionUid . "" != "") ? $variableDbConnectionUid : "workflow");
|
$cnn = \Propel::getConnection($dbConnection);
|
||||||
$stmt = $cnn->createStatement();
|
$stmt = $cnn->createStatement();
|
||||||
|
|
||||||
$replaceFields = G::replaceDataField($variableSql, $arrayVariable);
|
$replaceFields = G::replaceDataField($variableSql, $arrayVariable);
|
||||||
@@ -702,7 +708,7 @@ class Variable
|
|||||||
}
|
}
|
||||||
$parser = new \PHPSQLParser($replaceFields);
|
$parser = new \PHPSQLParser($replaceFields);
|
||||||
$filter = str_replace("'", "''", $filter);
|
$filter = str_replace("'", "''", $filter);
|
||||||
$replaceFields = $this->queryModified($parser->parsed, $filter, "*searchtype*", $start, $limit);
|
$replaceFields = $this->queryModified($parser->parsed, $filter, "*searchtype*", $start, $limit, $dbConnection);
|
||||||
$rs = $stmt->executeQuery($replaceFields, \ResultSet::FETCHMODE_NUM);
|
$rs = $stmt->executeQuery($replaceFields, \ResultSet::FETCHMODE_NUM);
|
||||||
|
|
||||||
while ($rs->next()) {
|
while ($rs->next()) {
|
||||||
@@ -721,7 +727,7 @@ class Variable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function queryModified($sqlParsed, $inputSel = "", $searchType, $start, $limit)
|
public function queryModified($sqlParsed, $inputSel = "", $searchType = "*searchtype*", $start = 0, $limit = "", $dbConnection = "workflow")
|
||||||
{
|
{
|
||||||
if (!empty($sqlParsed['SELECT'])) {
|
if (!empty($sqlParsed['SELECT'])) {
|
||||||
$sqlSelectOptions = (isset($sqlParsed["OPTIONS"]) && count($sqlParsed["OPTIONS"]) > 0) ? implode(" ", $sqlParsed["OPTIONS"]) : null;
|
$sqlSelectOptions = (isset($sqlParsed["OPTIONS"]) && count($sqlParsed["OPTIONS"]) > 0) ? implode(" ", $sqlParsed["OPTIONS"]) : null;
|
||||||
@@ -844,6 +850,26 @@ class Variable
|
|||||||
if (!empty($sqlParsed['LIMIT'])) {
|
if (!empty($sqlParsed['LIMIT'])) {
|
||||||
$sqlLimit = " LIMIT " . $sqlParsed['LIMIT']['start'] . ", " . $sqlParsed['LIMIT']['end'];
|
$sqlLimit = " LIMIT " . $sqlParsed['LIMIT']['start'] . ", " . $sqlParsed['LIMIT']['end'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//get database provider
|
||||||
|
$a = new \Criteria("workflow");
|
||||||
|
$a->addSelectColumn(\DbSourcePeer::DBS_TYPE);
|
||||||
|
$a->add(\DbSourcePeer::DBS_UID, $dbConnection, \Criteria::EQUAL);
|
||||||
|
$ds = \DbSourcePeer::doSelectRS($a);
|
||||||
|
$ds->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
$ds->next();
|
||||||
|
$row = $ds->getRow();
|
||||||
|
if (isset($row["DBS_TYPE"])) {
|
||||||
|
if ($row["DBS_TYPE"] === "pgsql") {
|
||||||
|
$sqlLimit = $this->limitPgsql($start, $limit);
|
||||||
|
}
|
||||||
|
if ($row["DBS_TYPE"] === "mssql") {
|
||||||
|
return $this->limitMssqlOracle($sqlSelect, $sqlFrom, $sqlWhere, $sqlGroupBy, $sqlHaving, $sqlOrderBy, $start, $limit, true);
|
||||||
|
}
|
||||||
|
if ($row["DBS_TYPE"] === "oracle") {
|
||||||
|
return $this->limitMssqlOracle($sqlSelect, $sqlFrom, $sqlWhere, $sqlGroupBy, $sqlHaving, $sqlOrderBy, $start, $limit, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . $sqlOrderBy . $sqlLimit;
|
return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . $sqlOrderBy . $sqlLimit;
|
||||||
}
|
}
|
||||||
@@ -873,6 +899,36 @@ class Variable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function limitPgsql($start = 0, $limit = "")
|
||||||
|
{
|
||||||
|
$sqlLimit = "";
|
||||||
|
if ($start >= 0) {
|
||||||
|
$sqlLimit = " OFFSET " . $start;
|
||||||
|
}
|
||||||
|
if ($limit !== "") {
|
||||||
|
$sqlLimit = $sqlLimit . " LIMIT " . $limit;
|
||||||
|
}
|
||||||
|
return $sqlLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function limitMssqlOracle($sqlSelect = "", $sqlFrom = "", $sqlWhere = "", $sqlGroupBy = "", $sqlHaving = "", $sqlOrderBy = "", $start = 0, $limit = "", $isMssql = true)
|
||||||
|
{
|
||||||
|
$sqlLimit = "";
|
||||||
|
if ($start >= 0) {
|
||||||
|
$sqlLimit = "WHERE rn >= " . $start;
|
||||||
|
}
|
||||||
|
if ($start >= 0 && $limit != "") {
|
||||||
|
$sqlLimit = "WHERE rn BETWEEN " . $start . " AND " . $limit;
|
||||||
|
}
|
||||||
|
$sql = ""
|
||||||
|
. "SELECT * FROM ("
|
||||||
|
. " " . $sqlSelect . ", ROW_NUMBER() OVER( " . $sqlOrderBy . " desc )-1 " . ($isMssql ? " AS " : "") . " rn "
|
||||||
|
. " " . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving
|
||||||
|
. ")" . ($isMssql ? " AS A " : "")
|
||||||
|
. $sqlLimit;
|
||||||
|
return $sql;
|
||||||
|
}
|
||||||
|
|
||||||
public function getVariableTypeByName($processUid, $variableName)
|
public function getVariableTypeByName($processUid, $variableName)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user