Class: ActiveRecord::SchemaMigration
- Inherits:
-
Object
- Object
- ActiveRecord::SchemaMigration
show all
- Defined in:
- activerecord/lib/active_record/schema_migration.rb
Overview
This class is used to create a table that keeps track of which migrations have been applied to a given database. When a migration is run, its schema number is inserted in to the schema migrations table so it doesn’t need to be executed the next time.
Defined Under Namespace
Classes: NullSchemaMigration
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of SchemaMigration.
14
15
16
17
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 14
def initialize(connection)
@connection = connection
@arel_table = Arel::Table.new(table_name)
end
|
Instance Attribute Details
#arel_table ⇒ Object
Returns the value of attribute arel_table
12
13
14
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 12
def arel_table
@arel_table
end
|
#connection ⇒ Object
Returns the value of attribute connection
12
13
14
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 12
def connection
@connection
end
|
Instance Method Details
78
79
80
81
82
83
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 78
def count
sm = Arel::SelectManager.new(arel_table)
sm.project(*Arel::Nodes::Count.new([Arel.star]))
connection.select_values(sm, "#{self.class} Count").first
end
|
#create_table ⇒ Object
46
47
48
49
50
51
52
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 46
def create_table
unless connection.table_exists?(table_name)
connection.create_table(table_name, id: false) do |t|
t.string :version, **connection.internal_string_options_for_primary_key
end
end
end
|
#create_version(version) ⇒ Object
19
20
21
22
23
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 19
def create_version(version)
im = Arel::InsertManager.new(arel_table)
im.insert(arel_table[primary_key] => version)
connection.insert(im, "#{self.class} Create", primary_key, version)
end
|
#delete_all_versions ⇒ Object
32
33
34
35
36
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 32
def delete_all_versions
versions.each do |version|
delete_version(version)
end
end
|
#delete_version(version) ⇒ Object
25
26
27
28
29
30
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 25
def delete_version(version)
dm = Arel::DeleteManager.new(arel_table)
dm.wheres = [arel_table[primary_key].eq(version)]
connection.delete(dm, "#{self.class} Destroy")
end
|
#drop_table ⇒ Object
54
55
56
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 54
def drop_table
connection.drop_table table_name, if_exists: true
end
|
#integer_versions ⇒ Object
74
75
76
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 74
def integer_versions
versions.map(&:to_i)
end
|
#normalize_migration_number(number) ⇒ Object
58
59
60
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 58
def normalize_migration_number(number)
"%.3d" % number.to_i
end
|
#normalized_versions ⇒ Object
62
63
64
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 62
def normalized_versions
versions.map { |v| normalize_migration_number v }
end
|
#primary_key ⇒ Object
38
39
40
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 38
def primary_key
"version"
end
|
#table_exists? ⇒ Boolean
85
86
87
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 85
def table_exists?
connection.data_source_exists?(table_name)
end
|
66
67
68
69
70
71
72
|
# File 'activerecord/lib/active_record/schema_migration.rb', line 66
def versions
sm = Arel::SelectManager.new(arel_table)
sm.project(arel_table[primary_key])
sm.order(arel_table[primary_key].asc)
connection.select_values(sm, "#{self.class} Load")
end
|