Class: Mondrian::OLAP::Schema::UserDefinedFunction::RubyUdfBase

Inherits:
Object
  • Object
show all
Defined in:
lib/mondrian/olap/schema_udf.rb

Constant Summary collapse

VALID_SYNTAX_TYPES =
%w(Function Property Method)
UDF_SCALAR_TYPES =
{
  'Numeric' => Java::mondrian.olap.type.NumericType,
  'String' => Java::mondrian.olap.type.StringType,
  'Boolean' => Java::mondrian.olap.type.BooleanType,
  'DateTime' => Java::mondrian.olap.type.DateTimeType,
  'Decimal' => Java::mondrian.olap.type.DecimalType,
  'Scalar' => Java::mondrian.olap.type.ScalarType
}
UDF_OTHER_TYPES =
{
  'Member' => Java::mondrian.olap.type.MemberType::Unknown,
  'Tuple' => Java::mondrian.olap.type.TupleType.new([].to_java(Java::mondrian.olap.type.Type)),
  'Hierarchy' => Java::mondrian.olap.type.HierarchyType.new(nil, nil),
  'Level' => Java::mondrian.olap.type.LevelType::Unknown
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.function_nameObject



74
# File 'lib/mondrian/olap/schema_udf.rb', line 74

def self.function_name; @function_name; end

.function_name=(name) ⇒ Object



73
# File 'lib/mondrian/olap/schema_udf.rb', line 73

def self.function_name=(name); @function_name = name; end

.parameters(*types) ⇒ Object



86
87
88
89
90
91
92
# 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) ⇒ Object



94
95
96
97
98
99
100
# 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) ⇒ Object



103
104
105
106
107
108
109
110
111
# 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

Instance Method Details

#call_with_evaluator(evaluator, *values) ⇒ Object

Override this method if evaluator is needed



165
166
167
# File 'lib/mondrian/olap/schema_udf.rb', line 165

def call_with_evaluator(evaluator, *values)
  call(*values)
end

#execute(evaluator, arguments) ⇒ Object



153
154
155
156
157
158
159
160
# 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

#getDescriptionObject



81
82
83
# File 'lib/mondrian/olap/schema_udf.rb', line 81

def getDescription
  getName
end

#getNameObject



76
77
78
# File 'lib/mondrian/olap/schema_udf.rb', line 76

def getName
  self.class.function_name
end

#getParameterTypesObject



135
136
137
# File 'lib/mondrian/olap/schema_udf.rb', line 135

def getParameterTypes
  @parameterTypes ||= self.class.parameters.map{|p| get_java_type(p)}
end

#getReservedWordsObject



147
148
149
# File 'lib/mondrian/olap/schema_udf.rb', line 147

def getReservedWords
  nil
end

#getReturnType(parameterTypes) ⇒ Object



142
143
144
# File 'lib/mondrian/olap/schema_udf.rb', line 142

def getReturnType(parameterTypes)
  @returnType ||= get_java_type self.class.returns
end

#getSyntaxObject



113
114
115
# File 'lib/mondrian/olap/schema_udf.rb', line 113

def getSyntax
  Java::mondrian.olap.Syntax.const_get self.class.syntax
end