Method: ArelExtensions::Visitors::MSSQL#visit_ArelExtensions_Nodes_DateDiff

Defined in:
lib/arel_extensions/visitors/mssql.rb

#visit_ArelExtensions_Nodes_DateDiff(o, collector) ⇒ Object



221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# File 'lib/arel_extensions/visitors/mssql.rb', line 221

def visit_ArelExtensions_Nodes_DateDiff o, collector
  case o.right_node_type
  when :ruby_date, :ruby_time, :date, :datetime, :time
    collector << case o.left_node_type
                when :ruby_time, :datetime, :time then 'DATEDIFF(second'
                else                                   'DATEDIFF(day'
                end
    collector << LOADED_VISITOR::COMMA
    collector = visit o.right, collector
    collector << LOADED_VISITOR::COMMA
    collector = visit o.left, collector
    collector << ')'
  else
    da = ArelExtensions::Nodes::DateAdd.new([])
    collector << 'DATEADD('
    collector = visit da.mssql_datepart(o.right), collector
    collector << LOADED_VISITOR::COMMA
    collector << '-('
    collector = visit da.mssql_value(o.right), collector
    collector << ')'
    collector << LOADED_VISITOR::COMMA
    collector = visit o.left, collector
    collector << ')'
    collector
  end
  collector
end