class ActiveRecord::ConnectionAdapters::SQLServer::SchemaCreation

Private Instance Methods

action_sql(action, dependency) click to toggle source
Calls superclass method
# File lib/active_record/connection_adapters/sqlserver/schema_creation.rb, line 69
        def action_sql(action, dependency)
          case dependency
          when :restrict
            raise ArgumentError, <<~MSG.squish
              '#{dependency}' is not supported for :on_update or :on_delete.
              Supported values are: :nullify, :cascade
            MSG
          else
            super
          end
        end
add_column_options!(sql, options) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/schema_creation.rb, line 52
def add_column_options!(sql, options)
  sql << " DEFAULT #{quote_default_expression(options[:default], options[:column])}" if options_include_default?(options)
  if options[:collation].present?
    sql << " COLLATE #{options[:collation]}"
  end
  if options[:null] == false
    sql << " NOT NULL"
  end
  if options[:is_identity] == true
    sql << " IDENTITY(1,1)"
  end
  if options[:primary_key] == true
    sql << " PRIMARY KEY"
  end
  sql
end
options_include_default?(options) click to toggle source
Calls superclass method
# File lib/active_record/connection_adapters/sqlserver/schema_creation.rb, line 81
def options_include_default?(options)
  super || options_primary_key_with_nil_default?(options)
end
options_primary_key_with_nil_default?(options) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/schema_creation.rb, line 85
def options_primary_key_with_nil_default?(options)
  options[:primary_key] && options.include?(:default) && options[:default].nil?
end
supports_index_using?() click to toggle source
# File lib/active_record/connection_adapters/sqlserver/schema_creation.rb, line 9
def supports_index_using?
  false
end
visit_CreateIndexDefinition(o) click to toggle source
# File lib/active_record/connection_adapters/sqlserver/schema_creation.rb, line 36
def visit_CreateIndexDefinition(o)
  index = o.index

  sql = []
  sql << "IF NOT EXISTS (SELECT name FROM sysindexes WHERE name = '#{o.index.name}')" if o.if_not_exists
  sql << "CREATE"
  sql << "UNIQUE" if index.unique
  sql << index.type.upcase if index.type
  sql << "INDEX"
  sql << "#{quote_column_name(index.name)} ON #{quote_table_name(index.table)}"
  sql << "(#{quoted_columns(index)})"
  sql << "WHERE #{index.where}" if index.where

  sql.join(" ")
end
visit_TableDefinition(o) click to toggle source
Calls superclass method
# File lib/active_record/connection_adapters/sqlserver/schema_creation.rb, line 13
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
    sql = "SELECT #{projections} INTO #{table_name} FROM #{source}"
  else
    o.instance_variable_set :@as, nil
    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