lib/thinking_sphinx/adapters/postgresql_adapter.rb in warp-thinking-sphinx-1.2.12 vs lib/thinking_sphinx/adapters/postgresql_adapter.rb in warp-thinking-sphinx-1.3.10

- old
+ new

@@ -8,22 +8,21 @@ def sphinx_identifier "pgsql" end def concatenate(clause, separator = ' ') - clause.split(', ').collect { |field| - case field - when /COALESCE/, "'')" - field - else - "COALESCE(CAST(#{field} as varchar), '')" - end - }.join(" || '#{separator}' || ") + if clause[/^COALESCE/] + clause.split('), ').join(") || '#{separator}' || ") + else + clause.split(', ').collect { |field| + "CAST(COALESCE(#{field}, '') as varchar)" + }.join(" || '#{separator}' || ") + end end def group_concatenate(clause, separator = ' ') - "array_to_string(array_accum(#{clause}), '#{separator}')" + "array_to_string(array_accum(COALESCE(#{clause}, '0')), '#{separator}')" end def cast_to_string(clause) clause end @@ -35,11 +34,19 @@ def cast_to_unsigned(clause) clause end def convert_nulls(clause, default = '') - default = "'#{default}'" if default.is_a?(String) - default = 'NULL' if default.nil? + default = case default + when String + "'#{default}'" + when NilClass + 'NULL' + when Fixnum + "#{default}::bigint" + else + default + end "COALESCE(#{clause}, #{default})" end def boolean(value)