Class: MigrationBundler::Databases::SqliteDatabase
- Inherits:
-
AbstractDatabase
- Object
- AbstractDatabase
- MigrationBundler::Databases::SqliteDatabase
- Defined in:
- lib/migration_bundler/databases/sqlite_database.rb
Instance Attribute Summary collapse
-
#db ⇒ Object
readonly
Returns the value of attribute db.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
Attributes inherited from AbstractDatabase
Class Method Summary collapse
- .create(url) ⇒ Object
- .create_schema_migrations_sql ⇒ Object
- .exception_class ⇒ Object
- .migration_ext ⇒ Object
Instance Method Summary collapse
- #all_versions ⇒ Object
- #current_version ⇒ Object
- #drop ⇒ Object
- #dump_rows(table_name) ⇒ Object
-
#dump_to_schema(type, schema_path) ⇒ Object
Outside of abstract interface…
- #execute_migration(sql) ⇒ Object
-
#initialize(url) {|_self| ... } ⇒ SqliteDatabase
constructor
A new instance of SqliteDatabase.
- #insert_version(version) ⇒ Object
- #migrations_table? ⇒ Boolean
- #origin_version ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(url) {|_self| ... } ⇒ SqliteDatabase
Returns a new instance of SqliteDatabase.
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
#db ⇒ Object (readonly)
Returns the value of attribute db.
7 8 9 |
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 7 def db @db end |
#path ⇒ Object (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_sql ⇒ Object
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_class ⇒ Object
28 29 30 |
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 28 def exception_class SQLite3::Exception end |
.migration_ext ⇒ Object
24 25 26 |
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 24 def migration_ext ".sql" end |
Instance Method Details
#all_versions ⇒ Object
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_version ⇒ Object
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 |
#drop ⇒ Object
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
44 45 46 |
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 44 def migrations_table? has_table?('schema_migrations') end |
#origin_version ⇒ Object
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_s ⇒ Object
74 75 76 |
# File 'lib/migration_bundler/databases/sqlite_database.rb', line 74 def to_s path end |