Class: SPARQL::Algebra::Operator::DeleteWhere
- Inherits:
-
Unary
- Object
- SPARQL::Algebra::Operator
- Unary
- SPARQL::Algebra::Operator::DeleteWhere
- Includes:
- Update
- Defined in:
- lib/sparql/algebra/operator/delete_where.rb
Overview
The SPARQL UPDATE deleteWhere
operator.
The DELETE WHERE operation is a shortcut form for the DELETE/INSERT operation where bindings matched by the WHERE clause are used to define the triples in a graph that will be deleted.
[40] DeleteWhere ::= ‘DELETE WHERE’ QuadPattern
Constant Summary collapse
- NAME =
[:deleteWhere]
Constants inherited from Unary
Constants inherited from SPARQL::Algebra::Operator
Constants included from Expression
Instance Attribute Summary
Attributes inherited from SPARQL::Algebra::Operator
Instance Method Summary collapse
-
#execute(queryable, **options) ⇒ RDF::Queryable
Query the operand, and delete all statements created by binding each solution to the patterns.
-
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this term.
Methods included from Update
#graph_name=, #unshift, #variables
Methods inherited from Unary
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, #initialize, #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?, #evaluate, extension, extension?, extensions, for, #invalid?, new, #node?, open, #optimize, #optimize!, parse, register_extension, #to_sxp_bin, #valid?, #validate!, #variable?
Constructor Details
This class inherits a constructor from SPARQL::Algebra::Operator::Unary
Instance Method Details
#execute(queryable, **options) ⇒ RDF::Queryable
Query the operand, and delete all statements created by binding each solution to the patterns
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/sparql/algebra/operator/delete_where.rb', line 43 def execute(queryable, **) # Operands are an array of patterns and Queries (when named). # Create a new query made up all patterns patterns = operand.inject([]) do |memo, op| if op.respond_to?(:statements) memo += op.statements.to_a else memo << op end memo end query = RDF::Query.new(*patterns, **{}) # FIXME: added hash argument needed until Statement#to_hash removed. debug() {"DeleteWhere query #{query.to_sse}"} query.execute(queryable, **.merge(depth: [:depth].to_i + 1)) do |solution| debug() {"DeleteWhere solution #{solution.to_sse}"} query.each_statement do |pattern| pattern = pattern.dup.bind(solution) debug() {"DeleteWhere pattern #{pattern.to_sse}"} queryable.delete(RDF::Statement.from(pattern)) if pattern.bound? || pattern.constant? end end queryable end |
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this term.
72 73 74 75 76 |
# File 'lib/sparql/algebra/operator/delete_where.rb', line 72 def to_sparql(**) "DELETE WHERE {\n" + operands.first.to_sparql(top_level: false, delimiter: ". \n", **) + "\n}" end |