From 3895435f5f147188c9f6972039e972cd9e960357 Mon Sep 17 00:00:00 2001 From: Matias Grunberg Date: Mon, 19 Apr 2021 17:49:30 -0300 Subject: [PATCH 1/2] add create index if exists support See https://github.com/rails/rails/commit/7ba08037f8d807cce2a25b0445743d07adfbe44c --- .../sqlserver/schema_creation.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/active_record/connection_adapters/sqlserver/schema_creation.rb b/lib/active_record/connection_adapters/sqlserver/schema_creation.rb index 44b96602b..0b70b8d50 100644 --- a/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +++ b/lib/active_record/connection_adapters/sqlserver/schema_creation.rb @@ -33,6 +33,20 @@ def visit_TableDefinition(o) sql end + def visit_CreateIndexDefinition(o) + if_not_exists = o.if_not_exists + + o.if_not_exists = false + + sql = super + + if if_not_exists + sql = "IF NOT EXISTS (SELECT name FROM sysindexes WHERE name = '#{o.index.name}') #{sql}" + end + + sql + end + def add_column_options!(sql, options) sql << " DEFAULT #{quote_default_expression(options[:default], options[:column])}" if options_include_default?(options) if options[:null] == false From bc48cd93449cbe6642e85c5d7c51790023524323 Mon Sep 17 00:00:00 2001 From: Matias Grunberg Date: Mon, 19 Apr 2021 17:51:00 -0300 Subject: [PATCH 2/2] add changelog item --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38bc6660b..27d6a66e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - [#885](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/885) Fix the quoting of ActiveModel attributes - [#890](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/890) Fix removal of invalid ordering from select statements - [#881](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/881) Dump column collation to schema.rb and allow collation changes using column_change +- [#891](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/891) Add support for if_not_exists to indexes #### Changed