AbstractAdapter
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.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 77 77: def initialize(connection, logger, config) 78: super(connection, logger) 79: @statements = StatementPool.new(@connection, 80: config.fetch(:statement_limit) { 1000 }) 81: @config = config 82: 83: if config.fetch(:prepared_statements) { true } 84: @visitor = Arel::Visitors::SQLite.new self 85: else 86: @visitor = BindSubstitution.new self 87: end 88: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 431 431: def change_column_null(table_name, column_name, null, default = nil) 432: unless null || default.nil? 433: exec_query("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL") 434: end 435: alter_table(table_name) do |definition| 436: definition[column_name].null = null 437: end 438: end
Clears the prepared statements cache.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 143 143: def clear_cache! 144: @statements.clear 145: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 301 301: def create_savepoint 302: execute("SAVEPOINT #{current_savepoint_name}") 303: end
Disconnects from the database if already connected. Otherwise, this method does nothing.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 136 136: def disconnect! 137: super 138: clear_cache! 139: @connection.close rescue nil 140: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 461 461: def empty_insert_statement_value 462: "VALUES(NULL)" 463: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 267 267: def exec_delete(sql, name = 'SQL', binds = []) 268: exec_query(sql, name, binds) 269: @connection.changes 270: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 241 241: def exec_query(sql, name = nil, binds = []) 242: log(sql, name, binds) do 243: 244: # Don't cache statements without bind values 245: if binds.empty? 246: stmt = @connection.prepare(sql) 247: cols = stmt.columns 248: records = stmt.to_a 249: stmt.close 250: stmt = records 251: else 252: cache = @statements[sql] ||= { 253: :stmt => @connection.prepare(sql) 254: } 255: stmt = cache[:stmt] 256: cols = cache[:cols] ||= stmt.columns 257: stmt.reset! 258: stmt.bind_params binds.map { |col, val| 259: type_cast(val, col) 260: } 261: end 262: 263: ActiveRecord::Result.new(cols, stmt.to_a) 264: end 265: end
DATABASE STATEMENTS ======================================
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 222 222: def explain(arel, binds = []) 223: sql = "EXPLAIN QUERY PLAN #{to_sql(arel, binds)}" 224: ExplainPrettyPrinter.new.pp(exec_query(sql, 'EXPLAIN', binds)) 225: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 273 273: def last_inserted_id(result) 274: @connection.last_insert_row_id 275: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 309 309: def release_savepoint 310: execute("RELEASE SAVEPOINT #{current_savepoint_name}") 311: end
Renames a table.
Example:
rename_table('octopuses', 'octopi')
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 388 388: def rename_table(name, new_name) 389: exec_query "ALTER TABLE #{quote_table_name(name)} RENAME TO #{quote_table_name(new_name)}" 390: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 125 125: def requires_reloading? 126: true 127: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 305 305: def rollback_to_savepoint 306: execute("ROLLBACK TO SAVEPOINT #{current_savepoint_name}") 307: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 297 297: def select_rows(sql, name = nil) 298: exec_query(sql, name).rows 299: end
Returns true if SQLite version is ‘3.1.6’ or greater, false otherwise.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 130 130: def supports_add_column? 131: sqlite_version >= '3.1.6' 132: end
Returns true if SQLite version is ‘2.0.0’ or greater, false otherwise.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 95 95: def supports_ddl_transactions? 96: sqlite_version >= '2.0.0' 97: end
Returns true.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 121 121: def supports_explain? 122: true 123: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 157 157: def supports_index_sort_order? 158: sqlite_version >= '3.3.0' 159: end
Returns true if SQLite version is ‘3.6.8’ or greater, false otherwise.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 100 100: def supports_savepoints? 101: sqlite_version >= '3.6.8' 102: end
Returns true, since this connection adapter supports prepared statement caching.
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 106 106: def supports_statement_cache? 107: true 108: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 340 340: def table_exists?(name) 341: name && tables('SCHEMA', name).any? 342: end
See: www.sqlite.org/lang_altertable.html SQLite has an additional restriction on the ALTER TABLE statement
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 394 394: def valid_alter_table_options( type, options) 395: type.to_sym != :primary_key 396: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 560 560: def default_primary_key_type 561: if supports_autoincrement? 562: 'INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL' 563: else 564: 'INTEGER PRIMARY KEY NOT NULL' 565: end 566: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 556 556: def sqlite_version 557: @sqlite_version ||= SQLiteAdapter::Version.new(select_value('select sqlite_version(*)')) 558: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 470 470: def table_structure(table_name) 471: structure = exec_query("PRAGMA table_info(#{quote_table_name(table_name)})", 'SCHEMA').to_hash 472: raise(ActiveRecord::StatementInvalid, "Could not find table '#{table_name}'") if structure.empty? 473: structure 474: end
# File lib/active_record/connection_adapters/sqlite_adapter.rb, line 568 568: def translate_exception(exception, message) 569: case exception.message 570: when /column(s)? .* (is|are) not unique/ 571: RecordNotUnique.new(message, exception) 572: else 573: super 574: end 575: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.