Class: SPARQL::Algebra::Operator::Move
- Includes:
- Update
- Defined in:
- lib/sparql/algebra/operator/move.rb
Overview
The SPARQL UPDATE move operator.
The MOVE operation is a shortcut for moving all data from an input graph into a destination graph. The input graph is removed after insertion and data from the destination graph, if any, is removed before insertion.
[36] Move ::= 'MOVE' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault
Constant Summary collapse
- NAME =
[:move]
Instance Method Summary collapse
-
#execute(queryable, **options) ⇒ RDF::Queryable
Executes this upate on the given
writablegraph or repository. -
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
Methods included from Update
#empty?, #graph_name=, #unshift, #variables
Instance Method Details
#execute(queryable, **options) ⇒ RDF::Queryable
Executes this upate on the given writable graph or repository.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/sparql/algebra/operator/move.rb', line 38 def execute(queryable, **) debug() {"Move"} silent = operands.first == :silent operands.shift if silent src_name, dest_name = operands[-2..-1] raise ArgumentError, "move expected two operands, got #{operands.length}" unless operands.length == 2 raise ArgumentError, "move from must be IRI or :default" unless src_name == :default || src_name.is_a?(RDF::URI) raise ArgumentError, "move to must be IRI or :default" unless dest_name == :default || dest_name.is_a?(RDF::URI) src = queryable.enum_graph.detect {|g| g.to_s == src_name.to_s} if src.nil? raise IOError, "move operation source does not exist" unless silent elsif dest_name == src_name # No operation else dest = queryable.enum_graph.detect {|g| g.to_s == dest_name.to_s} # Clear destination first dest.clear! if dest # Copy statements using destination graph src.each do |statement| statement = statement.dup statement.graph_name = (dest_name unless dest_name == :default) queryable << statement end # Clear source src.clear! end queryable end |
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
77 78 79 80 81 82 |
# File 'lib/sparql/algebra/operator/move.rb', line 77 def to_sparql(**) *args, last = operands.dup args += [:TO, last] "MOVE " + args.to_sparql(**) end |