Class: ArelExtensions::Nodes::DateAdd
- Inherits:
-
Function
- Object
- Arel::Nodes::Function
- Function
- ArelExtensions::Nodes::DateAdd
show all
- Defined in:
- lib/arel_extensions/nodes/date_diff.rb
Constant Summary
collapse
- RETURN_TYPE =
:date
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Function
#as, #convert_to_date_node, #convert_to_datetime_node, #convert_to_node, #convert_to_number, #convert_to_string_node, #expr, #left, #return_type, #right, #type_of_attribute
#cast, #convert_to_node, #imatches, #in, #matches, #not_in, #when
Constructor Details
#initialize(expr) ⇒ DateAdd
Returns a new instance of DateAdd.
40
41
42
43
44
45
46
47
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 40
def initialize expr
col = expr.first
@date_type = type_of_attribute(col)
tab = expr.map do |arg|
convert(arg)
end
return super(tab)
end
|
Instance Attribute Details
#date_type ⇒ Object
Returns the value of attribute date_type.
38
39
40
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 38
def date_type
@date_type
end
|
Instance Method Details
#mssql_datepart(v = nil) ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 112
def mssql_datepart(v = nil)
v ||= self.expressions.last
if defined?(ActiveSupport::Duration) && ActiveSupport::Duration === v
if @date_type == :date
Arel.sql('day')
elsif @date_type == :datetime
Arel.sql('second')
end
else
v
end
end
|
#mssql_value(v = nil) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 99
def mssql_value(v = nil)
v ||= self.expressions.last
if defined?(ActiveSupport::Duration) && ActiveSupport::Duration === v
if @date_type == :date
v.inspect.to_i
elsif @date_type == :datetime
v.to_i
end
else
v
end
end
|
#mysql_value(v = nil) ⇒ Object
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 62
def mysql_value(v = nil)
v ||= self.expressions.last
if defined?(ActiveSupport::Duration) && ActiveSupport::Duration === v
if @date_type == :date || @date_type == :datetime
Arel.sql('INTERVAL %s' % v.inspect.sub(/s\Z/, ''))
end
else
v
end
end
|
#oracle_value(v = nil) ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 86
def oracle_value(v = nil)
v ||= self.expressions.last
if defined?(ActiveSupport::Duration) && ActiveSupport::Duration === v
if @date_type == :date
Arel.sql("INTERVAL '%s' DAY" % v.inspect.to_i)
elsif @date_type == :datetime
Arel.sql("INTERVAL '%s' SECOND" % v.to_i)
end
else
v
end
end
|
#postgresql_value(v = nil) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 73
def postgresql_value(v = nil)
v ||= self.expressions.last
if defined?(ActiveSupport::Duration) && ActiveSupport::Duration === v
if @date_type == :date
Arel.sql("INTERVAL '%s'" % v.inspect.sub(/s\Z/, '').upcase)
elsif @date_type == :datetime
Arel.sql("INTERVAL '%s'" % v.inspect.sub(/s\Z/, '').upcase)
end
else
return v
end
end
|
#sqlite_value ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/arel_extensions/nodes/date_diff.rb', line 49
def sqlite_value
v = self.expressions.last
if defined?(ActiveSupport::Duration) && ActiveSupport::Duration === v
if @date_type == :date
return Arel::Nodes.build_quoted((v.value >= 0 ? '+' : '-') + v.inspect)
elsif @date_type == :datetime
return Arel::Nodes.build_quoted((v.value >= 0 ? '+' : '-') + v.inspect)
end
else
return v
end
end
|