class Mkxms::Mssql::AdoptionScriptWriter::StatisticsAdoptionChecks
Attributes
stats_id[R]
Public Class Methods
new(statistics, error_sql_proc)
click to toggle source
Calls superclass method
# File lib/mkxms/mssql/adoption_script_writer.rb, line 1699 def initialize(statistics, error_sql_proc) super() @statistics = statistics @error_sql_proc = error_sql_proc @stats_id = "statistics #{statistics.name} on #{statistics.qualified_relation}" dsl { puts "IF NOT EXISTS (%s)" do puts dedent %Q{ SELECT * FROM sys.stats so INNER JOIN sys.objects rel ON so.object_id = rel.object_id INNER JOIN sys.schemas s ON rel.schema_id = s.schema_id WHERE s.name = #{strlit(unquoted_identifier statistics.schema)} AND rel.name = #{strlit(unquoted_identifier statistics.relation)} AND so.name = #{strlit(unquoted_identifier statistics.name)} } end puts "BEGIN" indented { puts error_sql "#{stats_id.capitalize} does not exist." } puts "END ELSE BEGIN" indented { # Check column sequence QueryCursor.new( dedent(%Q{ SELECT c.name FROM sys.stats so JOIN sys.stats_columns sc ON so.object_id = sc.object_id AND so.stats_id = sc.stats_id JOIN sys.columns c ON sc.object_id = c.object_id AND sc.column_id = c.column_id JOIN sys.objects rel ON so.object_id = rel.object_id JOIN sys.schemas s ON rel.schema_id = s.schema_id WHERE s.name = #{strlit(unquoted_identifier statistics.schema)} AND rel.name = #{strlit(unquoted_identifier statistics.relation)} AND so.name = #{strlit(unquoted_identifier statistics.name)} ORDER BY sc.stats_column_id }), "@column_name SYSNAME", output_to: self ).expectations( on_extra: ->{puts error_sql "#{stats_id.capitalize} has one or more unexpected columns."}, ) do |test| statistics.columns.each.with_index do |col_name, i| test.row( on_missing: ->{puts error_sql "#{stats_id.capitalize} is missing #{col_name}."}, ) { puts "IF QUOTENAME(@column_name) <> #{strlit col_name}" puts "BEGIN".."END" do puts error_sql "Expected #{col_name} as column #{i + 1} of #{stats_id}." end } end end } puts "END" } end
Public Instance Methods
error_sql(s)
click to toggle source
# File lib/mkxms/mssql/adoption_script_writer.rb, line 1765 def error_sql(s) @error_sql_proc.call(s) end