You are here

function views_plugin_query_default::compile_fields in Views (for Drupal 7) 6.3

Same name and namespace in other branches
  1. 7.3 plugins/views_plugin_query_default.inc \views_plugin_query_default::compile_fields()
1 call to views_plugin_query_default::compile_fields()
views_plugin_query_default::query in plugins/views_plugin_query_default.inc
Generate a query and a countquery from all of the information supplied to the object.

File

plugins/views_plugin_query_default.inc, line 958
views_plugin_query_default.inc Defines the default query object which builds SQL to execute using the Drupal database API.

Class

views_plugin_query_default
Object used to create a SELECT query.

Code

function compile_fields($fields_array) {
  $fields = $distinct = array();
  $non_aggregates = array();
  foreach ($fields_array as $field) {
    $string = '';
    if (!empty($field['table'])) {
      $string .= $field['table'] . '.';
    }
    $string .= $field['field'];

    // store for use with non-aggregates below
    $fieldname = !empty($field['alias']) ? $field['alias'] : $string;
    if (!empty($field['distinct'])) {
      $string = "DISTINCT({$string})";
    }
    if (!empty($field['count'])) {

      // Retained for compatibility
      $field['function'] = 'count';
    }
    if (!empty($field['function'])) {
      $info = $this
        ->get_aggregation_info();
      if (!empty($info[$field['function']]['method']) && function_exists($info[$field['function']]['method'])) {
        $string = $info[$field['function']]['method']($field['function'], $string);
      }
      $this->has_aggregate = TRUE;
    }
    elseif ($this->distinct && !in_array($fieldname, $this->groupby)) {
      $string = $GLOBALS['db_type'] == 'pgsql' ? "FIRST({$string})" : $string;
    }
    elseif (empty($field['aggregate'])) {
      $non_aggregates[] = $fieldname;
    }
    if ($field['alias']) {
      $string .= " AS {$field['alias']}";
    }
    if (!empty($field['distinct']) && empty($field['function'])) {
      $distinct[] = $string;
    }
    else {
      $fields[] = $string;
    }
    if (!empty($get_count_optimized)) {

      // We only want the first field in this case.
      break;
    }
  }
  return array(
    $distinct,
    $fields,
    $non_aggregates,
  );
}