All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.rdf.sparql.ast.DeleteInsertGraph Maven / Gradle / Ivy

/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on Mar 10, 2012
 */

package com.bigdata.rdf.sparql.ast;

import java.util.Map;

import com.bigdata.bop.BOp;

/**
 * The DELETE/INSERT operation can be used to remove or add triples from/to the
 * Graph Store based on bindings for a query pattern specified in a WHERE
 * clause:
 * 
 * 
 * ( WITH IRIref )?
 * ( ( DeleteClause InsertClause? ) | InsertClause )
 * ( USING ( NAMED )? IRIref )*
 * WHERE GroupGraphPattern
 * 
* * The DeleteClause and InsertClause forms can be broken down as follows: * *
 * DeleteClause ::= DELETE  QuadPattern 
 * InsertClause ::= INSERT  QuadPattern
 * 
* * @see http://www.w3.org/TR/sparql11-update/#deleteInsert * * @author Bryan Thompson */ public class DeleteInsertGraph extends GraphUpdate implements IGraphPatternContainer, IDataSetNode { /** * */ private static final long serialVersionUID = 1L; interface Annotations extends GraphUpdate.Annotations, IGraphPatternContainer.Annotations, IDataSetNode.Annotations { /** * The optional DELETE clause. */ String DELETE_CLAUSE = "deleteClause"; /** * The optional INSERT clause. */ String INSERT_CLAUSE = "insertClause"; } public DeleteInsertGraph() { super(UpdateType.DeleteInsert); } /** * @param op */ public DeleteInsertGraph(final DeleteInsertGraph op) { super(op); } /** * @param args * @param anns */ public DeleteInsertGraph(final BOp[] args, final Map anns) { super(args, anns); } /** * {@inheritDoc} *

* Note: The data set can only be specified for the general case of * DELETE/INSERT. The data set is specific to the DELETE/INSERT operation to * which it is attached (it is not inherited or combined with the data set * for later operations in a sequence). */ @Override public void setDataset(final DatasetNode dataset) { setProperty(Annotations.DATASET, dataset); } @Override public DatasetNode getDataset() { return (DatasetNode) getProperty(Annotations.DATASET); } /** * Return the {@link GraphPatternGroup} for the WHERE clause. * * @return The WHERE clause -or- null. */ @SuppressWarnings({ "rawtypes" }) public GraphPatternGroup getWhereClause() { // Note: Synonym for getGraphPattern. return getGraphPattern(); } @Override @SuppressWarnings("unchecked") public GraphPatternGroup getGraphPattern() { return (GraphPatternGroup) getProperty(Annotations.GRAPH_PATTERN); } /** * Set the WHERE clause. */ public void setWhereClause( final GraphPatternGroup whereClause) { setGraphPattern(whereClause); } @Override public void setGraphPattern( final GraphPatternGroup graphPattern) { /* * Clear the parent reference on the new where clause. * * Note: This handles cases where a join group is lifted into a named * subquery. If we do not clear the parent reference on the lifted join * group it will still point back to its parent in the original join * group. */ graphPattern.setParent(null); super.setProperty(Annotations.GRAPH_PATTERN, graphPattern); } /** * Return the template for the DELETE clause. */ public QuadsDataOrNamedSolutionSet getDeleteClause() { return (QuadsDataOrNamedSolutionSet) getProperty(Annotations.DELETE_CLAUSE); } /** * Return the template for the INSERT clause. */ public QuadsDataOrNamedSolutionSet getInsertClause() { return (QuadsDataOrNamedSolutionSet) getProperty(Annotations.INSERT_CLAUSE); } public void setDeleteClause(final QuadsDataOrNamedSolutionSet data) { setProperty(Annotations.DELETE_CLAUSE, data); } public void setInsertClause(final QuadsDataOrNamedSolutionSet data) { setProperty(Annotations.INSERT_CLAUSE, data); } @Override final public String toString(final int indent) { final StringBuilder sb = new StringBuilder(); sb.append(indent(indent)); sb.append(getUpdateType()); final DatasetNode dataset = getDataset(); final QuadsDataOrNamedSolutionSet deleteClause = getDeleteClause(); final QuadsDataOrNamedSolutionSet insertClause = getInsertClause(); final GraphPatternGroup whereClause = getWhereClause(); if (dataset != null) { sb.append(dataset.toString(indent + 1)); } if (deleteClause != null) { sb.append("\n"); sb.append(indent(indent + 1)); sb.append("DELETE "); sb.append(deleteClause.toString(indent + 2)); } if (insertClause != null) { sb.append("\n"); sb.append(indent(indent + 1)); sb.append("INSERT "); sb.append(insertClause.toString(indent + 2)); } if (whereClause != null) { sb.append("\n"); sb.append(indent(indent + 1)); sb.append("WHERE"); sb.append(whereClause.toString(indent + 2)); } sb.append("\n"); return sb.toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy