class Mkxms::Mssql::ClrFunction

Constants

SQL_OBJECT_TYPE

Attributes

clr_impl[RW]
execute_as[RW]
name[RW]
result_table[RW]
returns[RW]
schema[RW]

Public Class Methods

new(attrs) click to toggle source
# File lib/mkxms/mssql/clr_function_handler.rb, line 38
def initialize(attrs)
  @schema = attrs['schema']
  @name = attrs['name']
  @execute_as = attrs['execute-as']
end

Public Instance Methods

param_properties_sql() click to toggle source
# File lib/mkxms/mssql/clr_function_handler.rb, line 82
def param_properties_sql
  params.map do |param|
    subitem_extended_properties_sql(param)
  end
end
procedure_def_sql() click to toggle source
# File lib/mkxms/mssql/clr_function_handler.rb, line 51
def procedure_def_sql
  [[].tap do |lines|
    lines << "CREATE FUNCTION [{filename}] ("
    lines << params.map do |param|
      "  #{param.name} #{param.type_spec}".tap do |param_spec|
        param_spec << " = #{param.default_value}" if param.default_value
      end
    end.join(",\n")
    lines << ")"
    case 
    when returns
      lines << "RETURNS #{returns.type_spec}"
    when result_table
      lines << "RETURNS TABLE ("
      lines << result_table.columns.map do |col|
        "  #{col.name} #{col.type_spec}"
      end.join(",\n")
      lines << ")"
    else
      raise RuntimeError.new("Function return not defined")
    end
    case execute_as
    when "OWNER"
      lines << "WITH EXECUTE AS OWNER"
    when String
      lines << "WITH EXECUTE AS '#{Utils.unquoted_name execute_as}'"
    end
    lines << "AS EXTERNAL NAME #{clr_impl.full_specifier};"
  end.join("\n")]
end
result_column_properties_sql() click to toggle source
# File lib/mkxms/mssql/clr_function_handler.rb, line 88
def result_column_properties_sql
  return [] unless result_table
  result_table.columns.map do |col|
    subitem_extended_properties_sql(col)
  end
end
to_sql() click to toggle source
# File lib/mkxms/mssql/clr_function_handler.rb, line 47
def to_sql
  (procedure_def_sql + extended_properties_sql + param_properties_sql + result_column_properties_sql).join("\n")
end