Class: Migrate::Storage::DB

Inherits:
Object
  • Object
show all
Defined in:
lib/migrate/storage/db.rb

Direct Known Subclasses

Mysql, Postgres

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ DB

Returns a new instance of DB.



8
9
10
# File 'lib/migrate/storage/db.rb', line 8

def initialize(config)
  @config = config
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



6
7
8
# File 'lib/migrate/storage/db.rb', line 6

def config
  @config
end

Instance Method Details

#create_tablesObject

Will create database model used by tool



160
161
162
# File 'lib/migrate/storage/db.rb', line 160

def create_tables
  raise "Implementation for creating tables not found"
end

#current_versionObject



87
88
89
90
91
92
# File 'lib/migrate/storage/db.rb', line 87

def current_version
  self.extract_version self.exec_sql <<-eos
    SELECT * FROM #{config.version_number}
    LIMIT 1
  eos
end

#delete(version) ⇒ Object



132
133
134
# File 'lib/migrate/storage/db.rb', line 132

def delete(version)
  self.exec_sql "DELETE FROM #{@config.version_info} WHERE version=#{version}"
end

#exec_sql(sql) ⇒ Object

Executes SQL



169
170
171
# File 'lib/migrate/storage/db.rb', line 169

def exec_sql(sql)
  raise "Implementation for executing SQL script not found"
end

#extract_version(results) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/migrate/storage/db.rb', line 52

def extract_version(results)
  if results && results.count > 0
    results[0]["version"]
  else
    raise VersionNotFound
  end
end

#get_migration(version) ⇒ Object



116
117
118
119
120
121
122
123
# File 'lib/migrate/storage/db.rb', line 116

def get_migration(version)
  res = self.exec_sql "SELECT * FROM #{@config.version_info} WHERE version=#{version}"
  if res && res.count > 0
    res[0]
  else
    raise VersionNotFound
  end
end

#highest_versionObject



68
69
70
71
72
73
74
75
76
# File 'lib/migrate/storage/db.rb', line 68

def highest_version
  self.extract_version self.exec_sql <<-eos
    SELECT version FROM #{@config.version_info}
      ORDER BY version DESC
    LIMIT 1
  eos
rescue VersionNotFound => e
  0
end

#list_migrations(selects, limit) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/migrate/storage/db.rb', line 28

def list_migrations(selects, limit)
  self.exec_sql <<-eos
    SELECT #{(selects == nil ? "*" : selects)} FROM #{@config.version_info}
    ORDER BY last_up, version
    #{limit != nil ? "LIMIT #{limit}" : ""}
  eos
end

#log_down(version) ⇒ Object



108
109
110
111
112
113
114
# File 'lib/migrate/storage/db.rb', line 108

def log_down(version)
  self.exec_sql "UPDATE #{@config.version_info} SET last_down=now() WHERE version=#{version}"

  lowest_version = self.lowest_version
  version_to_save = lowest_version.to_i < version.to_i ? self.prev_version().to_i : 0
  self.exec_sql "UPDATE #{@config.version_number} SET version=#{version_to_save}"
end

#log_up(version) ⇒ Object



103
104
105
106
# File 'lib/migrate/storage/db.rb', line 103

def log_up(version)
  self.exec_sql "UPDATE #{@config.version_info} SET last_up=now() WHERE version=#{version}"
  self.exec_sql "UPDATE #{@config.version_number} SET version=#{version}"
end

#lowest_versionObject



60
61
62
63
64
65
66
# File 'lib/migrate/storage/db.rb', line 60

def lowest_version
  self.extract_version self.exec_sql <<-eos
    SELECT version FROM #{@config.version_info}
      ORDER BY version
    LIMIT 1
  eos
end

#migrations_from(from) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/migrate/storage/db.rb', line 44

def migrations_from(from)
  self.exec_sql <<-eos
    SELECT * FROM #{@config.version_info}
      WHERE version >= #{from}
    ORDER BY version
    eos
end

#migrations_range(from, to, is_up) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/migrate/storage/db.rb', line 36

def migrations_range(from, to, is_up)
  self.exec_sql <<-eos
    SELECT * FROM #{@config.version_info}
      WHERE version >= #{from} AND version <= #{to}
    ORDER BY version #{!is_up ? "DESC" : ""}
    eos
end

#new_migration(version = 0, description = "") ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/migrate/storage/db.rb', line 16

def new_migration(version=0, description="")
  self.exec_sql <<-eos
    INSERT INTO #{@config.version_info} (version, description, created_date)
    VALUES(#{version}, '#{description}', now())
  eos

  res = self.exec_sql <<-eos
    SELECT * FROM #{@config.version_info} ORDER BY version DESC LIMIT 1
  eos
  res[0]
end

#next_versionObject



78
79
80
81
82
83
84
85
# File 'lib/migrate/storage/db.rb', line 78

def next_version
  self.extract_version self.exec_sql <<-eos
    SELECT version FROM #{@config.version_info}
      WHERE version > (SELECT version FROM #{@config.version_number} LIMIT 1)
    ORDER BY version
    LIMIT 1
  eos
end

#prev_versionObject



94
95
96
97
98
99
100
101
# File 'lib/migrate/storage/db.rb', line 94

def prev_version
  self.extract_version self.exec_sql <<-eos
    SELECT version FROM #{@config.version_info}
      WHERE version < (SELECT version FROM #{@config.version_number} LIMIT 1)
    ORDER BY version DESC
    LIMIT 1
  eos
end


136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/migrate/storage/db.rb', line 136

def print(results, title="")
  rows = []
  headings = results[0].keys

  results.each do |result|
    row = []
    result.each do |column, value|
      if column == "description"
        if value.length > 70
          value = value.scan(/.{1,70}/).join("\n")
        end
      end

      row << value
    end
    rows << row
  end

  table = Terminal::Table.new :headings => headings, :rows => rows
  table.title = title
  puts table
end

#tables_exists?Boolean

Returns:

  • (Boolean)


164
165
166
# File 'lib/migrate/storage/db.rb', line 164

def tables_exists?
  raise "Implementation for checking if version tables already exists not found"
end

#txObject

Creates new transaction. Should accept block.



174
175
176
# File 'lib/migrate/storage/db.rb', line 174

def tx
  raise "Implementation for starting new transaction not found"
end

#typeObject



12
13
14
# File 'lib/migrate/storage/db.rb', line 12

def type
  @config.storage
end

#version_exists?(version) ⇒ Boolean

Returns:

  • (Boolean)


125
126
127
128
129
130
# File 'lib/migrate/storage/db.rb', line 125

def version_exists?(version)
  self.get_migration(version)
  true
rescue VersionNotFound
  false
end