Class: Mondrian::OLAP::Schema::UserDefinedFunction::RubyUdfBase
- Inherits:
-
Object
- Object
- Mondrian::OLAP::Schema::UserDefinedFunction::RubyUdfBase
- 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
- .function_name ⇒ Object
- .function_name=(name) ⇒ Object
- .parameters(*types) ⇒ Object
- .returns(type = nil) ⇒ Object
- .syntax(type = nil) ⇒ Object
Instance Method Summary collapse
-
#call_with_evaluator(evaluator, *values) ⇒ Object
Override this method if evaluator is needed.
- #execute(evaluator, arguments) ⇒ Object
- #getDescription ⇒ Object
- #getName ⇒ Object
- #getParameterTypes ⇒ Object
- #getReservedWords ⇒ Object
- #getReturnType(parameterTypes) ⇒ Object
- #getSyntax ⇒ Object
Class Method Details
.function_name ⇒ Object
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 |
#getDescription ⇒ Object
81 82 83 |
# File 'lib/mondrian/olap/schema_udf.rb', line 81 def getDescription getName end |
#getName ⇒ Object
76 77 78 |
# File 'lib/mondrian/olap/schema_udf.rb', line 76 def getName self.class.function_name end |
#getParameterTypes ⇒ Object
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 |
#getReservedWords ⇒ Object
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 |
#getSyntax ⇒ Object
113 114 115 |
# File 'lib/mondrian/olap/schema_udf.rb', line 113 def getSyntax Java::mondrian.olap.Syntax.const_get self.class.syntax end |