Class: SPARQL::Algebra::Operator::Copy
- Inherits:
-
SPARQL::Algebra::Operator
- Object
- SPARQL::Algebra::Operator
- SPARQL::Algebra::Operator::Copy
- Includes:
- Update
- Defined in:
- lib/sparql/algebra/operator/copy.rb
Overview
The SPARQL UPDATE copy
operator.
The COPY operation is a shortcut for inserting all data from an input graph into a destination graph. Data from the input graph is not affected, but data from the destination graph, if any, is removed before insertion.
[37] Copy ::= ‘COPY’ ‘SILENT’? GraphOrDefault ‘TO’ GraphOrDefault
Constant Summary collapse
- NAME =
[:copy]
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
Executes this upate on the given
writable
graph or repository. -
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
Methods included from Update
#graph_name=, #unshift, #variables
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
Instance Method Details
#execute(queryable, **options) ⇒ RDF::Queryable
Executes this upate on the given writable
graph or repository.
37 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 |
# File 'lib/sparql/algebra/operator/copy.rb', line 37 def execute(queryable, **) debug() {"Copy"} silent = operands.first == :silent operands.shift if silent src_name, dest_name = operands[-2..-1] raise ArgumentError, "copy expected two operands, got #{operands.length}" unless operands.length == 2 raise ArgumentError, "copy from must be IRI or :default" unless src_name == :default || src_name.is_a?(RDF::URI) raise ArgumentError, "copy 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, "copy 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_name src.each do |statement| statement = statement.dup statement.graph_name = (dest_name unless dest_name == :default) queryable << statement end end queryable end |
#to_sparql(**options) ⇒ String
Returns a partial SPARQL grammar for this operator.
73 74 75 76 77 78 |
# File 'lib/sparql/algebra/operator/copy.rb', line 73 def to_sparql(**) *args, last = operands.dup args += [:TO, last] "COPY " + args.to_sparql(**) end |