Esempio n. 1
0
 protected function which_aggregator_sql($exe, \ebi\Dao $dao, $target_name, $gorup_name, \ebi\Q $query)
 {
     $select = $from = [];
     $target_column = $group_column = null;
     if (empty($target_name)) {
         $self_columns = $dao->columns(true);
         $primary_columns = $dao->primary_columns();
         if (!empty($primary_columns)) {
             $target_column = current($primary_columns);
         }
         if (empty($target_column) && !empty($self_columns)) {
             $target_column = current($self_columns);
         }
     } else {
         $target_column = $this->get_column($target_name, $dao->columns());
     }
     if (empty($target_column)) {
         throw new \ebi\exception\BadMethodCallException('undef primary');
     }
     $date_format = $query->ar_date_format();
     $exec_map = $target_column->table_alias() . '.' . $this->quotation($target_column->column());
     if (isset($date_format[$target_column->name()])) {
         $exec_map = $this->date_format($exec_map, $dao, $target_column, $date_format[$target_column->name()]);
     }
     if (!empty($gorup_name)) {
         $group_column = $this->get_column($gorup_name, $dao->columns());
         $column_map = $group_column->table_alias() . '.' . $this->quotation($group_column->column());
         if (isset($date_format[$group_column->name()])) {
             $column_map = $this->date_format($column_map, $dao, $group_column, $date_format[$group_column->name()]);
         }
         $select[] = $column_map . ' key_column';
     }
     foreach ($dao->columns() as $column) {
         $from[$column->table_alias()] = $this->quotation($column->table()) . ' ' . $column->table_alias();
     }
     list($where_sql, $where_vars) = $this->where_sql($dao, $from, $query, $dao->columns(), $this->where_cond_columns($dao->conds(), $from));
     return new \ebi\Daq('select ' . $exe . '(' . $exec_map . ') target_column' . (empty($select) ? '' : ',' . implode(',', $select)) . ' from ' . implode(',', $from) . (empty($where_sql) ? '' : ' where ' . $where_sql) . (empty($group_column) ? '' : ' group by key_column') . ' order by target_column', $where_vars);
 }