Class: Arel::Table

Inherits:
Object
  • Object
show all
Includes:
Crud, FactoryMethods
Defined in:
lib/arel/table.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from FactoryMethods

#create_and, #create_false, #create_join, #create_on, #create_string_join, #create_table_alias, #create_true, #grouping, #lower

Methods included from Crud

#compile_delete, #compile_insert, #compile_update, #create_insert, #delete, #insert, #update

Constructor Details

#initialize(name, engine = Table.engine) ⇒ Table

Returns a new instance of Table.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/arel/table.rb', line 14

def initialize name, engine = Table.engine
  @name    = name.to_s
  @engine  = engine
  @columns = nil
  @aliases = []
  @table_alias = nil
  @primary_key = nil

  if Hash === engine
    @engine  = engine[:engine] || Table.engine

    # Sometime AR sends an :as parameter to table, to let the table know
    # that it is an Alias.  We may want to override new, and return a
    # TableAlias node?
    @table_alias = engine[:as] unless engine[:as].to_s == @name
  end
end

Class Attribute Details

.engineObject

Returns the value of attribute engine.



7
8
9
# File 'lib/arel/table.rb', line 7

def engine
  @engine
end

Instance Attribute Details

#aliasesObject

Returns the value of attribute aliases.



9
10
11
# File 'lib/arel/table.rb', line 9

def aliases
  @aliases
end

#engineObject

Returns the value of attribute engine.



9
10
11
# File 'lib/arel/table.rb', line 9

def engine
  @engine
end

#nameObject Also known as: table_name

Returns the value of attribute name.



9
10
11
# File 'lib/arel/table.rb', line 9

def name
  @name
end

#table_aliasObject

Returns the value of attribute table_alias.



9
10
11
# File 'lib/arel/table.rb', line 9

def table_alias
  @table_alias
end

Instance Method Details

#[](name) ⇒ Object



114
115
116
# File 'lib/arel/table.rb', line 114

def [] name
  ::Arel::Attribute.new self, name
end

#alias(name = "#{self.name}_2") ⇒ Object



45
46
47
48
49
# File 'lib/arel/table.rb', line 45

def alias name = "#{self.name}_2"
  Nodes::TableAlias.new(self, name).tap do |node|
    @aliases << node
  end
end

#columnsObject



103
104
105
106
107
108
109
110
111
112
# File 'lib/arel/table.rb', line 103

def columns
  if $VERBOSE
    warn <<-eowarn
(#{caller.first}) Arel::Table#columns is deprecated and will be removed in
Arel 4.0.0 with no replacement.  PEW PEW PEW!!!
    eowarn
  end
  @columns ||=
    attributes_for @engine.connection.columns(@name, "#{@name} Columns")
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


133
134
135
136
137
138
139
# File 'lib/arel/table.rb', line 133

def eql? other
  self.class == other.class &&
    self.name == other.name &&
    self.engine == other.engine &&
    self.aliases == other.aliases &&
    self.table_alias == other.table_alias
end

#from(table) ⇒ Object



51
52
53
# File 'lib/arel/table.rb', line 51

def from table
  SelectManager.new(@engine, table)
end

#group(*columns) ⇒ Object



75
76
77
# File 'lib/arel/table.rb', line 75

def group *columns
  from(self).group(*columns)
end

#hashObject



126
127
128
129
130
131
# File 'lib/arel/table.rb', line 126

def hash
  # Perf note: aliases, table alias and engine is excluded from the hash
  #  aliases can have a loop back to this table breaking hashes in parent
  #  relations, for the vast majority of cases @name is unique to a query
  @name.hash
end

#having(expr) ⇒ Object



99
100
101
# File 'lib/arel/table.rb', line 99

def having expr
  from(self).having expr
end

#insert_managerObject



122
123
124
# File 'lib/arel/table.rb', line 122

def insert_manager
  InsertManager.new(@engine)
end

#join(relation, klass = Nodes::InnerJoin) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/arel/table.rb', line 63

def join relation, klass = Nodes::InnerJoin
  return from(self) unless relation

  case relation
  when String, Nodes::SqlLiteral
    raise if relation.blank?
    klass = Nodes::StringJoin
  end

  from(self).join(relation, klass)
end

#joins(manager) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/arel/table.rb', line 55

def joins manager
  if $VERBOSE
    warn "joins is deprecated and will be removed in 4.0.0"
    warn "please remove your call to joins from #{caller.first}"
  end
  nil
end

#order(*expr) ⇒ Object



79
80
81
# File 'lib/arel/table.rb', line 79

def order *expr
  from(self).order(*expr)
end

#primary_keyObject



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/arel/table.rb', line 32

def primary_key
  if $VERBOSE
    warn <<-eowarn
primary_key (#{caller.first}) is deprecated and will be removed in Arel 4.0.0
    eowarn
  end
  @primary_key ||= begin
    primary_key_name = @engine.connection.primary_key(name)
    # some tables might be without primary key
    primary_key_name && self[primary_key_name]
  end
end

#project(*things) ⇒ Object



87
88
89
# File 'lib/arel/table.rb', line 87

def project *things
  from(self).project(*things)
end

#select_managerObject



118
119
120
# File 'lib/arel/table.rb', line 118

def select_manager
  SelectManager.new(@engine)
end

#skip(amount) ⇒ Object



95
96
97
# File 'lib/arel/table.rb', line 95

def skip amount
  from(self).skip amount
end

#take(amount) ⇒ Object



91
92
93
# File 'lib/arel/table.rb', line 91

def take amount
  from(self).take amount
end

#where(condition) ⇒ Object



83
84
85
# File 'lib/arel/table.rb', line 83

def where condition
  from(self).where condition
end