The SQLite adapter works with both the 2.x and 3.x series of SQLite with the sqlite-ruby drivers (available both as gems and from rubyforge.org/projects/sqlite-ruby/).

Options:

  • :database - Path to the database file.
Methods
Classes and Modules
Class ActiveRecord::ConnectionAdapters::SQLiteAdapter::Version
Public Class methods
new(connection, logger, config)
    # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 90
90:       def initialize(connection, logger, config)
91:         super(connection, logger)
92:         @config = config
93:       end
Public Instance methods
change_column_null(table_name, column_name, null, default = nil)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 275
275:       def change_column_null(table_name, column_name, null, default = nil)
276:         unless null || default.nil?
277:           execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL")
278:         end
279:         alter_table(table_name) do |definition|
280:           definition[column_name].null = null
281:         end
282:       end
disconnect!()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 115
115:       def disconnect!
116:         super
117:         @connection.close rescue nil
118:       end
empty_insert_statement(table_name)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 303
303:       def empty_insert_statement(table_name)
304:         "INSERT INTO #{table_name} VALUES(NULL)"
305:       end
rename_table(name, new_name)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 240
240:       def rename_table(name, new_name)
241:         execute "ALTER TABLE #{name} RENAME TO #{new_name}"
242:       end
requires_reloading?()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 107
107:       def requires_reloading?
108:         true
109:       end
select_rows(sql, name = nil)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 177
177:       def select_rows(sql, name = nil)
178:         execute(sql, name).map do |row|
179:           (0...(row.size / 2)).map { |i| row[i] }
180:         end
181:       end
supports_add_column?()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 111
111:       def supports_add_column?
112:         sqlite_version >= '3.1.6'
113:       end
supports_ddl_transactions?()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 99
 99:       def supports_ddl_transactions?
100:         sqlite_version >= '2.0.0'
101:       end
valid_alter_table_options( type, options)

See: www.sqlite.org/lang_altertable.html SQLite has an additional restriction on the ALTER TABLE statement

     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 246
246:       def valid_alter_table_options( type, options)
247:         type.to_sym != :primary_key
248:       end
Protected Instance methods
catch_schema_changes() {|| ...}
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 405
405:         def catch_schema_changes
406:           return yield
407:         rescue ActiveRecord::StatementInvalid => exception
408:           if exception.message =~ /database schema has changed/
409:             reconnect!
410:             retry
411:           else
412:             raise
413:           end
414:         end
default_primary_key_type()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 420
420:         def default_primary_key_type
421:           if supports_autoincrement?
422:             'INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'.freeze
423:           else
424:             'INTEGER PRIMARY KEY NOT NULL'.freeze
425:           end
426:         end
sqlite_version()
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 416
416:         def sqlite_version
417:           @sqlite_version ||= SQLiteAdapter::Version.new(select_value('select sqlite_version(*)'))
418:         end
table_structure(table_name)
     # File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 320
320:         def table_structure(table_name)
321:           returning structure = execute("PRAGMA table_info(#{quote_table_name(table_name)})") do
322:             raise(ActiveRecord::StatementInvalid, "Could not find table '#{table_name}'") if structure.empty?
323:           end
324:         end