lib/thinking_sphinx/attribute.rb in warp-thinking-sphinx-1.3.13 vs lib/thinking_sphinx/attribute.rb in warp-thinking-sphinx-1.3.16

- old
+ new

@@ -91,23 +91,22 @@ def to_select_sql return nil unless include_as_association? separator = all_ints? || all_datetimes? || @crc ? ',' : ' ' - clause = @columns.collect { |column| - part = column_with_prefix(column) + clause = columns_with_prefixes.collect { |column| case type when :string - adapter.convert_nulls(part) + adapter.convert_nulls(column) when :datetime - adapter.cast_to_datetime(part) + adapter.cast_to_datetime(column) when :multi - part = adapter.cast_to_datetime(part) if is_many_datetimes? - part = adapter.convert_nulls(part, '0') if is_many_ints? - part + column = adapter.cast_to_datetime(column) if is_many_datetimes? + column = adapter.convert_nulls(column, '0') if is_many_ints? + column else - part + column end }.join(', ') clause = adapter.crc(clause) if @crc clause = adapter.concatenate(clause, separator) if concat_ws? @@ -120,11 +119,12 @@ :multi => :sql_attr_multi, :datetime => :sql_attr_timestamp, :string => :sql_attr_str2ordinal, :float => :sql_attr_float, :boolean => :sql_attr_bool, - :integer => :sql_attr_uint + :integer => :sql_attr_uint, + :bigint => :sql_attr_bigint }[type] end def include_as_association? ! (type == :multi && (query_source == :query || query_source == :ranged_query)) @@ -180,11 +180,11 @@ column = @columns.first column.__stack.each { |method| object = object.send(method) return sphinx_value(nil) if object.nil? } - + sphinx_value object.send(column.__name) end def all_ints? all_of_type?(:integer) @@ -298,23 +298,15 @@ def is_many_strings? is_many? && all_strings? end - def type_from_database - klass = @associations.values.flatten.first ? - @associations.values.flatten.first.reflection.klass : @model - - column = klass.columns.detect { |col| - @columns.collect { |c| c.__name.to_s }.include? col.name - } - column.nil? ? nil : column.type - end - def translated_type_from_database case type_from_db = type_from_database - when :datetime, :string, :float, :boolean, :integer + when :integer + integer_type_from_db + when :datetime, :string, :float, :boolean type_from_db when :decimal :float when :timestamp, :date :datetime @@ -328,10 +320,36 @@ has "CAST(column AS INT)", :type => :integer, :as => :column MESSAGE end end + def type_from_database + column = column_from_db + column.nil? ? nil : column.type + end + + def integer_type_from_db + column = column_from_db + return nil if column.nil? + + case column.sql_type + when adapter.bigint_pattern + :bigint + else + :integer + end + end + + def column_from_db + klass = @associations.values.flatten.first ? + @associations.values.flatten.first.reflection.klass : @model + + klass.columns.detect { |col| + @columns.collect { |c| c.__name.to_s }.include? col.name + } + end + def all_of_type?(*column_types) @columns.all? { |col| klasses = @associations[col].empty? ? [@model] : @associations[col].collect { |assoc| assoc.reflection.klass } klasses.all? { |klass| @@ -349,9 +367,11 @@ 0 when Time value.to_i when Date value.to_time.to_i + when String + value.to_crc32 else value end end end