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 activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 98 98: def initialize(connection, logger, config) 99: super(connection, logger) 100: @config = config 101: end
Public Instance methods
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 287 287: def change_column_null(table_name, column_name, null, default = nil) 288: unless null || default.nil? 289: execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL") 290: end 291: alter_table(table_name) do |definition| 292: definition[column_name].null = null 293: end 294: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 127 127: def disconnect! 128: super 129: @connection.close rescue nil 130: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 315 315: def empty_insert_statement(table_name) 316: "INSERT INTO #{table_name} VALUES(NULL)" 317: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 252 252: def rename_table(name, new_name) 253: execute "ALTER TABLE #{name} RENAME TO #{new_name}" 254: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 119 119: def requires_reloading? 120: true 121: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 189 189: def select_rows(sql, name = nil) 190: execute(sql, name).map do |row| 191: (0...(row.size / 2)).map { |i| row[i] } 192: end 193: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 123 123: def supports_add_column? 124: sqlite_version >= '3.1.6' 125: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 107 107: def supports_ddl_transactions? 108: sqlite_version >= '2.0.0' 109: end
See: www.sqlite.org/lang_altertable.html SQLite has an additional restriction on the ALTER TABLE statement
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 258 258: def valid_alter_table_options( type, options) 259: type.to_sym != :primary_key 260: end
Protected Instance methods
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 417 417: def catch_schema_changes 418: return yield 419: rescue ActiveRecord::StatementInvalid => exception 420: if exception.message =~ /database schema has changed/ 421: reconnect! 422: retry 423: else 424: raise 425: end 426: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 432 432: def default_primary_key_type 433: if supports_autoincrement? 434: 'INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'.freeze 435: else 436: 'INTEGER PRIMARY KEY NOT NULL'.freeze 437: end 438: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 428 428: def sqlite_version 429: @sqlite_version ||= SQLiteAdapter::Version.new(select_value('select sqlite_version(*)')) 430: end
[ show source ]
# File activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 332 332: def table_structure(table_name) 333: returning structure = execute("PRAGMA table_info(#{quote_table_name(table_name)})") do 334: raise(ActiveRecord::StatementInvalid, "Could not find table '#{table_name}'") if structure.empty? 335: end 336: end