| Class | ActiveRecord::ConnectionAdapters::SQLiteAdapter |
| In: |
vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
|
| Parent: | 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:
| remove_column | -> | remove_columns |
# File vendor/rails/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
# File vendor/rails/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
# File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 127
127: def disconnect!
128: super
129: @connection.close rescue nil
130: end
# File vendor/rails/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
# File vendor/rails/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
# File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 119
119: def requires_reloading?
120: true
121: end
# File vendor/rails/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
# File vendor/rails/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb, line 123
123: def supports_add_column?
124: sqlite_version >= '3.1.6'
125: end
# File vendor/rails/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
# File vendor/rails/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
# File vendor/rails/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
# File vendor/rails/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
# File vendor/rails/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
# File vendor/rails/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