Class: SPARQL::Algebra::Operator::Plus
- Includes:
- Evaluatable
- Defined in:
- lib/sparql/algebra/operator/plus.rb
Overview
The SPARQL numeric binary/unary + operator.
[118] UnaryExpression ::= ... | '+' PrimaryExpression
[116] AdditiveExpression ::= MultiplicativeExpression ( '+' MultiplicativeExpression )?
Constant Summary collapse
- NAME =
[:+, :plus]
Instance Method Summary collapse
-
#apply(left, right = nil, **options) ⇒ RDF::Literal::Numeric, RDF::Literal::Temporal
Returns the arithmetic sum of the operands, unless there is no
right. -
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
Methods included from Evaluatable
#evaluate, #memoize, #replace_aggregate!, #replace_vars!
Instance Method Details
#apply(left, right = nil, **options) ⇒ RDF::Literal::Numeric, RDF::Literal::Temporal
Returns the arithmetic sum of the operands, unless there is no right.
56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/sparql/algebra/operator/plus.rb', line 56 def apply(left, right = nil, **) case when left.is_a?(RDF::Literal::Numeric) && right.is_a?(RDF::Literal::Numeric) left + right when left.is_a?(RDF::Literal::Numeric) && right.nil? left when left.is_a?(RDF::Literal::Temporal) && right.is_a?(RDF::Literal::Duration) left + right else raise TypeError, "expected two RDF::Literal::Numeric operands or a Temporal and a Duration, but got #{left.inspect} and #{right.inspect}" end end |
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
73 74 75 |
# File 'lib/sparql/algebra/operator/plus.rb', line 73 def to_sparql(**) "(#{operands.first.to_sparql(**)} + #{operands.last.to_sparql(**)})" end |