class Mkxms::Mssql::AdoptionScriptWriter::TableTypeKeyConstraintChecks

Attributes

constraint[R]
table[R]

Public Class Methods

new(table, constraint, error_sql_proc) click to toggle source
Calls superclass method
# File lib/mkxms/mssql/adoption_script_writer.rb, line 337
def initialize(table, constraint, error_sql_proc)
  super()
  
  @table = table
  @constraint = constraint
  @error_sql_proc = error_sql_proc
  
  add_tests
end

Public Instance Methods

add_tests() click to toggle source
# File lib/mkxms/mssql/adoption_script_writer.rb, line 353
def add_tests
  dsl {
    puts "IF NOT EXISTS(%s)" do
      puts dedent %Q{
        SELECT * FROM sys.key_constraints kc
        JOIN sys.table_types tt ON tt.type_table_object_id = kc.parent_object_id
        WHERE tt.user_type_id = TYPE_ID(#{table.qualified_name.sql_quoted})
        AND kc.type = #{
          case constraint.type
          when 'PRIMARY KEY' then 'PK'
          when 'UNIQUE' then 'UQ'
          else raise "Unknown key constraint type"
          end.sql_quoted
        }
      }
      constraint.columns.each_with_index do |col, i|
        puts dedent %Q{
          AND (
            SELECT ic.key_ordinal
            FROM sys.index_columns ic
            JOIN sys.columns c
              ON c.object_id = ic.object_id
              AND c.column_id = ic.column_id
            WHERE ic.object_id = kc.parent_object_id
            AND ic.index_id = kc.unique_index_id
            AND QUOTENAME(c.name) = #{col.name.sql_quoted}
          ) = #{i + 1}
        }
      end
    end
    puts "BEGIN"..."END" do
      puts error_sql "Table type #{table.qualified_name} does not have a #{constraint.type} constraint with the expected sequence of columns (#{constraint.columns.map(&:name).join(', ')})."
    end
  }
end
error_sql(s) click to toggle source
# File lib/mkxms/mssql/adoption_script_writer.rb, line 349
def error_sql(s)
  @error_sql_proc.call(s)
end