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); }