class Mondrian::OLAP::Schema::UserDefinedFunction::RubyUdfBase

Constants

UDF_OTHER_TYPES
UDF_SCALAR_TYPES
VALID_SYNTAX_TYPES

Public Class Methods

function_name() click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 74
def self.function_name; @function_name; end
function_name=(name) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 73
def self.function_name=(name); @function_name = name; end
parameters(*types) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 86
def self.parameters(*types)
  if types.empty?
    @parameters || []
  else
    @parameters = types.map{|type| stringified_type(type)}
  end
end
returns(type = nil) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 94
def self.returns(type = nil)
  if type
    @returns = stringified_type(type)
  else
    @returns || 'Scalar'
  end
end
syntax(type = nil) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 103
def self.syntax(type = nil)
  if type
    type = stringify(type)
    raise ArgumentError, "invalid user defined function type #{type.inspect}" unless VALID_SYNTAX_TYPES.include? type
    @syntax = type
  else
    @syntax || 'Function'
  end
end

Private Class Methods

stringified_type(type) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 179
def self.stringified_type(type)
  type_as_string = stringify(type)
  if UDF_SCALAR_TYPES[type_as_string] || UDF_OTHER_TYPES[type_as_string]
    type_as_string
  else
    raise ArgumentError, "Invalid user defined function type #{type.inspect}"
  end
end
stringify(arg) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 188
def self.stringify(arg)
  arg = arg.to_s.split('_').map{|s| s.capitalize}.join if arg.is_a? Symbol
  arg
end

Public Instance Methods

call_with_evaluator(evaluator, *values) click to toggle source

Override this method if evaluator is needed

# File lib/mondrian/olap/schema_udf.rb, line 165
def call_with_evaluator(evaluator, *values)
  call(*values)
end
execute(evaluator, arguments) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 153
def execute(evaluator, arguments)
  values = []
  self.class.parameters.each_with_index do |p, i|
    value = UDF_SCALAR_TYPES[p] ? arguments[i].evaluateScalar(evaluator) : arguments[i].evaluate(evaluator)
    values << value
  end
  call_with_evaluator(evaluator, *values)
end
getDescription() click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 81
def getDescription
  getName
end
getName() click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 76
def getName
  self.class.function_name
end
getParameterTypes() click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 135
def getParameterTypes
  @parameterTypes ||= self.class.parameters.map{|p| get_java_type(p)}
end
getReservedWords() click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 147
def getReservedWords
  nil
end
getReturnType(parameterTypes) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 142
def getReturnType(parameterTypes)
  @returnType ||= get_java_type self.class.returns
end
getSyntax() click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 113
def getSyntax
  Java::mondrian.olap.Syntax.const_get self.class.syntax
end

Private Instance Methods

get_java_type(type) click to toggle source
# File lib/mondrian/olap/schema_udf.rb, line 171
def get_java_type(type)
  if type_class = UDF_SCALAR_TYPES[type]
    type_class.new
  else
    UDF_OTHER_TYPES[type]
  end
end