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
- catch_schema_changes
- change_column_null
- default_primary_key_type
- disconnect!
- empty_insert_statement
- new
- rename_table
- requires_reloading?
- select_rows
- sqlite_version
- supports_add_column?
- supports_ddl_transactions?
- table_structure
- valid_alter_table_options
Classes and Modules
Class ActiveRecord::ConnectionAdapters::SQLiteAdapter::VersionPublic Class methods
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 107
107: def requires_reloading?
108: true
109: end
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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
See: www.sqlite.org/lang_altertable.html SQLite has an additional restriction on the ALTER TABLE statement
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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
[ show source ]
# 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