From 420153a2017fde9f4065a6c3fc0dcce2eecb3016 Mon Sep 17 00:00:00 2001 From: Yehuda Goldberg Date: Wed, 22 Apr 2020 13:33:19 +0300 Subject: [PATCH] added if_not_exists option with workaround --- .../sqlserver/schema_creation.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/active_record/connection_adapters/sqlserver/schema_creation.rb b/lib/active_record/connection_adapters/sqlserver/schema_creation.rb index 711ec3aca..670d77379 100644 --- a/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +++ b/lib/active_record/connection_adapters/sqlserver/schema_creation.rb @@ -6,15 +6,26 @@ class SchemaCreation < AbstractAdapter::SchemaCreation private def visit_TableDefinition(o) + if_not_exists = o.if_not_exists + if o.as table_name = quote_table_name(o.temporary ? "##{o.name}" : o.name) query = o.as.respond_to?(:to_sql) ? o.as.to_sql : o.as projections, source = query.match(%r{SELECT\s+(.*)?\s+FROM\s+(.*)?}).captures - select_into = "SELECT #{projections} INTO #{table_name} FROM #{source}" + sql = "SELECT #{projections} INTO #{table_name} FROM #{source}" else o.instance_variable_set :@as, nil - super + o.instance_variable_set :@if_not_exists, false + sql = super + end + + if if_not_exists + o.instance_variable_set :@if_not_exists, true + table_name = o.temporary ? "##{o.name}" : o.name + sql = "IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='#{table_name}' and xtype='U') #{sql}" end + + sql end def add_column_options!(sql, options)