コード例 #1
0
ファイル: ARSelectQueryBuilder.php プロジェクト: saiber/www
 /**
  * Creates a string representing SQL SELECT query
  *
  * @return string
  */
 private function createStatementBody()
 {
     $filterFieldList = $this->filter instanceof ARSelectFilter ? $this->filter->getFieldList() : array();
     $fields = array_merge($this->fieldList, $filterFieldList);
     $tableAliases = array();
     $fieldListStr = "";
     $preparedFieldList = array();
     if (empty($fields)) {
         $fieldStr = "*";
     } else {
         foreach ($fields as $fieldInfo) {
             $field = "";
             if (!empty($fieldInfo['tableName'])) {
                 $field = $fieldInfo['tableName'] . "." . $fieldInfo['fieldName'];
             } else {
                 $field = $fieldInfo['fieldName'];
             }
             if (!empty($fieldInfo['fieldNameInResult'])) {
                 $field .= ' AS "' . $fieldInfo['fieldNameInResult'] . '"';
             }
             $preparedFieldList[] = $field;
         }
     }
     $fieldListStr = implode(", ", $preparedFieldList);
     $tableListStr = implode(", ", array_keys($this->tableList));
     // add joins from select filter
     $filterJoins = $this->filter->getJoinList();
     $joins = array_merge($this->joinList, $filterJoins);
     $joinListStr = "";
     if (!empty($joins)) {
         $preparedJoinList = array();
         foreach ($joins as $joinItem) {
             if (!empty($joinItem['tableAliasName'])) {
                 $alias = ' AS `' . $joinItem['tableAliasName'] . '`';
                 $tableName = $joinItem['tableAliasName'];
             } else {
                 $alias = '';
                 $tableName = $joinItem['tableName'];
             }
             if (empty($joinItem['tableAliasName'])) {
                 $tableAliases[$joinItem['tableName']] = $joinItem['tableName'];
             } else {
                 if (!isset($tableAliases[$joinItem['tableName']])) {
                     $tableAliases[$joinItem['tableName']] = $joinItem['tableAliasName'];
                 }
             }
             $preparedJoinList[] = "LEFT JOIN `" . $joinItem['tableName'] . '`' . $alias . " ON " . (isset($tableAliases[$joinItem['mainTableName']]) ? $tableAliases[$joinItem['mainTableName']] : $joinItem['mainTableName']) . "." . $joinItem['mainTableJoinFieldName'] . " = " . $tableName . "." . $joinItem['tableJoinFieldName'] . '';
         }
         $joinListStr = implode(" ", $preparedJoinList);
     }
     return "SELECT " . $fieldListStr . " FROM " . $tableListStr . " " . $joinListStr;
 }
コード例 #2
0
ファイル: ARSelectFilter.php プロジェクト: saiber/www
 /**
  * Merges two filters (filter supplied as parameter overwrites order and limit
  * params of this filter)
  *
  * @param ARSelectFilter $filter
  */
 public function merge(ARSelectFilter $filter)
 {
     if ($filter->isConditionSet()) {
         $this->mergeCondition($filter->getCondition());
     }
     if ($filter->isHavingConditionSet()) {
         $this->mergeHavingCondition($filter->getHavingCondition());
     }
     $this->setFieldOrder($filter->getFieldOrder());
     $this->setLimit($filter->getLimit(), $filter->getOffset());
     $groupings = $filter->getGroupingFields();
     $this->fieldListForGroup = array_merge($this->getGroupingFields(), $groupings);
     $joins = $filter->getJoinList();
     $this->joinList = array_merge($this->joinList, $joins);
     $fields = $filter->getFieldList();
     $this->fieldList = array_merge($this->fieldList, $fields);
 }