Class: SPARQL::Algebra::Operator::And
- Inherits:
-
Binary
- Object
- SPARQL::Algebra::Operator
- Binary
- SPARQL::Algebra::Operator::And
- Includes:
- Evaluatable
- Defined in:
- lib/sparql/algebra/operator/and.rb
Overview
The SPARQL logical and
operator.
[112] ConditionalAndExpression::= ValueLogical ( ‘&&’ ValueLogical )*
Constant Summary collapse
- NAME =
[:'&&', :and]
Constants inherited from Binary
Constants inherited from SPARQL::Algebra::Operator
Constants included from Expression
Instance Attribute Summary
Attributes inherited from SPARQL::Algebra::Operator
Instance Method Summary collapse
-
#evaluate(bindings, **options) ⇒ RDF::Literal::Boolean
Returns a logical
AND
ofleft
andright
. -
#initialize(left, right, **options) ⇒ And
constructor
Initializes a new operator instance.
-
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
Methods included from Evaluatable
#apply, #memoize, #replace_aggregate!, #replace_vars!
Methods inherited from SPARQL::Algebra::Operator
#aggregate?, arity, #base_uri, base_uri, base_uri=, #bind, #boolean, #constant?, #deep_dup, #each_descendant, #eql?, #evaluatable?, evaluate, #executable?, #first_ancestor, for, #inspect, #ndvars, #node?, #operand, #optimize, #optimize!, #parent, #parent=, #prefixes, prefixes, prefixes=, #rewrite, #to_binary, to_sparql, #to_sxp, #to_sxp_bin, #validate!, #variable?, #variables, #vars
Methods included from Expression
cast, #constant?, extension, extension?, extensions, for, #invalid?, new, #node?, open, #optimize, #optimize!, parse, register_extension, #to_sxp_bin, #valid?, #validate!, #variable?
Constructor Details
#initialize(left, right, **options) ⇒ And
Initializes a new operator instance.
40 41 42 |
# File 'lib/sparql/algebra/operator/and.rb', line 40 def initialize(left, right, **) super end |
Instance Method Details
#evaluate(bindings, **options) ⇒ RDF::Literal::Boolean
Returns a logical AND
of left
and right
. Note that logical-and operates on the effective boolean value of its arguments.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/sparql/algebra/operator/and.rb', line 53 def evaluate(bindings, **) begin left = boolean(operand(0).evaluate(bindings, **.merge(depth: [:depth].to_i + 1))).true? rescue TypeError left = nil end begin right = boolean(operand(1).evaluate(bindings, **.merge(depth: [:depth].to_i + 1))).true? rescue TypeError right = nil end # From https://www.w3.org/TR/sparql11-query/#evaluation # A logical-and that encounters an error on only one branch will return an error if the other branch is # TRUE and FALSE if the other branch is FALSE. case when left.nil? && right.nil? then raise(TypeError) when left.nil? then right ? raise(TypeError) : RDF::Literal::FALSE when right.nil? then left ? raise(TypeError) : RDF::Literal::FALSE else RDF::Literal(left && right) end end |
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
82 83 84 |
# File 'lib/sparql/algebra/operator/and.rb', line 82 def to_sparql(**) "(#{operands.first.to_sparql(**)} && #{operands.last.to_sparql(**)})" end |