aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/CHANGELOG2
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb14
-rw-r--r--activerecord/test/fixtures/db_definitions/schema.rb7
-rw-r--r--activerecord/test/schema_dumper_test.rb6
4 files changed, 25 insertions, 4 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index 27cf600cdf..99e2003eea 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -6,7 +6,7 @@
* Don't inspect unloaded associations. #2905 [lmarlow]
-* SQLite: use AUTOINCREMENT primary key in >= 3.1.0. #6588 [careo]
+* SQLite: use AUTOINCREMENT primary key in >= 3.1.0. #6588, #6616 [careo, lukfugl]
* Cache inheritance_column. #6592 [Stefan Kaes]
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
index 38e6d853d6..b0c86f51a5 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
@@ -106,6 +106,10 @@ module ActiveRecord
sqlite_version >= '3.2.6'
end
+ def supports_autoincrement? #:nodoc:
+ sqlite_version >= '3.1.0'
+ end
+
def native_database_types #:nodoc:
{
:primary_key => default_primary_key_type,
@@ -197,7 +201,13 @@ module ActiveRecord
# SCHEMA STATEMENTS ========================================
def tables(name = nil) #:nodoc:
- execute("SELECT name FROM sqlite_master WHERE type = 'table'", name).map do |row|
+ sql = <<-SQL
+ SELECT name
+ FROM sqlite_master
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
+ SQL
+
+ execute(sql, name).map do |row|
row[0]
end
end
@@ -353,7 +363,7 @@ module ActiveRecord
end
def default_primary_key_type
- if sqlite_version >= '3.1.0'
+ if supports_autoincrement?
'INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'.freeze
else
'INTEGER PRIMARY KEY NOT NULL'.freeze
diff --git a/activerecord/test/fixtures/db_definitions/schema.rb b/activerecord/test/fixtures/db_definitions/schema.rb
index 9c851817ec..b5d7704d2e 100644
--- a/activerecord/test/fixtures/db_definitions/schema.rb
+++ b/activerecord/test/fixtures/db_definitions/schema.rb
@@ -57,4 +57,11 @@ ActiveRecord::Schema.define do
create_table :lock_without_defaults_cust, :force => true do |t|
t.column :custom_lock_version, :integer
end
+
+ # For sqlite 3.1.0+, make a table with a autoincrement column
+ if adapter_name == 'SQLite' and supports_autoincrement?
+ create_table :table_with_autoincrement, :force => true do |t|
+ t.column :name, :string
+ end
+ end
end
diff --git a/activerecord/test/schema_dumper_test.rb b/activerecord/test/schema_dumper_test.rb
index 016f66077d..8cbcbb39e5 100644
--- a/activerecord/test/schema_dumper_test.rb
+++ b/activerecord/test/schema_dumper_test.rb
@@ -8,7 +8,6 @@ if ActiveRecord::Base.connection.respond_to?(:tables)
def standard_dump
stream = StringIO.new
ActiveRecord::SchemaDumper.ignore_tables = []
- ActiveRecord::SchemaDumper.ignore_tables << /^sqlite_/ if current_adapter?(:SQLiteAdapter)
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
stream.string
end
@@ -20,6 +19,11 @@ if ActiveRecord::Base.connection.respond_to?(:tables)
assert_no_match %r{create_table "schema_info"}, output
end
+ def test_schema_dump_excludes_sqlite_sequence
+ output = standard_dump
+ assert_no_match %r{create_table "sqlite_sequence"}, output
+ end
+
def assert_line_up(lines, pattern, required = false)
return assert(true) if lines.empty?
matches = lines.map { |line| line.match(pattern) }