spec/integration/schema/inferrer_spec.rb in rom-sql-1.0.3 vs spec/integration/schema/inferrer_spec.rb in rom-sql-1.1.0
- old
+ new
@@ -36,20 +36,27 @@
context 'for a table with FKs' do
let(:dataset) { :tasks }
let(:source) { ROM::Relation::Name[:tasks] }
- it 'can infer attributes for dataset' do
+ it 'can infer attributes for dataset' do |ex|
+ if mysql?(ex)
+ indexes = { index: %i(user_id).to_set }
+ else
+ indexes = {}
+ end
+
expect(schema.to_h).
to eql(
id: ROM::SQL::Types::Serial.meta(name: :id, source: source),
title: ROM::SQL::Types::String.optional.meta(name: :title, source: source),
user_id: ROM::SQL::Types::Int.optional.meta(
name: :user_id,
foreign_key: true,
source: source,
- target: :users
+ target: :users,
+ **indexes
)
)
end
end
@@ -85,18 +92,19 @@
let(:source) { ROM::Relation::Name[dataset] }
it 'can infer attributes for dataset' do |ex|
date_type = oracle?(ex) ? ROM::SQL::Types::Time : ROM::SQL::Types::Date
- expect(schema.to_h).to eql(
- id: ROM::SQL::Types::Serial.meta(name: :id, source: source),
- text: ROM::SQL::Types::String.meta(name: :text, source: source),
- time: ROM::SQL::Types::Time.optional.meta(name: :time, source: source),
- date: date_type.optional.meta(name: :date, source: source),
- datetime: ROM::SQL::Types::Time.meta(name: :datetime, source: source),
- data: ROM::SQL::Types::Blob.optional.meta(name: :data, source: source),
- )
+ expect(schema.to_h).
+ to eql(
+ id: ROM::SQL::Types::Serial.meta(name: :id, source: source),
+ text: ROM::SQL::Types::String.meta(name: :text, source: source),
+ time: ROM::SQL::Types::Time.optional.meta(name: :time, source: source),
+ date: date_type.optional.meta(name: :date, source: source),
+ datetime: ROM::SQL::Types::Time.meta(name: :datetime, source: source),
+ data: ROM::SQL::Types::Blob.optional.meta(name: :data, source: source),
+ )
end
end
context 'numeric datatypes' do
before do
@@ -128,20 +136,21 @@
default_precision = decimal.meta(name: :dec)
end
pending 'Add precision inferrence for Oracle' if oracle?(example)
- expect(schema.to_h).to eql(
- id: ROM::SQL::Types::Serial.meta(name: :id, source: source),
- dec: default_precision,
- dec_prec: decimal.meta(name: :dec_prec, precision: 12, scale: 0),
- num: decimal.meta(name: :num, precision: 5, scale: 2),
- small: ROM::SQL::Types::Int.optional.meta(name: :small, source: source),
- int: ROM::SQL::Types::Int.optional.meta(name: :int, source: source),
- floating: ROM::SQL::Types::Float.optional.meta(name: :floating, source: source),
- double_p: ROM::SQL::Types::Float.optional.meta(name: :double_p, source: source),
- )
+ expect(schema.to_h).
+ to eql(
+ id: ROM::SQL::Types::Serial.meta(name: :id, source: source),
+ dec: default_precision,
+ dec_prec: decimal.meta(name: :dec_prec, precision: 12, scale: 0),
+ num: decimal.meta(name: :num, precision: 5, scale: 2),
+ small: ROM::SQL::Types::Int.optional.meta(name: :small, source: source),
+ int: ROM::SQL::Types::Int.optional.meta(name: :int, source: source),
+ floating: ROM::SQL::Types::Float.optional.meta(name: :floating, source: source),
+ double_p: ROM::SQL::Types::Float.optional.meta(name: :double_p, source: source),
+ )
end
end
end
describe 'using commands with inferred schema' do
@@ -296,9 +305,43 @@
end
end
end
end
end
+ end
+ end
+
+ describe 'inferring indices', oracle: false do
+ before do |ex|
+ ctx = self
+
+ conn.create_table :test_inferrence do
+ primary_key :id
+ Integer :foo
+ Integer :bar, null: false
+ Integer :baz, null: false
+
+ index :foo, name: :foo_idx
+ index :bar, name: :bar_idx
+ index :baz, name: :baz1_idx
+ index :baz, name: :baz2_idx
+
+ index %i(bar baz), name: :composite_idx
+ end
+ end
+
+ let(:dataset) { :test_inferrence }
+ let(:source) { ROM::Relation::Name[dataset] }
+
+ it 'infers types with indices' do
+ int = ROM::SQL::Types::Int
+ expect(schema.to_h).
+ to eql(
+ id: int.meta(name: :id, source: source, primary_key: true),
+ foo: int.optional.meta(name: :foo, source: source, index: %i(foo_idx).to_set),
+ bar: int.meta(name: :bar, source: source, index: %i(bar_idx composite_idx).to_set),
+ baz: int.meta(name: :baz, source: source, index: %i(baz1_idx baz2_idx).to_set)
+ )
end
end
end
end