public function fetchTreeByQueryParams($rootSearchRule, $depth) { $queryRules = array(); foreach ($rootSearchRule as $fieldName => $value) { $queryRules[] = queryParamToRule($fieldName, $value, $this); } $searchRule = implode(' AND ', $queryRules); return $this->fetchTreeBySearchRule($searchRule, $depth); }
/** * Build the Select SQL statement based on the fields and search/sort rule * * @param BizDataObj $dataObj * @return void */ public function buildQuerySQL($dataObj) { //echo "buildQuerySQL ".$dataObj->m_Name."\n"; // TODO: the same dataobj re-uses the same datasqlobj ... // build the SQL statement based on the fields and search rule $dataSqlObj = $this->getNewDataSqlObj($dataObj); if ($dataSqlObj->isfresh()) { // add table $dataSqlObj->addMainTable($dataObj->m_MainTable); // add join table if ($dataObj->m_TableJoins) { foreach ($dataObj->m_TableJoins as $tableJoin) { $tbl_col = $dataSqlObj->addJoinTable($tableJoin, $this); } } // add columns foreach ($dataObj->m_BizRecord as $bizFld) { if ($bizFld->m_IgnoreInQuery) { // field to be ignore in query - save memory continue; } if ($bizFld->m_Column && $bizFld->m_Type == "Blob") { // ignore blob column continue; } if ($bizFld->m_Column && !$bizFld->m_SqlExpression && strpos($bizFld->m_Column, ',') == 0) { $dataSqlObj->addTableColumn($bizFld->m_Join, $bizFld->m_Column, $bizFld->m_Alias); } if ($bizFld->m_SqlExpression) { $dataSqlObj->addSqlExpression($this->_convertSqlExpression($dataObj, $bizFld->m_SqlExpression), $bizFld->m_Alias); } } } $dataSqlObj->resetSQL(); // append DataPerm in the WHERE clause if ($dataObj->m_DataPermControl == 'Y') { $svcObj = BizSystem::GetService(DATAPERM_SERVICE); $hasOwnerField = $this->_hasOwnerField($dataObj); $dataPermSQLRule = $svcObj->buildSqlRule($dataObj, 'select', $hasOwnerField); $sqlSearchRule = $this->_ruleToSql($dataObj, $dataPermSQLRule); $dataSqlObj->addSqlWhere($sqlSearchRule); } // append QueryPameters in the WHERE clause foreach ($dataObj->getQueryParameters() as $fieldName => $value) { $queryRule = queryParamToRule($fieldName, $value, $dataObj); $sqlSearchRule = $this->_ruleToSql($dataObj, $queryRule); $dataSqlObj->addSqlWhere($sqlSearchRule); } // append SearchRule in the WHERE clause $sqlSearchRule = $this->_ruleToSql($dataObj, $dataObj->m_SearchRule); $dataSqlObj->addSqlWhere($sqlSearchRule); // append SearchRule in the ORDER BY clause $sqlSortRule = $this->_ruleToSql($dataObj, $dataObj->m_SortRule); $dataSqlObj->addOrderBy($sqlSortRule); // append SearchRule in the other SQL clause $sqlOtherSQLRule = $this->_ruleToSql($dataObj, $dataObj->m_OtherSQLRule); $dataSqlObj->addOtherSQL($sqlOtherSQLRule); // append SearchRule in the AccessRule clause $sqlAccessSQLRule = $this->_ruleToSql($dataObj, $dataObj->m_AccessRule); $dataSqlObj->addSqlWhere($sqlAccessSQLRule); // add association to SQL if ($dataObj->m_Association["AsscObjName"] != "" && $dataObj->m_Association["FieldRefVal"] == "") { $asscObj = BizSystem::getObject($dataObj->m_Association["AsscObjName"]); $dataObj->m_Association["FieldRefVal"] = $asscObj->getFieldValue($dataObj->m_Association["FieldRef"]); } if ($dataObj->m_Association["AsscObjName"] != "" && $dataObj->m_Association["FieldRefVal2"] == "") { $asscObj = BizSystem::getObject($dataObj->m_Association["AsscObjName"]); $dataObj->m_Association["FieldRefVal2"] = $asscObj->getFieldValue($dataObj->m_Association["FieldRef2"]); } if ($dataObj->m_Association["Relationship"] == "Self-Self") { $dataObj->m_Association["ParentRecordIdColumn"] = $dataObj->getField("Id")->m_Column; } $dataSqlObj->addAssociation($dataObj->m_Association); // apply _ruleToSql to JoinCondition if any if ($dataSqlObj->hasJoinCondition) { $dataSqlObj->setTableJoinStm($this->_ruleToSql($dataObj, $dataSqlObj->getTableJoinStm())); } $querySQL = $dataSqlObj->getSqlStatement() . " "; //echo $querySQL."###\n"; return $querySQL; }