1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
module ActiveRelation
module Primitives
class Attribute
include SqlBuilder
attr_reader :relation, :name, :alias
def initialize(relation, name, aliaz = nil)
@relation, @name, @alias = relation, name, aliaz
end
def as(aliaz = nil)
Attribute.new(relation, name, aliaz)
end
def qualified_name
"#{relation.table}.#{name}"
end
def qualify
self.as(qualified_name)
end
def ==(other)
relation == other.relation and name == other.name and @alias == other.alias
end
module Predications
include Predicates
def equals(other)
Equality.new(self, other)
end
def less_than(other)
LessThan.new(self, other)
end
def less_than_or_equal_to(other)
LessThanOrEqualTo.new(self, other)
end
def greater_than(other)
GreaterThan.new(self, other)
end
def greater_than_or_equal_to(other)
GreaterThanOrEqualTo.new(self, other)
end
def matches(regexp)
Match.new(self, regexp)
end
end
include Predications
module Aggregations
def count
Aggregation.new(self, "COUNT")
end
def sum
Aggregation.new(self, "SUM")
end
def maximum
Aggregation.new(self, "MAX")
end
def minimum
Aggregation.new(self, "MIN")
end
def average
Aggregation.new(self, "AVG")
end
end
include Aggregations
def to_sql(options = {})
"#{quote_table_name(relation.table)}.#{quote_column_name(name)}" + (options[:use_alias] && self.alias ? " AS #{self.alias.to_s.to_sql}" : "")
end
end
end
end
|