diff --git a/dm-aggregates/lib/dm-aggregates/adapters/data_objects_adapter.rb b/dm-aggregates/lib/dm-aggregates/adapters/data_objects_adapter.rb index 1e9c1872..ff9c44aa 100644 --- a/dm-aggregates/lib/dm-aggregates/adapters/data_objects_adapter.rb +++ b/dm-aggregates/lib/dm-aggregates/adapters/data_objects_adapter.rb @@ -48,10 +48,15 @@ module SQL alias original_property_to_column_name property_to_column_name - def property_to_column_name(repository, property, qualify) + def fields_statement(query) + qualify = query.links.any? + query.fields.map { |p| property_to_column_name(query.repository, p, qualify, query.unique?) } * ', ' + end + + def property_to_column_name(repository, property, qualify, unique=false) case property when Query::Operator - aggregate_field_statement(repository, property.operator, property.target, qualify) + aggregate_field_statement(repository, property.operator, property.target, qualify, unique) when Property original_property_to_column_name(repository, property, qualify) else @@ -59,11 +64,12 @@ def property_to_column_name(repository, property, qualify) end end - def aggregate_field_statement(repository, aggregate_function, property, qualify) + def aggregate_field_statement(repository, aggregate_function, property, qualify, unique=false) column_name = if aggregate_function == :count && property == :all '*' else - property_to_column_name(repository, property, qualify) + unique ? "distinct #{property_to_column_name(repository, property, qualify)}" : + property_to_column_name(repository, property, qualify) end function_name = case aggregate_function