You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/07/13 13:16:11 UTC
[2/2] jena git commit: JENA-1203: Static checks of update requests
("verify")
JENA-1203: Static checks of update requests ("verify")
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/541807c1
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/541807c1
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/541807c1
Branch: refs/heads/master
Commit: 541807c19db920c8257109a0058c256e0892be39
Parents: bbf6029
Author: Andy Seaborne <an...@apache.org>
Authored: Wed Jul 13 10:48:07 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed Jul 13 14:15:24 2016 +0100
----------------------------------------------------------------------
.../jena/sparql/lang/SPARQLParserBase.java | 28 ++++++++-----
.../apache/jena/sparql/lang/SyntaxVarScope.java | 14 ++++---
.../modify/request/UpdateVisitorBase.java | 43 ++++++++++++++++++++
.../Syntax/Syntax-SPARQL-Update/manifest.ttl | 35 ++++++++--------
.../syntax-update-bad-13.ru | 7 ++++
.../syntax-update-bad-14.ru | 1 +
.../syntax-update-bad-15.ru | 1 +
jena-arq/testing/ARQ/Syntax/syn-up.sh | 2 +-
jena-arq/testing/ARQ/Syntax/syn-update.sh | 19 +++++++++
9 files changed, 116 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
index efb8723..d3fcd7b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
@@ -18,12 +18,7 @@
package org.apache.jena.sparql.lang;
-import java.util.ArrayDeque ;
-import java.util.ArrayList ;
-import java.util.Deque ;
-import java.util.HashSet ;
-import java.util.List ;
-import java.util.Set ;
+import java.util.* ;
import org.apache.jena.graph.Node ;
import org.apache.jena.query.Query ;
@@ -35,8 +30,7 @@ import org.apache.jena.sparql.engine.binding.Binding ;
import org.apache.jena.sparql.engine.binding.BindingFactory ;
import org.apache.jena.sparql.engine.binding.BindingMap ;
import org.apache.jena.sparql.modify.UpdateSink ;
-import org.apache.jena.sparql.modify.request.QuadAcc ;
-import org.apache.jena.sparql.modify.request.QuadDataAccSink ;
+import org.apache.jena.sparql.modify.request.* ;
import org.apache.jena.sparql.util.LabelToNodeMap ;
import org.apache.jena.update.Update ;
@@ -70,7 +64,6 @@ public class SPARQLParserBase extends ParserBase
// this.query = new Query () ;
// }
- // SPARQL Update (W3C RECommendation)
private UpdateSink sink = null ;
// Places to push settings across points where we reset.
@@ -188,13 +181,26 @@ public class SPARQLParserBase extends ParserBase
protected void emitUpdate(Update update)
{
+
// The parser can send null if it already performed an INSERT_DATA or DELETE_DATA
- if (null != update)
- {
+ if (null != update) {
+ // Verify each operation
+ verifyUpdate(update) ;
sink.send(update);
}
}
+ private static UpdateVisitor v = new UpdateVisitorBase() {
+ @Override
+ public void visit(UpdateModify mod) {
+ SyntaxVarScope.check(mod.getWherePattern()) ;
+ }
+ } ;
+
+ private void verifyUpdate(Update update) {
+ update.visit(v);
+ }
+
protected QuadDataAccSink createInsertDataSink()
{
return sink.createInsertDataSink();
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
index bfd1cf3..5573efb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java
@@ -59,22 +59,24 @@ public class SyntaxVarScope
if ( query.getQueryPattern() == null )
// DESCRIBE may not have a pattern
return ;
-
- checkSubQuery(query.getQueryPattern()) ;
- checkBind(query) ;
+ check(query.getQueryPattern()) ;
// Check this level.
checkQueryScope(query) ;
-
// Other checks.
Collection<Var> vars = varsOfQuery(query) ;
check(query, vars) ;
}
+ public static void check(Element queryPattern) {
+ checkSubQuery(queryPattern) ;
+ checkBind(queryPattern);
+ }
+
// Check BIND by accumulating variables and making sure BIND does not attempt to reuse one
- private static void checkBind(Query query)
+ private static void checkBind(Element queryPattern)
{
BindScopeChecker v = new BindScopeChecker() ;
- ElementWalker.walk(query.getQueryPattern(), v) ;
+ ElementWalker.walk(queryPattern, v) ;
}
// Check subquery by finding subquries and recurisively checking.
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/UpdateVisitorBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/UpdateVisitorBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/UpdateVisitorBase.java
new file mode 100644
index 0000000..1bf47ad
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/UpdateVisitorBase.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.sparql.modify.request;
+
+import org.apache.jena.atlas.lib.Sink ;
+import org.apache.jena.sparql.core.Quad ;
+
+public class UpdateVisitorBase implements UpdateVisitor
+{
+ @Override public void visit(UpdateDrop update) {}
+ @Override public void visit(UpdateClear update) {}
+
+ @Override public void visit(UpdateCreate update) {}
+ @Override public void visit(UpdateLoad update) {}
+
+ @Override public void visit(UpdateAdd update) {}
+ @Override public void visit(UpdateCopy update) {}
+ @Override public void visit(UpdateMove update) {}
+
+ @Override public void visit(UpdateDataInsert update) {}
+ @Override public void visit(UpdateDataDelete update) {}
+ @Override public void visit(UpdateDeleteWhere update) {}
+ @Override public void visit(UpdateModify update) {}
+
+ @Override public Sink<Quad> createInsertDataSink() { return null ; }
+ @Override public Sink<Quad> createDeleteDataSink() { return null ; }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/manifest.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/manifest.ttl b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/manifest.ttl
index b504d04..f518677 100644
--- a/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/manifest.ttl
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/manifest.ttl
@@ -1,19 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-@prefix : <http://www.w3.org/2009/sparql/docs/tests/data-sparql11/syntax-update-1/manifest#> .
+@prefix : <manifest#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .
@@ -78,6 +63,9 @@
:test_50
:test_51
:test_52
+:test_53
+:test_54
+:test_55
) .
:test_1 rdf:type mf:PositiveUpdateSyntaxTest11 ;
@@ -340,4 +328,19 @@
mf:name "syntax-update-bad-12.ru" ;
mf:action <syntax-update-bad-12.ru> ;.
+:test_53 rdf:type mf:NegativeUpdateSyntaxTest11 ;
+ dawgt:approval dawgt:NotClassified ;
+ mf:name "syntax-update-bad-13.ru" ;
+ mf:action <syntax-update-bad-13.ru> ;.
+
+:test_54 rdf:type mf:NegativeUpdateSyntaxTest11 ;
+ dawgt:approval dawgt:NotClassified ;
+ mf:name "syntax-update-bad-14.ru" ;
+ mf:action <syntax-update-bad-14.ru> ;.
+
+:test_55 rdf:type mf:NegativeUpdateSyntaxTest11 ;
+ dawgt:approval dawgt:NotClassified ;
+ mf:name "syntax-update-bad-15.ru" ;
+ mf:action <syntax-update-bad-15.ru> ;.
+
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-13.ru
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-13.ru b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-13.ru
new file mode 100644
index 0000000..548dd32
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-13.ru
@@ -0,0 +1,7 @@
+DELETE { }
+WHERE {
+ {SELECT * #?sub ?obj
+ WHERE {
+ ?sub ?pred ?obj .
+ } GROUP BY ?sub }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-14.ru
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-14.ru b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-14.ru
new file mode 100644
index 0000000..bc2b75d
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-14.ru
@@ -0,0 +1 @@
+INSERT { } WHERE { BIND(1 AS ?X) BIND(1 AS ?X) }
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-15.ru
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-15.ru b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-15.ru
new file mode 100644
index 0000000..c132815
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-SPARQL-Update/syntax-update-bad-15.ru
@@ -0,0 +1 @@
+INSERT { } WHERE { ?s ?p ?X BIND(1 AS ?X) }
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/testing/ARQ/Syntax/syn-up.sh
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/syn-up.sh b/jena-arq/testing/ARQ/Syntax/syn-up.sh
index cc20139..2dc706d 100644
--- a/jena-arq/testing/ARQ/Syntax/syn-up.sh
+++ b/jena-arq/testing/ARQ/Syntax/syn-up.sh
@@ -13,5 +13,5 @@ source syn-func.sh
cd Syntax-SPARQL-Update
clean
source ../syn-update.sh
- createManifest "Syntax SPARQL Update"
+ createManifest "Syntax SPARQL Update" '<manifest#>'
)
http://git-wip-us.apache.org/repos/asf/jena/blob/541807c1/jena-arq/testing/ARQ/Syntax/syn-update.sh
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/syn-update.sh b/jena-arq/testing/ARQ/Syntax/syn-update.sh
index 633e6ed..8f2cb8b 100644
--- a/jena-arq/testing/ARQ/Syntax/syn-update.sh
+++ b/jena-arq/testing/ARQ/Syntax/syn-update.sh
@@ -318,3 +318,22 @@ N=$((N+1)) ; testBad $SPARQL11U $(fname "syntax-update-bad-" $N) <<EOF
# BNode in DELETE DATA
DELETE DATA { _:a <p> <o> }
EOF
+
+## Scope
+N=$((N+1)) ; testBad $SPARQL11U $(fname "syntax-update-bad-" $N) <<EOF
+DELETE { }
+WHERE {
+ {SELECT * #?sub ?obj
+ WHERE {
+ ?sub ?pred ?obj .
+ } GROUP BY ?sub }
+}
+EOF
+
+N=$((N+1)) ; testBad $SPARQL11U $(fname "syntax-update-bad-" $N) <<EOF
+INSERT { } WHERE { BIND(1 AS ?X) BIND(1 AS ?X) }
+EOF
+
+N=$((N+1)) ; testBad $SPARQL11U $(fname "syntax-update-bad-" $N) <<EOF
+INSERT { } WHERE { ?s ?p ?X BIND(1 AS ?X) }
+EOF