aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_relation/relations/attribute.rb
blob: b7233a4b17a64b072590f6c8df581c1b6d0566cb (plain) (blame)
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