diff --git a/lib/dm-migrations/adapters/dm-do-adapter.rb b/lib/dm-migrations/adapters/dm-do-adapter.rb index 56609ed..b731d2e 100644 --- a/lib/dm-migrations/adapters/dm-do-adapter.rb +++ b/lib/dm-migrations/adapters/dm-do-adapter.rb @@ -195,16 +195,17 @@ def create_unique_index_statements(model) # @api private def property_schema_hash(property) - primitive = property.primitive - type_map = self.class.type_map + dump_class = property.dump_class + type_map = self.class.type_map + schema = type_map[property.class] || type_map[dump_class] - schema = (type_map[property.class] || type_map[primitive]).merge(:name => property.field) + schema.merge!(:name => property.field) schema_primitive = schema[:primitive] - if primitive == String && schema_primitive != 'TEXT' && schema_primitive != 'CLOB' && schema_primitive != 'NVARCHAR' + if dump_class.equal?(String) && schema_primitive != 'TEXT' && schema_primitive != 'CLOB' && schema_primitive != 'NVARCHAR' schema[:length] = property.length - elsif primitive == BigDecimal || primitive == Float + elsif dump_class.equal?(BigDecimal) || dump_class.equal?(Float) schema[:precision] = property.precision schema[:scale] = property.scale end diff --git a/lib/dm-migrations/adapters/dm-postgres-adapter.rb b/lib/dm-migrations/adapters/dm-postgres-adapter.rb index f3a26e3..063d2d1 100644 --- a/lib/dm-migrations/adapters/dm-postgres-adapter.rb +++ b/lib/dm-migrations/adapters/dm-postgres-adapter.rb @@ -65,10 +65,8 @@ def without_notices def property_schema_hash(property) schema = super - primitive = property.primitive - # Postgres does not support precision and scale for Float - if primitive == Float + if property.kind_of?(Property::Float) schema.delete(:precision) schema.delete(:scale) end diff --git a/lib/dm-migrations/sql/table_creator.rb b/lib/dm-migrations/sql/table_creator.rb index d354af9..2055148 100644 --- a/lib/dm-migrations/sql/table_creator.rb +++ b/lib/dm-migrations/sql/table_creator.rb @@ -83,7 +83,7 @@ def build_type(type_class) schema[:primitive] = type_class else type_map = @adapter.class.type_map - primitive = type_class.respond_to?(:primitive) ? type_class.primitive : type_class + primitive = type_class.respond_to?(:dump_as) ? type_class.dump_as : type_class options = (type_map[type_class] || type_map[primitive]) schema.update(type_class.options) if type_class.respond_to?(:options)