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
|
module ActiveRelation
module Primitives
class Attribute
include ::ActiveRelation::SqlBuilder
attr_reader :relation, :name, :alias
def initialize(relation, name, aliaz = nil)
@relation, @name, @alias = relation, name, aliaz
end
def alias(aliaz = nil)
aliaz ? ActiveRelation::Primitives::Attribute.new(relation, name, aliaz) : @alias
end
def qualified_name
"#{relation.table}.#{name}"
end
def qualify
self.alias(qualified_name)
end
def eql?(other)
relation == other.relation and name == other.name and @alias == other.alias
end
module Predications
def ==(other)
Predicates::Equality.new(self, other)
end
def <(other)
Predicates::LessThan.new(self, other)
end
def <=(other)
Predicates::LessThanOrEqualTo.new(self, other)
end
def >(other)
Predicates::GreaterThan.new(self, other)
end
def >=(other)
Predicates::GreaterThanOrEqualTo.new(self, other)
end
def =~(regexp)
Predicates::Match.new(self, regexp)
end
end
include Predications
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
|