Class: LD::Patch::Algebra::Cut
- Inherits:
-
SPARQL::Algebra::Operator::Unary
- Object
- SPARQL::Algebra::Operator::Unary
- LD::Patch::Algebra::Cut
- Includes:
- SPARQL::Algebra::Evaluatable, SPARQL::Algebra::Update
- Defined in:
- lib/ld/patch/algebra/cut.rb
Overview
The LD Patch cut
operator.
The Cut operation is recursively remove triples from some starting node.
Constant Summary collapse
- NAME =
:cut
Instance Method Summary collapse
-
#execute(queryable, options = {}) ⇒ RDF::Query::Solutions
Executes this upate on the given
writable
graph or repository.
Instance Method Details
#execute(queryable, options = {}) ⇒ RDF::Query::Solutions
Executes this upate on the given writable
graph or repository.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ld/patch/algebra/cut.rb', line 28 def execute(queryable, = {}) debug() {"Cut"} bindings = .fetch(:bindings) solution = bindings.first var = operand(0) # Bind variable raise LD::Patch::Error.new("Operand uses unbound variable #{var.inspect}", code: 400) unless solution.bound?(var) var = solution[var] cut_count = 0 # Get triples to delete using consice bounded description queryable.concise_bounded_description(var) do |statement| queryable.delete(statement) cut_count += 1 end # Also delete triples having var in the object position queryable.query({object: var}).each do |statement| queryable.delete(statement) cut_count += 1 end raise LD::Patch::Error, "Cut removed no triples" unless cut_count > 0 bindings end |