Class: MigrationBundler::Databases::SqliteDatabase

Inherits:
AbstractDatabase show all
Defined in:
lib/migration_bundler/databases/sqlite_database.rb

Instance Attribute Summary collapse

Attributes inherited from AbstractDatabase

#url

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url) {|_self| ... } ⇒ SqliteDatabase

Returns a new instance of SqliteDatabase.

Yields:

  • (_self)

Yield Parameters:

Raises:

  • (ArgumentError)


33
34
35
36
37
38
39
40
41
42
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 33

def initialize(url)
  super(url)
  raise ArgumentError, "Must initialize with a URI" unless url.kind_of?(URI)
  raise ArgumentError, "Must initialize with a sqlite URI" unless url.scheme.nil? || url.scheme == 'sqlite'
  path = url.path || url.opaque
  raise ArgumentError, "Must initialize with a sqlite URI that has a path component" unless path
  @path = path
  @db = SQLite3::Database.new(path)
  yield self if block_given?
end

Instance Attribute Details

#dbObject (readonly)

Returns the value of attribute db.



7
8
9
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 7

def db
  @db
end

#pathObject (readonly)

Returns the value of attribute path.



7
8
9
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 7

def path
  @path
end

Class Method Details

.create(url) ⇒ Object



18
19
20
21
22
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 18

def create(url)
  new(url) do |database|
    database.db.execute(create_schema_migrations_sql)
  end
end

.create_schema_migrations_sqlObject



10
11
12
13
14
15
16
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 10

def create_schema_migrations_sql
  MigrationBundler::Util.strip_leading_whitespace <<-SQL
    CREATE TABLE schema_migrations(
        version INTEGER UNIQUE NOT NULL
    );
  SQL
end

.exception_classObject



28
29
30
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 28

def exception_class
  SQLite3::Exception
end

.migration_extObject



24
25
26
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 24

def migration_ext
  ".sql"
end

Instance Method Details

#all_versionsObject



56
57
58
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 56

def all_versions
  db.execute('SELECT version FROM schema_migrations ORDER BY version ASC').map { |row| row[0] }
end

#current_versionObject



52
53
54
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 52

def current_version
  db.get_first_value('SELECT MAX(version) FROM schema_migrations')
end

#dropObject



70
71
72
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 70

def drop
  File.truncate(path, 0) if File.size?(path)
end

#dump_rows(table_name) ⇒ Object



78
79
80
81
82
83
84
85
86
87
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 78

def dump_rows(table_name)
  statement = db.prepare("SELECT * FROM #{table_name}")
  result_set = statement.execute
  Array.new.tap do |statements|
    result_set.each do |row|
      values = row.map { |v| v.is_a?(String) ? SQLite3::Database.quote(v) : v }
      statements << "INSERT INTO #{table_name} (#{result_set.columns.join(', ')}) VALUES (#{values.join(', ')});"
    end
  end
end

#dump_to_schema(type, schema_path) ⇒ Object

Outside of abstract interface…



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 92

def dump_to_schema(type, schema_path)
  sql = MigrationBundler::Util.strip_leading_whitespace <<-SQL
    SELECT name, sql
    FROM sqlite_master
    WHERE sql NOT NULL AND type = '#{type}'
    ORDER BY name ASC
  SQL
  File.open(schema_path, 'a') do |f|
    db.execute(sql) do |row|
      name, sql = row
      next if name =~ /^sqlite/
      f << "#{sql};\n\n"
      yield name if block_given?
    end
    f.puts
  end
end

#execute_migration(sql) ⇒ Object



64
65
66
67
68
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 64

def execute_migration(sql)
  db.transaction do |db|
    db.execute_batch(sql)
  end
end

#insert_version(version) ⇒ Object



60
61
62
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 60

def insert_version(version)
  db.execute("INSERT INTO schema_migrations(version) VALUES (?)", version)
end

#migrations_table?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 44

def migrations_table?
  has_table?('schema_migrations')
end

#origin_versionObject



48
49
50
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 48

def origin_version
  db.get_first_value('SELECT MIN(version) FROM schema_migrations')
end

#to_sObject



74
75
76
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 74

def to_s
  path
end