SQLite3 build - MigrationTest failures

http://dev.rubyonrails.org/ticket/8054

alexeyv@alexeyv-laptop:~/src/rails/activerecord/test$ ruby -I
"connections/native_sqlite3" migration_test.rb
Using native SQLite3
Loaded suite migration_test
Started
............................FF......
Finished in 24.783783 seconds.

  1) Failure:
test_native_decimal_insert_manual_vs_automatic(MigrationTest)
[migration_test.rb:233]:
<#<BigDecimal:b73cc1e0,'0.1234567890 1234567890
0123456789E20',32(36)>> expected but was
<#<BigDecimal:b73c5354,'0.1234567890 12346E20',16(20)>>.

  2) Failure:
test_native_types(MigrationTest) [migration_test.rb:282]:
<#<BigDecimal:b761bd10,'0.1234567890 1234567890
0123456789E20',32(36)>> expected but was
<#<BigDecimal:b761bc70,'0.1234567890 12346E20',16(20)>>.

Hi Alex,

http://dev.rubyonrails.org/ticket/8054
alexeyv@alexeyv-laptop:~/src/rails/activerecord/test$ ruby -I
"connections/native_sqlite3" migration_test.rb
Using native SQLite3
Loaded suite migration_test
Started
............................FF......
Finished in 24.783783 seconds.

It looks like both of these are due to BigDecimal being down-
converted to Decimal. Alas, the sqlite3 adapter doesn't seem to
support BigDecimal:

activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb

      def native_database_types #:nodoc:
        {
          :primary_key => default_primary_key_type,
          :string => { :name => "varchar", :limit => 255 },
          :text => { :name => "text" },
          :integer => { :name => "integer" },
          :float => { :name => "float" },
          :decimal => { :name => "decimal" },
          :datetime => { :name => "datetime" },
          :timestamp => { :name => "datetime" },
          :time => { :name => "datetime" },
          :date => { :name => "date" },
          :binary => { :name => "blob" },
          :boolean => { :name => "boolean" }
        }
      end

Does anyone know if that is a fundamental limitation of SQLite3, or
something we can simply add to the adapter?

-- Ernie P.

It looks like both of these are due to BigDecimal being down-
converted to Decimal. Alas, the sqlite3 adapter doesn't seem to
support BigDecimal:

Does anyone know if that is a fundamental limitation of SQLite3, or
something we can simply add to the adapter?

SQLite3 has a maximum precision of 16.
SQLite2 has no maximum as it stores decimals as strings internally.

Roderick

SQLite3 has a maximum precision of 16.

Make that 15 now that I'm double-checking it:

insert into test (nr) values (1234567890.123456789);
select * from test;

1234567890.12346

Roderick

Does anyone know if that is a fundamental limitation of SQLite3, or
something we can simply add to the adapter?

heh. Explains what this code was for:

http://dev.rubyonrails.org/changeset/6437

Reverting that changeset completely causes failure in sqlite2. So I
suppose it needs a version-aware special case. Anyone keen to take a
stab?