Parent

Files

Class Index [+]

Quicksearch

ActiveRecord::ConnectionAdapters::SQLiteAdapter

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:

Public Class Methods

new(connection, logger, config) click to toggle source
    # 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

Public Instance Methods

change_column_null(table_name, column_name, null, default = nil) click to toggle source
     # 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
clear_cache!() click to toggle source

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
create_savepoint() click to toggle source
     # File lib/active_record/connection_adapters/sqlite_adapter.rb, line 301
301:       def create_savepoint
302:         execute("SAVEPOINT #{current_savepoint_name}")
303:       end
disconnect!() click to toggle source

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
empty_insert_statement_value() click to toggle source
     # File lib/active_record/connection_adapters/sqlite_adapter.rb, line 461
461:       def empty_insert_statement_value
462:         "VALUES(NULL)"
463:       end
exec_delete(sql, name = 'SQL', binds = []) click to toggle source
     # 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
Also aliased as: exec_update
exec_query(sql, name = nil, binds = []) click to toggle source
     # 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
exec_update(sql, name = 'SQL', binds = []) click to toggle source
Alias for: exec_delete
explain(arel, binds = []) click to toggle source

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
last_inserted_id(result) click to toggle source
     # 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
release_savepoint() click to toggle source
     # File lib/active_record/connection_adapters/sqlite_adapter.rb, line 309
309:       def release_savepoint
310:         execute("RELEASE SAVEPOINT #{current_savepoint_name}")
311:       end
rename_table(name, new_name) click to toggle source

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
requires_reloading?() click to toggle source
     # File lib/active_record/connection_adapters/sqlite_adapter.rb, line 125
125:       def requires_reloading?
126:         true
127:       end
rollback_to_savepoint() click to toggle source
     # 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
select_rows(sql, name = nil) click to toggle source
     # 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
supports_add_column?() click to toggle source

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
supports_ddl_transactions?() click to toggle source

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
supports_explain?() click to toggle source

Returns true.

     # File lib/active_record/connection_adapters/sqlite_adapter.rb, line 121
121:       def supports_explain?
122:         true
123:       end
supports_index_sort_order?() click to toggle source
     # 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
supports_savepoints?() click to toggle source

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
supports_statement_cache?() click to toggle source

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
table_exists?(name) click to toggle source
     # File lib/active_record/connection_adapters/sqlite_adapter.rb, line 340
340:       def table_exists?(name)
341:         name && tables('SCHEMA', name).any?
342:       end
valid_alter_table_options( type, options) click to toggle source

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

Protected Instance Methods

default_primary_key_type() click to toggle source
     # 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
sqlite_version() click to toggle source
     # 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
table_structure(table_name) click to toggle source
     # 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
translate_exception(exception, message) click to toggle source
     # 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.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.