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,
  "Set" => Java::mondrian.olap.type.SetType.new(Java::mondrian.olap.type.MemberType::Unknown),
  "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



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

def self.function_name; @function_name; end

.function_name=(name) ⇒ Object



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

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

.parameters(*types) ⇒ Object



150
151
152
153
154
155
156
# File 'lib/mondrian/olap/schema_udf.rb', line 150

def self.parameters(*types)
  if types.empty?
    @parameters || []
  else
    @parameters = types.map{|type| stringified_type(type)}
  end
end

.returns(type = nil) ⇒ Object



158
159
160
161
162
163
164
# File 'lib/mondrian/olap/schema_udf.rb', line 158

def self.returns(type = nil)
  if type
    @returns = stringified_type(type)
  else
    @returns || 'Scalar'
  end
end

.syntax(type = nil) ⇒ Object



167
168
169
170
171
172
173
174
175
# File 'lib/mondrian/olap/schema_udf.rb', line 167

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 metho if evaluator is needed



227
228
229
# File 'lib/mondrian/olap/schema_udf.rb', line 227

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

#execute(evaluator, arguments) ⇒ Object



215
216
217
218
219
220
221
222
# File 'lib/mondrian/olap/schema_udf.rb', line 215

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



145
146
147
# File 'lib/mondrian/olap/schema_udf.rb', line 145

def getDescription
  getName
end

#getNameObject



140
141
142
# File 'lib/mondrian/olap/schema_udf.rb', line 140

def getName
  self.class.function_name
end

#getParameterTypesObject



197
198
199
# File 'lib/mondrian/olap/schema_udf.rb', line 197

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

#getReservedWordsObject



209
210
211
# File 'lib/mondrian/olap/schema_udf.rb', line 209

def getReservedWords
  nil
end

#getReturnType(parameterTypes) ⇒ Object



204
205
206
# File 'lib/mondrian/olap/schema_udf.rb', line 204

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

#getSyntaxObject



177
178
179
# File 'lib/mondrian/olap/schema_udf.rb', line 177

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