private SparqlUpdateCommand TryParseDeleteDataCommand(SparqlUpdateParserContext context) { DeleteDataCommand cmd; SparqlQueryParserContext subContext = new SparqlQueryParserContext(context.Tokens); subContext.Query.BaseUri = context.BaseUri; subContext.Query.NamespaceMap = context.NamespaceMap; subContext.ExpressionParser.NamespaceMap = context.NamespaceMap; subContext.ExpressionParser.ExpressionFactories = context.ExpressionFactories; subContext.ExpressionFactories = context.ExpressionFactories; subContext.ExpressionParser.QueryParser = context.QueryParser; subContext.CheckBlankNodeScope = false; GraphPattern gp = context.QueryParser.TryParseGraphPattern(subContext, context.Tokens.LastTokenType != Token.LEFTCURLYBRACKET); // Validate that the Graph Pattern is simple // Check it doesn't contain anything other than Triple Patterns or if it does it just contains a single GRAPH Pattern if (gp.IsFiltered) { throw new RdfParseException("A FILTER Clause cannot occur in a DELETE DATA Command"); } else if (gp.IsOptional) { throw new RdfParseException("An OPTIONAL Clause cannot occur in a DELETE DATA Command"); } else if (gp.IsUnion) { throw new RdfParseException("A UNION Clause cannot occur in a DELETE DATA Command"); } else if (gp.HasChildGraphPatterns) { if (!gp.ChildGraphPatterns.All(p => (p.IsGraph && p.GraphSpecifier.TokenType != Token.VARIABLE) || (!p.IsExists && !p.IsMinus && !p.IsNotExists && !p.IsOptional && !p.IsOptional && !p.IsService && !p.IsSubQuery && !p.IsUnion && !p.IsGraph))) { throw new RdfParseException("A DELETE DATA Command may only contain a combination of Triple Patterns and GRAPH clauses, GRAPH clauses must specify a Graph URI"); } else if (gp.ChildGraphPatterns.Any(p => p.HasChildGraphPatterns)) { throw new RdfParseException("A DELETE DATA Command may not contain nested Graph Patterns"); } else if (gp.ChildGraphPatterns.Count == 1 && gp.ChildGraphPatterns[0].IsGraph && gp.TriplePatterns.Count == 0) { cmd = new DeleteDataCommand(gp.ChildGraphPatterns[0]); } else if (gp.HasChildGraphPatterns) { cmd = new DeleteDataCommand(gp); } else { throw new RdfParseException("Nested Graph Patterns cannot occur in a DELETE DATA Command"); } } else { // OK cmd = new DeleteDataCommand(gp); } return(cmd); }
/// <summary> /// Processes a DELETE DATA command /// </summary> /// <param name="cmd">DELETE Data Command</param> public void ProcessDeleteDataCommand(DeleteDataCommand cmd) { this.ProcessCommand(cmd); }
/// <summary> /// Processes a DELETE DATA command. /// </summary> /// <param name="cmd">Delete Data Command.</param> /// <param name="context">SPARQL Update Evaluation Context.</param> protected virtual void ProcessDeleteDataCommandInternal(DeleteDataCommand cmd, SparqlUpdateEvaluationContext context) { cmd.Evaluate(context); }
/// <summary> /// Processes a DELETE DATA command. /// </summary> /// <param name="cmd">DELETE Data Command.</param> public void ProcessDeleteDataCommand(DeleteDataCommand cmd) { ProcessDeleteDataCommandInternal(cmd, GetContext()); }