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