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