Sha256: 04f85d9c912ca5e950e25b2f681e8c011f00c7543f1d5f813af43044cd666371
Contents?: true
Size: 1.11 KB
Versions: 3
Compression:
Stored size: 1.11 KB
Contents
class WorkerPlugins::SelectColumnWithTypeCast < WorkerPlugins::ApplicationService arguments :column_name_to_select, :column_to_compare_with, :query def perform return succeed! query.select(column_name_to_select) if same_type? if column_to_compare_with.type == :string succeed! query_with_varchar elsif column_to_compare_with.type == :integer succeed! query_with_integer else raise "Cant handle type cast between types: " \ "#{model_class.table_name}.#{column_name_to_select} (#{column_to_select.type}) " \ "#{column_to_compare_with.name} (#{column_to_compare_with.type})" end end def column_to_select @column_to_select ||= model_class.column_for_attribute(column_name_to_select) end def model_class @model_class ||= query.klass end def query_with_integer query.select("CAST(#{model_class.table_name}.#{column_name_to_select} AS BIGINT)") end def query_with_varchar query.select("CAST(#{model_class.table_name}.#{column_name_to_select} AS VARCHAR)") end def same_type? column_to_select.type == column_to_compare_with.type end end
Version data entries
3 entries across 3 versions & 1 rubygems