From 02da4287bed6e3cb700a91268e13a713f9713ef9 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Wed, 14 Apr 2021 12:12:52 +0100 Subject: [PATCH] Handle default boolean column values when deduplicating --- CHANGELOG.md | 1 + .../connection_adapters/sqlserver_column.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33de060f7..af8191e48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ #### Fixed - [#872](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/872) Use native String#start_with +- [#875](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/875) Handle default boolean column values when deduplicating #### Changed diff --git a/lib/active_record/connection_adapters/sqlserver_column.rb b/lib/active_record/connection_adapters/sqlserver_column.rb index b03e8e7e4..acd2c40ef 100644 --- a/lib/active_record/connection_adapters/sqlserver_column.rb +++ b/lib/active_record/connection_adapters/sqlserver_column.rb @@ -27,6 +27,22 @@ def is_utf8? def case_sensitive? collation && collation.match(/_CS/) end + + private + + # Handle when the default value is a boolean. Boolean's do not respond to the method `:-@`. Method now + # checks whether the default value is already frozen and if so it uses that, otherwise it calls `:-@` to + # freeze it. + def deduplicated + @name = -name + @sql_type_metadata = sql_type_metadata.deduplicate if sql_type_metadata + @default = (default.frozen? ? default : -default) if default + @default_function = -default_function if default_function + @collation = -collation if collation + @comment = -comment if comment + + freeze + end end end end