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 2024/08/28 21:55:12 UTC

(jena) branch main updated (7a1b62af30 -> 12a11dc7b1)

This is an automated email from the ASF dual-hosted git repository.

andy pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


    from 7a1b62af30 Bump cypress from 13.13.3 to 13.14.0 in /jena-fuseki2/jena-fuseki-ui
     new bac1aeba46 Add functions for update applied to a Model or Graph
     new f3e6190e14 Improve development trace code
     new bc3d30bb03 GH-2664: Consolidate NullIterator and SingletonIterator around Iter functions
     new c0570fc557 Update white space
     new 2561cf1a09 Remove commented out code
     new 25f8a95096 Prefer the name Iter.filterDrop
     new 9f6ca08d28 GH-2665: XMLLiteralType: rename theXMLLiteralType as rdfXMLLiteral
     new ec7f71c6e3 Provide validity test in PeekIterator
     new 02b955204b Provide merge operation that reuses a BindingBuilder
     new 0999cb0f9f Remove unused metrics provider in DataAccessPointRegistry
     new 3f3eb632c4 Include initial text direction in toString
     new 12a11dc7b1 Tidy code in G

The 12 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../jena/riot/lang/rdfxml/ReaderRDFXML_ARP0.java   |   2 +-
 .../jena/riot/lang/rdfxml/ReaderRDFXML_ARP1.java   |   2 +-
 .../jena/riot/lang/rdfxml/rrx/ParserRRX_SAX.java   |   2 +-
 .../lang/rdfxml/rrx_stax_ev/ParserRRX_StAX_EV.java |   2 +-
 .../lang/rdfxml/rrx_stax_sr/ParserRRX_StAX_SR.java |   2 +-
 .../org/apache/jena/riot/writer/WriterTriX.java    |   2 +-
 .../apache/jena/sparql/algebra/table/Table1.java   |   2 +-
 .../jena/sparql/algebra/table/TableUnit.java       |   2 +-
 .../apache/jena/sparql/core/DatasetGraphOne.java   |   5 +-
 .../jena/sparql/engine/binding/BindingLib.java     |  16 ++-
 .../sparql/engine/iterator/QueryIterGroup.java     |   4 +-
 .../sparql/engine/iterator/QueryIterProject.java   |  74 +++++-----
 .../engine/iterator/QueryIterProjectMerge.java     |  75 ++++++-----
 .../sparql/engine/iterator/QueryIteratorBase.java  |   8 +-
 .../jena/sparql/engine/main/JoinClassifier.java    |   2 +-
 .../apache/jena/sparql/engine/main/OpExecutor.java |   2 +-
 .../engine/main/iterator/QueryIterGraph.java       |  33 +++--
 .../jena/sparql/engine/ref/EvaluatorSimple.java    |   2 +-
 .../org/apache/jena/sparql/exec/UpdateExec.java    |  11 ++
 .../jena/sparql/modify/UpdateEngineWorker.java     |  13 +-
 .../apache/jena/sparql/util/graph/GraphList.java   |   2 +-
 .../src/main/java/org/apache/jena/system/G.java    |   5 +-
 .../org/apache/jena/update/UpdateExecution.java    |  15 +++
 .../java/org/apache/jena/atlas/iterator/Iter.java  |  20 ++-
 .../apache/jena/atlas/iterator/NullIterator.java   |  10 ++
 .../apache/jena/atlas/iterator/PeekIterator.java   |  21 ++-
 .../jena/atlas/iterator/SingletonIterator.java     |   8 +-
 .../org/apache/jena/atlas/lib/cache/Cache1.java    |   4 +-
 .../apache/jena/atlas/iterator/TS_Iterator.java    |   4 +-
 .../jena/atlas/iterator/TestIteratorPeek.java      | 107 ---------------
 .../jena/atlas/iterator/TestPeekIterator.java      | 150 +++++++++++++++++++++
 ...atorPushback.java => TestPushbackIterator.java} |   2 +-
 .../java/org/apache/jena/datatypes/TypeMapper.java |   2 +-
 .../jena/datatypes/xsd/impl/XMLLiteralType.java    |  14 +-
 .../org/apache/jena/graph/impl/LiteralLabel.java   |   8 +-
 .../jena/rdfxml/xmlinput0/RDFXMLReader0.java       |   2 +-
 .../apache/jena/rdfxml/xmlinput1/RDFXMLReader.java |   2 +-
 .../main/java/org/apache/jena/vocabulary/RDF.java  |   4 +-
 .../apache/jena/datatypes/TestRDFXMLiteral.java    |   4 +-
 .../apache/jena/graph/test/AbstractTestGraph.java  |   4 +-
 .../bplustree/BPTreeDistinctKeyPrefixIterator.java |   6 +-
 .../jena/fuseki/metrics/SimpleMetricsProvider.java |   2 +
 .../fuseki/server/DataAccessPointRegistry.java     |  11 +-
 .../fuseki/validation/html/QueryValidatorHTML.java |   2 -
 .../jena/fuseki/main/sys/FusekiAutoModules.java    |   6 +-
 .../jena/shacl/compact/writer/CompactWriter.java   |   1 -
 .../java/org/apache/jena/tdb1/store/QuadTable.java |  35 ++---
 .../org/apache/jena/tdb1/store/TripleTable.java    |  29 ++--
 .../nodetupletable/NodeTupleTableConcrete.java     |   3 +-
 .../tdb1/store/tupletable/TupleIndexRecord.java    |   4 +-
 .../tdb2/store/tupletable/TupleIndexRecord.java    |   6 +-
 51 files changed, 438 insertions(+), 316 deletions(-)
 delete mode 100644 jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIteratorPeek.java
 create mode 100644 jena-base/src/test/java/org/apache/jena/atlas/iterator/TestPeekIterator.java
 rename jena-base/src/test/java/org/apache/jena/atlas/iterator/{TestIteratorPushback.java => TestPushbackIterator.java} (98%)


(jena) 07/12: GH-2665: XMLLiteralType: rename theXMLLiteralType as rdfXMLLiteral

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 9f6ca08d286ee257d1ae854f34f915c10a504b9a
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Aug 21 10:39:46 2024 +0100

    GH-2665: XMLLiteralType: rename theXMLLiteralType as rdfXMLLiteral
---
 .../apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP0.java    |  2 +-
 .../apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP1.java    |  2 +-
 .../apache/jena/riot/lang/rdfxml/rrx/ParserRRX_SAX.java    |  2 +-
 .../riot/lang/rdfxml/rrx_stax_ev/ParserRRX_StAX_EV.java    |  2 +-
 .../riot/lang/rdfxml/rrx_stax_sr/ParserRRX_StAX_SR.java    |  2 +-
 .../main/java/org/apache/jena/riot/writer/WriterTriX.java  |  2 +-
 .../jena/sparql/engine/iterator/QueryIteratorBase.java     |  8 +++++---
 .../main/java/org/apache/jena/datatypes/TypeMapper.java    |  2 +-
 .../org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java | 14 ++++++++++++--
 .../main/java/org/apache/jena/graph/impl/LiteralLabel.java |  2 +-
 .../org/apache/jena/rdfxml/xmlinput0/RDFXMLReader0.java    |  2 +-
 .../org/apache/jena/rdfxml/xmlinput1/RDFXMLReader.java     |  2 +-
 .../src/main/java/org/apache/jena/vocabulary/RDF.java      |  4 ++--
 .../java/org/apache/jena/datatypes/TestRDFXMLiteral.java   |  4 ++--
 .../java/org/apache/jena/graph/test/AbstractTestGraph.java |  4 ++--
 15 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP0.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP0.java
index 536d6b1e4b..b93139f252 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP0.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP0.java
@@ -220,7 +220,7 @@ public class ReaderRDFXML_ARP0 implements ReaderRIOT
                 return NodeFactory.createLiteralLang(lit.toString(), lit.getLang());
 
             if (lit.isWellFormedXML()) {
-                return NodeFactory.createLiteral(lit.toString(), null, XMLLiteralType.theXMLLiteralType);
+                return NodeFactory.createLiteral(lit.toString(), null, XMLLiteralType.rdfXMLLiteral);
             }
 
             RDFDatatype dt = TypeMapper.getInstance().getSafeTypeByName(dtURI);
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP1.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP1.java
index 5a5437e765..e6c0837352 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP1.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/ReaderRDFXML_ARP1.java
@@ -235,7 +235,7 @@ public class ReaderRDFXML_ARP1 implements ReaderRIOT
                 return parserProfile.createLangLiteral(lit.toString(), lit.getLang(), -1, -1);
 
             if (lit.isWellFormedXML()) {
-                return parserProfile.createTypedLiteral(lit.toString(), XMLLiteralType.theXMLLiteralType, -1, -1);
+                return parserProfile.createTypedLiteral(lit.toString(), XMLLiteralType.rdfXMLLiteral, -1, -1);
             }
 
             RDFDatatype dt = TypeMapper.getInstance().getSafeTypeByName(dtURI);
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRRX_SAX.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRRX_SAX.java
index 6d3e768ef5..f1bf90887f 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRRX_SAX.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRRX_SAX.java
@@ -93,7 +93,7 @@ class ParserRRX_SAX
     private static final String rdfAboutEachPrefix = "aboutEachPrefix";
     private static final String rdfBagID = "bagID";
 
-    private static final RDFDatatype rdfXmlLiteralDT = XMLLiteralType.theXMLLiteralType;
+    private static final RDFDatatype rdfXmlLiteralDT = XMLLiteralType.rdfXMLLiteral;
 
     // LN = Local name.
     private static final String xmlBaseLN = "base";
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_ev/ParserRRX_StAX_EV.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_ev/ParserRRX_StAX_EV.java
index f0706cdcd4..cbd3fd68e3 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_ev/ParserRRX_StAX_EV.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_ev/ParserRRX_StAX_EV.java
@@ -814,7 +814,7 @@ class ParserRRX_StAX_EV {
         //NamespaceContext nsCxt = startElt.getNamespaceContext();
 
         String text = xmlLiteralAccumulateText(startElt);
-        Node object = literalDatatype(text, XMLLiteralType.theXMLLiteralType, startElt.getLocation());
+        Node object = literalDatatype(text, XMLLiteralType.rdfXMLLiteral, startElt.getLocation());
         emitter.emit(subject, property, object, startElt.getLocation());
         // Skip trailer then end property tag.
         XMLEvent event = peekEvent();
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_sr/ParserRRX_StAX_SR.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_sr/ParserRRX_StAX_SR.java
index d6df70f8af..32c8eaf971 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_sr/ParserRRX_StAX_SR.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx_stax_sr/ParserRRX_StAX_SR.java
@@ -781,7 +781,7 @@ class ParserRRX_StAX_SR {
 
     private int parseTypeLiteral(Node subject, Node property, Emitter emitter, Location location) {
         String text = xmlLiteralAccumulateText();
-        Node object = literalDatatype(text, XMLLiteralType.theXMLLiteralType, location);
+        Node object = literalDatatype(text, XMLLiteralType.rdfXMLLiteral, location);
         emitter.emit(subject, property, object, location);
         return END_ELEMENT;
     }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterTriX.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterTriX.java
index 18d1b10b6d..b8ac070ebe 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterTriX.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterTriX.java
@@ -43,7 +43,7 @@ import org.apache.jena.sparql.util.Context;
  * @see StreamWriterTriX
  */
 public class WriterTriX implements WriterDatasetRIOT, WriterGraphRIOT {
-    private static String rdfXMLLiteral = XMLLiteralType.theXMLLiteralType.getURI();
+    private static String rdfXMLLiteral = XMLLiteralType.rdfXMLLiteral.getURI();
 
     // Common pattern.
     @Override
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
index 4177328edb..e58361ea3c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
@@ -78,13 +78,15 @@ public abstract class QueryIteratorBase
     // -------- The contract with the subclasses
 
     /**
-     * Implement this, not hasNext()
+     * Implement this, not hasNext().
+     * Do not throw {@link NoSuchElementException}.
      */
     protected abstract boolean hasNextBinding();
 
     /**
-     * Implement this, not next() or nextBinding() Returning null is turned into
-     * NoSuchElementException Does not need to call hasNext (can presume it is true)
+     * Implement this, not next() or nextBinding().
+     * Returning null is turned into
+     * NoSuchElementException. Does not need to call hasNextBinding.
      */
     protected abstract Binding moveToNextBinding();
 
diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java b/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java
index 7a944fa9ad..5dd07fba12 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java
@@ -69,7 +69,7 @@ public class TypeMapper {
         theTypeMap.registerDatatype(RDFLangString.rdfLangString) ;
         theTypeMap.registerDatatype(RDFDirLangString.rdfDirLangString) ;
         theTypeMap.registerDatatype(RDFjson.rdfJSON);
-        theTypeMap.registerDatatype(XMLLiteralType.theXMLLiteralType);
+        theTypeMap.registerDatatype(XMLLiteralType.rdfXMLLiteral);
         theTypeMap.registerDatatype(RDFhtml.rdfHTML);
         XSDDatatype.loadXSDSimpleTypes(theTypeMap);
 
diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java
index 50460ab9bc..741f4d0a68 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XMLLiteralType.java
@@ -42,6 +42,7 @@ import org.apache.jena.graph.impl.LiteralLabel;
 import org.apache.jena.shared.JenaException;
 import org.apache.jena.util.JenaXMLInput;
 import org.apache.jena.util.JenaXMLOutput;
+import org.apache.jena.vocabulary.RDF;
 import org.w3c.dom.Document;
 import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Node;
@@ -61,8 +62,17 @@ import org.xml.sax.SAXParseException;
 public class XMLLiteralType extends BaseDatatype implements RDFDatatype {
 
     public static String XMLLiteralTypeURI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral";
-    /** Singleton instance */
-    // Include the string for the RDF namespace, do not use RDF.getURI(), to avoid the risk of an initializer circularity.
+    /**
+     * Singleton instance of the rdf:XMLLIteral datatype.
+     * Prefer {@link RDF#dtXMLLiteral} in applications.
+     */
+    public static final RDFDatatype rdfXMLLiteral = new XMLLiteralType(XMLLiteralTypeURI);
+
+    /**
+     * Singleton instance (legacy name)
+     * @deprecated Prefer the constant {@link #rdfXMLLiteral} or {@link RDF#dtXMLLiteral}
+     */
+    @Deprecated
     public static final RDFDatatype theXMLLiteralType = new XMLLiteralType(XMLLiteralTypeURI);
 
     private static final String  xmlWrapperTagName  = "xml-literal-fragment";
diff --git a/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java b/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java
index 06b5adb0ec..441b649cae 100644
--- a/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java
+++ b/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java
@@ -341,7 +341,7 @@ final public class LiteralLabel {
      * Therefore getValueHashCode is the same as hashCode();
      */
     private boolean indexingValueIsSelf() {
-        return dtype == XMLLiteralType.theXMLLiteralType ||
+        return dtype == XMLLiteralType.rdfXMLLiteral ||
                dtype == RDFjson.rdfJSON ||
                dtype == RDFhtml.rdfHTML ;
     }
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput0/RDFXMLReader0.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput0/RDFXMLReader0.java
index 7969db5447..63ee78a278 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput0/RDFXMLReader0.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput0/RDFXMLReader0.java
@@ -127,7 +127,7 @@ public class RDFXMLReader0 implements RDFReaderI, ARPErrorNumbers {
             return NodeFactory.createLiteralLang(lit.toString(), lit.getLang());
 
         if (lit.isWellFormedXML()) {
-            return NodeFactory.createLiteral(lit.toString(), null, XMLLiteralType.theXMLLiteralType);
+            return NodeFactory.createLiteral(lit.toString(), null, XMLLiteralType.rdfXMLLiteral);
         }
 
         RDFDatatype dt = TypeMapper.getInstance().getSafeTypeByName(dtURI);
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput1/RDFXMLReader.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput1/RDFXMLReader.java
index cae8262b03..dc8813efa9 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput1/RDFXMLReader.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput1/RDFXMLReader.java
@@ -146,7 +146,7 @@ public class RDFXMLReader implements RDFReaderI, ARPErrorNumbers {
             return NodeFactory.createLiteralLang(lit.toString(), lit.getLang());
 
         if (lit.isWellFormedXML()) {
-            return NodeFactory.createLiteral(lit.toString(), null, XMLLiteralType.theXMLLiteralType);
+            return NodeFactory.createLiteral(lit.toString(), null, XMLLiteralType.rdfXMLLiteral);
         }
 
         RDFDatatype dt = TypeMapper.getInstance().getSafeTypeByName(dtURI);
diff --git a/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java b/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java
index 711bdf3682..e162a9b737 100644
--- a/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java
+++ b/jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java
@@ -125,7 +125,7 @@ public class RDF {
     public static final RDFDatatype dtRDFHTML       = RDFhtml.rdfHTML;
     public static final RDFDatatype dtLangString    = RDFLangString.rdfLangString;
     public static final RDFDatatype dtDirLangString = RDFDirLangString.rdfDirLangString;
-    public static final RDFDatatype dtXMLLiteral    = XMLLiteralType.theXMLLiteralType;
+    public static final RDFDatatype dtXMLLiteral    = XMLLiteralType.rdfXMLLiteral;
 
     // Added to the RDF namespace December 2019
     // https://lists.w3.org/Archives/Public/semantic-web/2019Dec/0027.html
@@ -179,7 +179,7 @@ public class RDF {
         public static RDFDatatype dtRDFHTML()       { return RDFhtml.rdfHTML; }
         public static RDFDatatype dtLangString()    { return RDFLangString.rdfLangString; }
         public static RDFDatatype dtDirLangString() { return RDFDirLangString.rdfDirLangString; }
-        public static RDFDatatype dtXMLLiteral()    { return XMLLiteralType.theXMLLiteralType; }
+        public static RDFDatatype dtXMLLiteral()    { return XMLLiteralType.rdfXMLLiteral; }
         public static RDFDatatype dtRDFJSON()       { return RDFjson.rdfJSON; }
     }
 
diff --git a/jena-core/src/test/java/org/apache/jena/datatypes/TestRDFXMLiteral.java b/jena-core/src/test/java/org/apache/jena/datatypes/TestRDFXMLiteral.java
index e1419a1c8a..99cfddca8a 100644
--- a/jena-core/src/test/java/org/apache/jena/datatypes/TestRDFXMLiteral.java
+++ b/jena-core/src/test/java/org/apache/jena/datatypes/TestRDFXMLiteral.java
@@ -60,8 +60,8 @@ public class TestRDFXMLiteral {
     // ----
 
     private static void test(String lex1, String lex2, boolean javaEquals, boolean sameTerm, boolean sameValue) {
-        Node n1 = NodeFactory.createLiteralDT(lex1, XMLLiteralType.theXMLLiteralType);
-        Node n2 = NodeFactory.createLiteralDT(lex2, XMLLiteralType.theXMLLiteralType);
+        Node n1 = NodeFactory.createLiteralDT(lex1, XMLLiteralType.rdfXMLLiteral);
+        Node n2 = NodeFactory.createLiteralDT(lex2, XMLLiteralType.rdfXMLLiteral);
         assertEquals(javaEquals, n1.equals(n2));
         assertEquals(sameTerm, n1.sameTermAs(n2));
         assertEquals(sameValue, n1.sameValueAs(n2));
diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java
index 8100411d08..69d1170226 100644
--- a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java
@@ -414,8 +414,8 @@ public abstract class AbstractTestGraph extends GraphTestBase
     {
         Graph g = getGraph();
         graphAdd( g, "S P O" );
-        assertDiffer( new HashSet<Triple>(), g.find( Node.ANY, Node.ANY, Node.ANY ).toSet() );
-        assertDiffer( new HashSet<Triple>(), g.find( Triple.ANY ).toSet() );
+        assertDiffer( Set.of(), g.find( Node.ANY, Node.ANY, Node.ANY ).toSet() );
+        assertDiffer( Set.of(), g.find( Triple.ANY ).toSet() );
     }
 
     protected boolean canBeEmpty( Graph g )


(jena) 02/12: Improve development trace code

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit f3e6190e147c66150fc2b384fcf776fc85639d13
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Tue Aug 13 11:08:17 2024 +0100

    Improve development trace code
---
 .../org/apache/jena/sparql/modify/UpdateEngineWorker.java     | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
index 2e975a3c13..0ec552931c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
@@ -39,12 +39,12 @@ import org.apache.jena.graph.GraphUtil;
 import org.apache.jena.graph.Node;
 import org.apache.jena.query.Query;
 import org.apache.jena.riot.*;
+import org.apache.jena.riot.system.PrefixMap;
 import org.apache.jena.sparql.ARQInternalErrorException;
 import org.apache.jena.sparql.core.*;
 import org.apache.jena.sparql.engine.binding.Binding;
 import org.apache.jena.sparql.engine.binding.BindingRoot;
-import org.apache.jena.sparql.exec.QueryExec;
-import org.apache.jena.sparql.exec.QueryExecDatasetBuilder;
+import org.apache.jena.sparql.exec.*;
 import org.apache.jena.sparql.graph.GraphFactory;
 import org.apache.jena.sparql.graph.GraphOps;
 import org.apache.jena.sparql.modify.request.*;
@@ -373,7 +373,12 @@ public class UpdateEngineWorker implements UpdateVisitor
             if ( false ) {
                 List<Binding> x = Iter.toList(bindings);
                 System.out.printf("====>> Bindings (%d)\n", x.size());
-                Iter.print(System.out, x.iterator());
+                //Iter.print(System.out, x.iterator());
+                // More readable.
+                List<Var> vars = Var.varList(query.getResultVars());
+                RowSet rs = RowSetStream.create(vars, x.iterator());
+                PrefixMap pmap = datasetGraph.prefixes();
+                RowSetOps.out(System.out, rs, datasetGraph.prefixes());
                 System.out.println("====<<");
                 bindings = Iter.iter(x);
             }


(jena) 01/12: Add functions for update applied to a Model or Graph

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit bac1aeba46326d01aa936c99f7c5b274c9bda143
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Tue Aug 13 09:00:29 2024 +0100

    Add functions for update applied to a Model or Graph
---
 .../main/java/org/apache/jena/sparql/exec/UpdateExec.java | 11 +++++++++++
 .../main/java/org/apache/jena/update/UpdateExecution.java | 15 +++++++++++++++
 .../apache/jena/shacl/compact/writer/CompactWriter.java   |  1 -
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/exec/UpdateExec.java b/jena-arq/src/main/java/org/apache/jena/sparql/exec/UpdateExec.java
index b103c4902a..1ef542bce0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/exec/UpdateExec.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/exec/UpdateExec.java
@@ -18,7 +18,9 @@
 
 package org.apache.jena.sparql.exec;
 
+import org.apache.jena.graph.Graph;
 import org.apache.jena.sparql.core.DatasetGraph;
+import org.apache.jena.sparql.core.DatasetGraphFactory;
 import org.apache.jena.sparql.exec.http.UpdateExecHTTP;
 import org.apache.jena.update.UpdateProcessor;
 
@@ -29,6 +31,15 @@ public interface UpdateExec extends UpdateProcessor
         return UpdateExecDatasetBuilder.create().dataset(dataset);
     }
 
+    /**
+     * Create a {@link UpdateExecBuilder} for a graph.
+     * The update must not involved named graphs.
+     */
+    public static UpdateExecBuilder dataset(Graph graph) {
+        DatasetGraph dsg = DatasetGraphFactory.wrap(graph);
+        return UpdateExecDatasetBuilder.create().dataset(dsg);
+    }
+
     /** Create a {@link UpdateExecBuilder} for a remote endpoint. */
     public static UpdateExecBuilder service(String serviceURL) {
         return UpdateExecHTTP.newBuilder().endpoint(serviceURL);
diff --git a/jena-arq/src/main/java/org/apache/jena/update/UpdateExecution.java b/jena-arq/src/main/java/org/apache/jena/update/UpdateExecution.java
index 7c2a66a494..a043bb07fc 100644
--- a/jena-arq/src/main/java/org/apache/jena/update/UpdateExecution.java
+++ b/jena-arq/src/main/java/org/apache/jena/update/UpdateExecution.java
@@ -19,6 +19,8 @@
 package org.apache.jena.update;
 
 import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.rdf.model.Model;
 import org.apache.jena.sparql.exec.http.UpdateExecutionHTTP;
 import org.apache.jena.sparql.exec.http.UpdateExecutionHTTPBuilder;
 
@@ -29,10 +31,23 @@ public interface UpdateExecution extends UpdateProcessor
         return UpdateExecutionDatasetBuilder.create();
     }
 
+    /** Create a {@link UpdateExecutionBuilder} for a dataset. */
     public static UpdateExecutionDatasetBuilder dataset(Dataset dataset) {
         return create().dataset(dataset);
     }
 
+    /**
+     * Create a {@link UpdateExecutionBuilder} for a model.
+     * The update must not involved named graphs.
+     */
+    public static UpdateExecutionDatasetBuilder model(Model model) {
+        Dataset ds = DatasetFactory.wrap(model);
+        return create().dataset(ds);
+    }
+
+    /**
+     * Create a {@link UpdateExecutionBuilder} for a remote service.
+     */
     public static UpdateExecutionHTTPBuilder service(String serviceURL) {
         return UpdateExecutionHTTP.service(serviceURL);
     }
diff --git a/jena-shacl/src/main/java/org/apache/jena/shacl/compact/writer/CompactWriter.java b/jena-shacl/src/main/java/org/apache/jena/shacl/compact/writer/CompactWriter.java
index 9f72974698..8ab775a2c9 100644
--- a/jena-shacl/src/main/java/org/apache/jena/shacl/compact/writer/CompactWriter.java
+++ b/jena-shacl/src/main/java/org/apache/jena/shacl/compact/writer/CompactWriter.java
@@ -124,7 +124,6 @@ public class CompactWriter {
         }
     }
 
-
     private static NodeFormatter formatterPrefixMap(PrefixMapping prefixMapping) {
         PrefixMap pmap = prefixMapWithStd(prefixMapping);
         NodeFormatter nodeFmt = new NodeFormatterTTL(null, pmap);


(jena) 10/12: Remove unused metrics provider in DataAccessPointRegistry

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 0999cb0f9f2b9f0600964dc8bf10b47dadfbf05a
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Tue Aug 27 21:18:49 2024 +0100

    Remove unused metrics provider in DataAccessPointRegistry
---
 .../org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java |  2 ++
 .../apache/jena/fuseki/server/DataAccessPointRegistry.java    | 11 ++---------
 .../org/apache/jena/fuseki/main/sys/FusekiAutoModules.java    |  6 +++---
 3 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java
index a7a5282299..3d22ed1bc7 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/metrics/SimpleMetricsProvider.java
@@ -26,6 +26,8 @@ public class SimpleMetricsProvider implements MetricsProvider {
 
     private MeterRegistry meterRegistry = new SimpleMeterRegistry();
 
+    public SimpleMetricsProvider() {}
+
     @Override
     public MeterRegistry getMeterRegistry() {
         return meterRegistry;
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java
index 14566f0977..b6d41f31da 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataAccessPointRegistry.java
@@ -23,12 +23,10 @@ import java.util.List;
 
 import jakarta.servlet.ServletContext;
 
-import io.micrometer.core.instrument.MeterRegistry;
 import org.apache.jena.atlas.lib.Registry;
 import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.fuseki.Fuseki;
 import org.apache.jena.fuseki.FusekiException;
-import org.apache.jena.fuseki.metrics.MetricsProviderRegistry;
 
 /**
  * Registry of (dataset name, {@link DataAccessPoint}).
@@ -36,15 +34,10 @@ import org.apache.jena.fuseki.metrics.MetricsProviderRegistry;
  */
 public class DataAccessPointRegistry extends Registry<String, DataAccessPoint>
 {
-    private final MeterRegistry meterRegistry;
-
-    public DataAccessPointRegistry() {
-        this.meterRegistry = MetricsProviderRegistry.get().getMeterRegistry();
-    }
+    public DataAccessPointRegistry() {}
 
     public DataAccessPointRegistry(DataAccessPointRegistry other) {
         other.forEach((_name, accessPoint)->register(accessPoint));
-        this.meterRegistry = other.meterRegistry;
     }
 
     // Preferred way to register. Other method for legacy.
@@ -60,7 +53,7 @@ public class DataAccessPointRegistry extends Registry<String, DataAccessPoint>
      * generated from the registry contents and not still connected to the registry.
      * Registry changes will not interfere with iteration over the list.
      * {@link DataAccessPoint DataAccessPoints} can not be registered twice under
-     * differerent names (the same dataset can be via different
+     * different names (the same dataset can be via different
      * {@link DataAccessPoint DataAccessPoints} so the list has no duplicates.
      * There is no defined order to the list.
      */
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/sys/FusekiAutoModules.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/sys/FusekiAutoModules.java
index ba79616b4c..83c6523242 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/sys/FusekiAutoModules.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/sys/FusekiAutoModules.java
@@ -107,7 +107,7 @@ public class FusekiAutoModules {
         altFusekiModules = fusekiModules;
     }
 
-    // Single auto module controller.
+    // Single auto-module controller.
     private static FusekiServiceLoaderModules autoModules = null;
 
     private static FusekiServiceLoaderModules getServiceLoaderModules() {
@@ -202,13 +202,13 @@ public class FusekiAutoModules {
                 }
             };
 
-            // Create auto module object, skip loads in error, sort automodules into level a order.
+            // Create auto-module object, skip loads in error, sort auto-modules into level order.
             List<FusekiAutoModule> autoMods = serviceLoader.stream()
                     .map(mapper)
                     .filter(Objects::nonNull)
                     .sorted((x,y)-> Integer.compare(x.level(), y.level()))
                     .collect(Collectors.toList());
-            // Start, and convert to FusekeiModules (generics issue)
+            // Start, and convert to FusekiModules (generics issue)
             List<FusekiModule> fmods = autoMods.stream().map(afmod->{
                 afmod.start();
                 return afmod;


(jena) 12/12: Tidy code in G

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 12a11dc7b15771344d3363ab0805f0a14c6dac45
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Aug 28 19:08:31 2024 +0100

    Tidy code in G
---
 jena-arq/src/main/java/org/apache/jena/system/G.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/system/G.java b/jena-arq/src/main/java/org/apache/jena/system/G.java
index 738137f9f4..c18b46b7d5 100644
--- a/jena-arq/src/main/java/org/apache/jena/system/G.java
+++ b/jena-arq/src/main/java/org/apache/jena/system/G.java
@@ -1047,12 +1047,13 @@ public class G {
         // Both nodes with language tags : compare languages case insensitively.
         String lex1 = match.getLiteralLexicalForm();
         String lex2 = data.getLiteralLexicalForm();
+        if ( ! lex1.equals(lex2) )
+            return false;
         String lang1 = match.getLiteralLanguage();
         String lang2 = data.getLiteralLanguage();
-        return lex1.equals(lex2) && lang1.equalsIgnoreCase(lang2);
+        return lang1.equalsIgnoreCase(lang2);
     }
 
-
     /** Contains, and language tags compare case-insentively */
     public static boolean containsByLang(Graph g, Node s, Node p, Node o) {
         // Try exact.


(jena) 03/12: GH-2664: Consolidate NullIterator and SingletonIterator around Iter functions

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit bc3d30bb038f7dafe0ab73eb7f26df0ec08f6d6a
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Fri Aug 16 09:05:56 2024 +0100

    GH-2664: Consolidate NullIterator and SingletonIterator around Iter functions
---
 .../apache/jena/sparql/algebra/table/Table1.java   |  2 +-
 .../jena/sparql/algebra/table/TableUnit.java       |  2 +-
 .../apache/jena/sparql/core/DatasetGraphOne.java   |  5 ++--
 .../sparql/engine/iterator/QueryIterGroup.java     |  4 +--
 .../jena/sparql/engine/main/JoinClassifier.java    |  2 +-
 .../engine/main/iterator/QueryIterGraph.java       | 33 ++++++++++----------
 .../jena/sparql/modify/UpdateEngineWorker.java     |  2 +-
 .../apache/jena/sparql/util/graph/GraphList.java   |  2 +-
 .../java/org/apache/jena/atlas/iterator/Iter.java  | 12 ++++++--
 .../apache/jena/atlas/iterator/NullIterator.java   | 10 +++++++
 .../jena/atlas/iterator/SingletonIterator.java     |  8 ++---
 .../org/apache/jena/atlas/lib/cache/Cache1.java    |  4 +--
 .../bplustree/BPTreeDistinctKeyPrefixIterator.java |  6 ++--
 .../java/org/apache/jena/tdb1/store/QuadTable.java | 35 +++++++++++-----------
 .../org/apache/jena/tdb1/store/TripleTable.java    | 29 +++++++++---------
 .../nodetupletable/NodeTupleTableConcrete.java     |  3 +-
 .../tdb1/store/tupletable/TupleIndexRecord.java    |  4 +--
 .../tdb2/store/tupletable/TupleIndexRecord.java    |  6 ++--
 18 files changed, 90 insertions(+), 79 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/Table1.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/Table1.java
index 0c3fa9c111..a7cc31ea1a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/Table1.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/Table1.java
@@ -45,7 +45,7 @@ public class Table1 extends TableBase {
     @Override
     public Iterator<Binding> rows() {
         Binding b = BindingFactory.binding(var, value) ;
-        return Iter.singleton(b) ;
+        return Iter.singletonIterator(b) ;
     }
 
     @Override
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java
index 58ec34d055..26b6e9bd61 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java
@@ -41,7 +41,7 @@ public class TableUnit extends TableBase
     @Override
     public Iterator<Binding> rows() {
         Binding binding = BindingFactory.empty() ;
-        return Iter.singleton(binding) ;
+        return Iter.singletonIterator(binding) ;
     }
 
     @Override
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
index 88b05fab4d..9345edc362 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphOne.java
@@ -21,7 +21,6 @@ package org.apache.jena.sparql.core;
 import java.util.Iterator;
 
 import org.apache.jena.atlas.iterator.Iter;
-import org.apache.jena.atlas.iterator.NullIterator;
 import org.apache.jena.graph.Graph;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
@@ -139,7 +138,7 @@ public class DatasetGraphOne extends DatasetGraphBaseFind {
 
     @Override
     public Iterator<Node> listGraphNodes() {
-        return new NullIterator<>();
+        return Iter.nullIterator();
     }
 
     @Override
@@ -226,7 +225,7 @@ public class DatasetGraphOne extends DatasetGraphBaseFind {
         if ( isWildcard(g) || isDefaultGraph(g) )
             return G.triples2quadsDftGraph(graph.find(s, p, o));
         else
-            return new NullIterator<>();
+            return Iter.nullIterator();
     }
 
     @Override
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java
index 99026f60b5..429e4c963b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java
@@ -90,7 +90,7 @@ public class QueryIterGroup extends QueryIterPlainWrapper
                         return Iter.nullIterator() ;
                     if ( ! hasAggregators ) {
                         // No GROUP BY, no aggregators. One result row of no columns.
-                        return Iter.singleton(BindingFactory.binding());
+                        return Iter.singletonIterator(BindingFactory.binding());
                     }
                     // No GROUP BY, has aggregators. Insert default values.
                     BindingBuilder builder = Binding.builder();
@@ -101,7 +101,7 @@ public class QueryIterGroup extends QueryIterPlainWrapper
                         Var v = agg.getVar();
                         builder.add(v, value);
                     }
-                    return Iter.singleton(builder.build());
+                    return Iter.singletonIterator(builder.build());
                 }
 
                 // Case: there is input.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java
index 9b1b13bb8d..9488b5e35e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java
@@ -310,7 +310,7 @@ public class JoinClassifier
     // XXX This method could go to OpLib or the Op interface directly
     private static Iterator<Op> getSubOps(Op op) {
         if (op instanceof Op1)
-            return Iter.singleton(((Op1)op).getSubOp());
+            return Iter.singletonIterator(((Op1)op).getSubOp());
 
         if (op instanceof Op2) {
             Op2 x = (Op2)op;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/iterator/QueryIterGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/iterator/QueryIterGraph.java
index a07110e79e..2c3e52434e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/iterator/QueryIterGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/iterator/QueryIterGraph.java
@@ -22,7 +22,6 @@ import java.util.Iterator ;
 import java.util.NoSuchElementException ;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.SingletonIterator ;
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
@@ -46,30 +45,30 @@ public class QueryIterGraph extends QueryIterRepeatApply
 {
     /*
      * A note on the strange case of GRAPH ?g { ... ?g ... }
-     * 
+     *
      * The inner pattern is solved, then the outer ?g=... is added. This happens
      * because the outer ?g is added by QueryIterAssignVarValue which tests a
      * variable is the same as the binding and drops the binding if not. (which
      * is a specialised form of join.
      */
     protected OpGraph opGraph ;
-    
+
     public QueryIterGraph(QueryIterator input, OpGraph opGraph, ExecutionContext context)
     {
         super(input, context) ;
         this.opGraph = opGraph ;
     }
-    
+
     @Override
     protected QueryIterator nextStage(Binding outerBinding) {
         DatasetGraph ds = getExecContext().getDataset() ;
         // Is this closed?
         Iterator<Node> graphNameNodes = makeSources(ds, outerBinding, opGraph.getNode());
-        
+
 //        List<Node> x = Iter.toList(graphNameNodes) ;
 //        graphNameNodes = x.iterator() ;
 //        System.out.println(x) ;
-        
+
         QueryIterator current = new QueryIterGraphInner(outerBinding, graphNameNodes, opGraph, getExecContext()) ;
         return current ;
     }
@@ -82,17 +81,17 @@ public class QueryIterGraph extends QueryIterRepeatApply
 
     protected static Iterator<Node> makeSources(DatasetGraph data, Binding b, Node graphVar) {
         Node n2 = resolve(b, graphVar) ;
-        if ( n2 != null && n2.isLiteral() ) 
+        if ( n2 != null && n2.isLiteral() )
             // Literal possible after resolving
             return Iter.nullIterator() ;
-        
+
         // n2 is a URI or null.
         if ( n2 == null )
             // Do all submodels.
             return data.listGraphNodes() ;
-        return new SingletonIterator<>(n2) ;
+        return Iter.singletonIterator(n2) ;
     }
-    
+
 
     protected static class QueryIterGraphInner extends QueryIterSub
     {
@@ -146,15 +145,15 @@ public class QueryIterGraph extends QueryIterRepeatApply
             }
             return null;
         }
-        
+
         // Build iterator or return null for if there can't be any results.
         private QueryIterator buildIterator(Node gn) {
             QueryIterator qIter = buildIterator(parentBinding, gn, opSubstituted, getExecContext()) ;
             if ( qIter == null )
-                // Known to be nothing (e.g. graph does not exist). 
+                // Known to be nothing (e.g. graph does not exist).
                 // try again.
                 return null ;
-            
+
             if ( Var.isVar(opGraph.getNode()) ) {
                 // This is the join of the graph node variable to the sub-pattern solution.
                 // Do after the subpattern so that the variable is not visible to the
@@ -164,14 +163,14 @@ public class QueryIterGraph extends QueryIterRepeatApply
             }
             return qIter ;
         }
-        
+
         // Create the iterator for a cycle of one node - or return null if there can't be any results.
         protected static QueryIterator buildIterator(Binding binding, Node graphNode, Op opExec, ExecutionContext outerCxt) {
             if ( !graphNode.isURI() && !graphNode.isBlank() )
                 // e.g. variable bound to a literal or blank node.
                 throw new ARQInternalErrorException("QueryIterGraphInner.buildIterator: Not a URI or blank node: "+graphNode) ;
-            
-            // We can't just use DatasetGraph.getGraph because it may 
+
+            // We can't just use DatasetGraph.getGraph because it may
             // "auto-create" graphs. Use the containsGraph function.
             boolean syntheticGraph = ( Quad.isDefaultGraph(graphNode) || Quad.isUnionGraph(graphNode) ) ;
             if ( ! syntheticGraph && ! outerCxt.getDataset().containsGraph(graphNode) )
@@ -182,7 +181,7 @@ public class QueryIterGraph extends QueryIterRepeatApply
             if ( g == null )
                 return null ;
                 //throw new ARQInternalErrorException(".containsGraph was true but .getGraph is null") ;
-            
+
             ExecutionContext cxt2 = new ExecutionContext(outerCxt, g) ;
             QueryIterator subInput = QueryIterSingleton.create(binding, cxt2) ;
             return QC.execute(opExec, subInput, cxt2) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
index 0ec552931c..5c4eeab04b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
@@ -533,7 +533,7 @@ public class UpdateEngineWorker implements UpdateVisitor
         // ... but that's going to happen again :-(
         if ( query == null ) {
             Binding binding = (null != inputBinding) ? inputBinding : BindingRoot.create();
-            return Iter.singleton(binding);
+            return Iter.singletonIterator(binding);
         }
 
         // Not QueryExecDataset.dataset(...) because of initialBinding.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java
index 8c1f12f8a5..cb56d73218 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java
@@ -132,7 +132,7 @@ public class GraphList
         GNode gn = new GNode(graph, s);
         if ( ! isAny(o) ) {
             if ( contains(gn, o) )
-                return Iter.singleton(Triple.create(s, ListPFunction.nListMember, o));
+                return Iter.singletonIterator(Triple.create(s, ListPFunction.nListMember, o));
             else
                 return Iter.nullIterator();
         }
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
index 87e99abe46..7338bd3f59 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
@@ -79,7 +79,13 @@ public class Iter<T> implements IteratorCloseable<T> {
 
     // ---- Special iterators.
 
+    /** @deprecated Sue {@link #singletonIterator} */
+    @Deprecated
     public static <T> Iterator<T> singleton(T item) {
+        return singletonIterator(item);
+    }
+
+    public static <T> Iterator<T> singletonIterator(T item) {
         // There is a singleton iterator in Collections but it is not public.
         return new SingletonIterator<>(item);
     }
@@ -95,7 +101,7 @@ public class Iter<T> implements IteratorCloseable<T> {
     }
 
     public static <T> Iter<T> of(T item) {
-        return Iter.iter(new SingletonIterator<>(item));
+        return Iter.iter(singletonIterator(item));
     }
 
     @SafeVarargs
@@ -796,11 +802,11 @@ public class Iter<T> implements IteratorCloseable<T> {
     }
 
     public static <T> Iter<T> singletonIter(T item) {
-        return iter(new SingletonIterator<>(item));
+        return iter(singletonIterator(item));
     }
 
     public static <T> Iter<T> nullIter() {
-        return iter(new NullIterator<T>());
+        return iter(nullIterator());
     }
 
     /**
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java
index 8b699dc33f..bf94c938b4 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java
@@ -26,7 +26,13 @@ import java.util.function.Consumer;
 /**
  *  Null Iterator - also guaranteed shareable and immutable
  */
+@Deprecated
 public class NullIterator<T> implements Iterator<T> {
+
+    public static <X> NullIterator<X> create(){ return new NullIterator<>(); }
+
+    private NullIterator() {}
+
     @Override
     public boolean hasNext() {
         return false;
@@ -41,4 +47,8 @@ public class NullIterator<T> implements Iterator<T> {
     public void forEachRemaining(Consumer<? super T> action) {
         Objects.requireNonNull(action);
     }
+
+    @Override
+    public void remove()
+    { throw new UnsupportedOperationException("NullIterator.remove") ;}
 }
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java
index 9c49e489cb..788ef3540a 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java
@@ -25,11 +25,9 @@ public class SingletonIterator<T> implements Iterator<T>
 {
     private T thing = null ;
     private boolean yielded = false ;
-    
-    public static <T> SingletonIterator<T> create(T thing) { return new SingletonIterator<>(thing) ; }
-    
+
     public SingletonIterator(T thing) { this.thing = thing ; }
-    
+
     @Override
     public boolean hasNext()
     {
@@ -47,5 +45,5 @@ public class SingletonIterator<T> implements Iterator<T>
 
     @Override
     public void remove()
-    { throw new NoSuchElementException("SingletonIterator.remove") ;}
+    { throw new UnsupportedOperationException("SingletonIterator.remove") ;}
 }
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java
index 22b1d71836..2a3c035999 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java
@@ -23,7 +23,7 @@ import java.util.Objects;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
 
-import org.apache.jena.atlas.iterator.SingletonIterator;
+import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.atlas.lib.Cache;
 
 /** A one-slot cache. */
@@ -82,7 +82,7 @@ public class Cache1<K, V> implements Cache<K, V> {
 
     @Override
     public Iterator<K> keys() {
-        return new SingletonIterator<>(cacheKey);
+        return Iter.singletonIterator(cacheKey);
     }
 
     @Override
diff --git a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeDistinctKeyPrefixIterator.java b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeDistinctKeyPrefixIterator.java
index 5e65dd15de..b4b65c8a8c 100644
--- a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeDistinctKeyPrefixIterator.java
+++ b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeDistinctKeyPrefixIterator.java
@@ -48,7 +48,7 @@ class BPTreeDistinctKeyPrefixIterator implements Iterator<Record> {
         }
         // If there's only a single distinct prefix then just return a singleton
         if (Arrays.compare(minRecord.getKey(), 0, keyPrefixLength, maxRecord.getKey(), 0, keyPrefixLength) == 0) {
-            return Iter.singleton(minRecord);
+            return Iter.singletonIterator(minRecord);
         }
         // Otherwise need the full iterator
         return new BPTreeDistinctKeyPrefixIterator(node, keyPrefixLength, minRecord, maxRecord);
@@ -131,7 +131,7 @@ class BPTreeDistinctKeyPrefixIterator implements Iterator<Record> {
             Record subtreeMin = n.minRecord();
             Record subtreeMax = n.maxRecord();
             if (haveSamePrefix(subtreeMin, subtreeMax)) {
-                return Iter.singleton(subtreeMin);
+                return Iter.singletonIterator(subtreeMin);
             }
             r = loadStack(n);
         } else {
@@ -156,7 +156,7 @@ class BPTreeDistinctKeyPrefixIterator implements Iterator<Record> {
             Record lowRecord = records.getLowRecord();
             if (haveSamePrefix(lowRecord, records.getHighRecord())) {
                 // If the low and high keys for this page have the same prefix then just return a singleton iterator
-                iter = Iter.singleton(lowRecord);
+                iter = Iter.singletonIterator(lowRecord);
             } else {
                 // Otherwise need to scan the whole page
                 iter = records.getRecordBuffer().iterator();
diff --git a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/QuadTable.java b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/QuadTable.java
index 24057081bd..1e9fc6d213 100644
--- a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/QuadTable.java
+++ b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/QuadTable.java
@@ -20,7 +20,8 @@ package org.apache.jena.tdb1.store;
 
 
 import java.util.Iterator ;
-import org.apache.jena.atlas.iterator.NullIterator ;
+
+import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
@@ -43,47 +44,47 @@ public class QuadTable extends TableBase
     }
 
     /** Add a quad - return true if it was added, false if it already existed */
-    public boolean add( Quad quad ) 
-    { 
+    public boolean add( Quad quad )
+    {
         return add(quad.getGraph(), quad.getSubject(), quad.getPredicate(), quad.getObject()) ;
     }
 
     /** Add a quad (as graph node and triple) - return true if it was added, false if it already existed */
-    public boolean add(Node gn, Triple triple ) 
-    { 
+    public boolean add(Node gn, Triple triple )
+    {
         return add(gn, triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
     }
-    
+
     /** Add a quad - return true if it was added, false if it already existed */
-    public boolean add(Node g, Node s, Node p, Node o) 
-    { 
+    public boolean add(Node g, Node s, Node p, Node o)
+    {
         return table.addRow(g,s,p,o) ;
     }
-    
+
     /** Delete a quad - return true if it was deleted, false if it didn't exist */
-    public boolean delete( Quad quad ) 
-    { 
+    public boolean delete( Quad quad )
+    {
         return delete(quad.getGraph(), quad.getSubject(), quad.getPredicate(), quad.getObject()) ;
     }
 
     /** Delete a quad (as graph node and triple) - return true if it was deleted, false if it didn't exist */
-    public boolean delete( Node gn, Triple triple ) 
-    { 
+    public boolean delete( Node gn, Triple triple )
+    {
         return delete(gn, triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
     }
 
     /** Delete a quad - return true if it was deleted, false if it didn't exist */
-    public boolean delete(Node g, Node s, Node p, Node o) 
-    { 
+    public boolean delete(Node g, Node s, Node p, Node o)
+    {
         return table.deleteRow(g, s, p, o) ;
     }
-    
+
     /** Find matching quads */
     public Iterator<Quad> find(Node g, Node s, Node p, Node o)
     {
         Iterator<Tuple<NodeId>> iter = table.findAsNodeIds(g, s, p, o) ;
         if ( iter == null )
-            return new NullIterator<>() ;
+            return Iter.nullIterator();
         Iterator<Quad> iter2 = TupleLib.convertToQuads(table.getNodeTable(), iter) ;
         return iter2 ;
     }
diff --git a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/TripleTable.java b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/TripleTable.java
index ea05fe2c3d..0ad4baa13d 100644
--- a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/TripleTable.java
+++ b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/TripleTable.java
@@ -20,7 +20,8 @@ package org.apache.jena.tdb1.store;
 
 
 import java.util.Iterator ;
-import org.apache.jena.atlas.iterator.NullIterator ;
+
+import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
@@ -44,26 +45,26 @@ public class TripleTable extends TableBase
         super(3, indexes, nodeTable, policy) ;
         //table = new NodeTupleTableConcrete(3, indexes, nodeTable, policy) ;
     }
-    
-    public boolean add( Triple triple ) 
-    { 
+
+    public boolean add( Triple triple )
+    {
         return add(triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
     }
 
-    public boolean add(Node s, Node p, Node o) 
-    { 
+    public boolean add(Node s, Node p, Node o)
+    {
         return table.addRow(s, p, o) ;
     }
-    
+
     /** Delete a triple  - return true if it was deleted, false if it didn't exist */
-    public boolean delete( Triple triple ) 
-    { 
+    public boolean delete( Triple triple )
+    {
         return delete(triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
     }
-    
+
     /** Delete a triple  - return true if it was deleted, false if it didn't exist */
-    public boolean delete(Node s, Node p, Node o) 
-    { 
+    public boolean delete(Node s, Node p, Node o)
+    {
         return table.deleteRow(s, p, o) ;
     }
 
@@ -72,11 +73,11 @@ public class TripleTable extends TableBase
     {
         Iterator<Tuple<NodeId>> iter = table.findAsNodeIds(s, p, o) ;
         if ( iter == null )
-            return new NullIterator<>() ;
+            return Iter.nullIterator();
         Iterator<Triple> iter2 = TupleLib.convertToTriples(table.getNodeTable(), iter) ;
         return iter2 ;
     }
-    
+
     /** Clear - does not clear the associated node tuple table */
     public void clearTriples()
     { table.clear() ; }
diff --git a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/nodetupletable/NodeTupleTableConcrete.java b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/nodetupletable/NodeTupleTableConcrete.java
index 23508cb70d..acb7592c14 100644
--- a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/nodetupletable/NodeTupleTableConcrete.java
+++ b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/nodetupletable/NodeTupleTableConcrete.java
@@ -23,7 +23,6 @@ import static java.lang.String.format ;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.NullIterator ;
 import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
@@ -127,7 +126,7 @@ public class NodeTupleTableConcrete implements NodeTupleTable
         try {
             startRead() ;
             Iterator<Tuple<NodeId>> iter1 = findAsNodeIds(nodes) ; // **public call
-            if (iter1 == null) return new NullIterator<>() ;
+            if (iter1 == null) return Iter.nullIterator(); ;
             Iterator<Tuple<Node>> iter2 = TupleLib.convertToNodes(nodeTable, iter1) ;
             // iteratorControl() not needed due to public call above.
             return iter2 ;
diff --git a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/tupletable/TupleIndexRecord.java b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/tupletable/TupleIndexRecord.java
index e5ef0c5db5..9a3081167f 100644
--- a/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/tupletable/TupleIndexRecord.java
+++ b/jena-tdb1/src/main/java/org/apache/jena/tdb1/store/tupletable/TupleIndexRecord.java
@@ -133,9 +133,9 @@ public class TupleIndexRecord extends TupleIndexBase
         // Is it a simple existence test?
         if ( numSlots == pattern.len() ) {
             if ( index.contains(minRec) )
-                return new SingletonIterator<>(pattern);
+                return Iter.singletonIterator(pattern);
             else
-                return new NullIterator<>();
+                return Iter.nullIterator();
         }
 
         Iterator<Record> iter = null;
diff --git a/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/tupletable/TupleIndexRecord.java b/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/tupletable/TupleIndexRecord.java
index 56c13b7a88..09540ad9b4 100644
--- a/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/tupletable/TupleIndexRecord.java
+++ b/jena-tdb2/src/main/java/org/apache/jena/tdb2/store/tupletable/TupleIndexRecord.java
@@ -26,8 +26,6 @@ import java.util.Iterator;
 import java.util.function.Predicate;
 
 import org.apache.jena.atlas.iterator.Iter;
-import org.apache.jena.atlas.iterator.NullIterator;
-import org.apache.jena.atlas.iterator.SingletonIterator;
 import org.apache.jena.atlas.lib.tuple.Tuple;
 import org.apache.jena.atlas.lib.tuple.TupleFactory;
 import org.apache.jena.atlas.lib.tuple.TupleMap;
@@ -179,9 +177,9 @@ public class TupleIndexRecord extends TupleIndexBase
         // Is it a simple existence test?
         if ( numSlots == pattern.len() ) {
             if ( index.contains(minRec) )
-                return new SingletonIterator<>(pattern);
+                return Iter.singletonIterator(pattern);
             else
-                return new NullIterator<>();
+                return Iter.nullIterator();
         }
 
         // ---- Retrieval.


(jena) 08/12: Provide validity test in PeekIterator

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit ec7f71c6e3108c2d5249c216a9db8e08ac0bd3d0
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Aug 21 21:39:18 2024 +0100

    Provide validity test in PeekIterator
---
 .../apache/jena/atlas/iterator/PeekIterator.java   |  21 ++-
 .../apache/jena/atlas/iterator/TS_Iterator.java    |   4 +-
 .../jena/atlas/iterator/TestIteratorPeek.java      | 107 ---------------
 .../jena/atlas/iterator/TestPeekIterator.java      | 150 +++++++++++++++++++++
 ...atorPushback.java => TestPushbackIterator.java} |   2 +-
 5 files changed, 170 insertions(+), 114 deletions(-)

diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java
index edcf2ba542..41982e3bc1 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java
@@ -20,9 +20,11 @@ package org.apache.jena.atlas.iterator;
 
 import java.util.Iterator ;
 import java.util.NoSuchElementException ;
-import java.util.Queue ;
+import java.util.Optional;
 
-/** PeekIterator - it is one slot ahead from the wrapped iterator */
+/**
+ * PeekIterator - it is one slot ahead reading from the wrapped iterator.
+ */
 public class PeekIterator<T> implements Iterator<T>
 {
     private final Iterator<T> iter ;
@@ -62,8 +64,9 @@ public class PeekIterator<T> implements Iterator<T>
 
     /**
      * Peek the next element or return null
-     *
-     * @see Queue#peek
+     * This code predates {@link Optional}.
+     * See "{@link #slotIsValid}" to check if a null is
+     * end-of-iterator or a valid return element.
      */
     public T peek() {
         if ( finished )
@@ -71,6 +74,16 @@ public class PeekIterator<T> implements Iterator<T>
         return slot;
     }
 
+    /**
+     * Return whether the peek'ed element exists of not.
+     * When the underlying iterator may yield null as a valid value of "next",
+     * use this to determine the status of the "peek()".
+     * This code predates {@link Optional}.
+     */
+    public boolean slotIsValid() {
+        return ! finished;
+    }
+
     /** Peek the next element or throw NoSuchElementException */
     public T element() {
         if ( finished )
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TS_Iterator.java b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TS_Iterator.java
index 2768cc9fc5..e39097562d 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TS_Iterator.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TS_Iterator.java
@@ -24,8 +24,8 @@ import org.junit.runners.Suite ;
 @RunWith(Suite.class)
 @Suite.SuiteClasses( {
     TestIter.class
-    , TestIteratorPeek.class
-    , TestIteratorPushback.class
+    , TestPeekIterator.class
+    , TestPushbackIterator.class
     , TestIteratorWithHistory.class
     , TestIteratorWithBuffer.class
     , TestIteratorSlotted.class
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIteratorPeek.java b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIteratorPeek.java
deleted file mode 100644
index bacbf6200f..0000000000
--- a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIteratorPeek.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.atlas.iterator;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList ;
-import java.util.List ;
-
-import org.junit.Test ;
-
-public class TestIteratorPeek
-{
-    List<String> data0 = new ArrayList<>() ;
-    List<String> data1 = new ArrayList<>() ;
-    {
-        data1.add("a") ;
-    }
-
-    List<String> data2 = new ArrayList<>() ;
-    {
-        data2.add("x") ;
-        data2.add("y") ;
-        data2.add("z") ;
-    }
-
-    @Test public void iter_01()
-    {
-        Iter<String> iter = Iter.iter(data2) ;
-        iter = iter.append(data2.iterator()) ;
-        test(iter, "x", "y", "z", "x", "y", "z") ;
-    }
-
-    private static void test(Iter<?> iter, Object... items)
-    {
-        for ( Object x : items )
-        {
-            assertTrue(iter.hasNext()) ;
-            assertEquals(x, iter.next()) ;
-        }
-        assertFalse(iter.hasNext()) ;
-    }
-
-    private static PeekIterator<String> create(String...a) {
-        List<String> x = List.of(a);
-        return new PeekIterator<>(x.iterator());
-    }
-
-    @Test public void peek_1()
-    {
-        PeekIterator<String> peek = create("a", "b", "c") ;
-        assertEquals("a", peek.peek()) ;
-        test(Iter.iter(peek), "a", "b", "c") ;
-    }
-
-    @Test public void peek_2()
-    {
-        PeekIterator<String> peek = create() ;
-        assertFalse(peek.hasNext()) ;
-    }
-
-    @Test public void peek_3()
-    {
-        PeekIterator<String> peek = create("a") ;
-        assertEquals("a", peek.peek()) ;
-    }
-
-    @Test public void peek_4()
-    {
-        PeekIterator<String> peek = create("a") ;
-        assertEquals("a", peek.peek()) ;
-        assertEquals("a", peek.peek()) ;
-        assertEquals("a", peek.next()) ;
-        assertFalse(peek.hasNext()) ;
-    }
-
-    @Test public void peek_5()
-    {
-        PeekIterator<String> peek = create("a", "b") ;
-        assertEquals("a", peek.peek()) ;
-        assertEquals("a", peek.peek()) ;
-        assertEquals("a", peek.next()) ;
-        assertTrue(peek.hasNext()) ;
-        assertEquals("b", peek.peek()) ;
-        assertEquals("b", peek.peek()) ;
-        assertEquals("b", peek.next()) ;
-        assertFalse(peek.hasNext()) ;
-    }
-}
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestPeekIterator.java b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestPeekIterator.java
new file mode 100644
index 0000000000..a33d4f58ee
--- /dev/null
+++ b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestPeekIterator.java
@@ -0,0 +1,150 @@
+/*
+ * 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.atlas.iterator;
+
+import static org.junit.Assert.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+
+public class TestPeekIterator {
+
+
+    @Test
+    public void iter_01() {
+        List<String> data = List.of("x", "y", "z");
+        Iter<String> iter = Iter.iter(data);
+        iter = iter.append(data.iterator());
+        test(iter, "x", "y", "z", "x", "y", "z");
+    }
+
+    private static void test(Iter<? > iter, Object...items) {
+        for ( Object x : items ) {
+            assertTrue(iter.hasNext());
+            assertEquals(x, iter.next());
+        }
+        assertFalse(iter.hasNext());
+    }
+
+    private static PeekIterator<String> create(String...a) {
+        // Use ArrayList to allow nulls.
+        List<String> x = new ArrayList<>();
+        for ( String str : a )
+            x.add(str);
+        return new PeekIterator<>(x.iterator());
+    }
+
+    @Test
+    public void peek_1() {
+        PeekIterator<String> peek = create("a", "b", "c");
+        assertEquals("a", peek.peek());
+        test(Iter.iter(peek), "a", "b", "c");
+    }
+
+    @Test
+    public void peek_2() {
+        PeekIterator<String> peek = create();
+        assertFalse(peek.hasNext());
+    }
+
+    @Test
+    public void peek_3() {
+        PeekIterator<String> peek = create("a");
+        assertEquals("a", peek.peek());
+    }
+
+    @Test
+    public void peek_4() {
+        PeekIterator<String> peek = create("a");
+        assertEquals("a", peek.peek());
+        assertEquals("a", peek.peek());
+        assertEquals("a", peek.next());
+        assertFalse(peek.hasNext());
+    }
+
+    @Test
+    public void peek_5() {
+        PeekIterator<String> peek = create("a", "b");
+        assertEquals("a", peek.peek());
+        assertEquals("a", peek.peek());
+        assertEquals("a", peek.next());
+        assertTrue(peek.hasNext());
+        assertEquals("b", peek.peek());
+        assertEquals("b", peek.peek());
+        assertEquals("b", peek.next());
+        assertFalse(peek.hasNext());
+    }
+
+    @Test
+    public void peek_6() {
+        PeekIterator<String> peek = create("a", null, "b");
+        assertEquals("a", peek.peek());
+        assertEquals("a", peek.next());
+
+        assertNull(peek.peek());
+        assertTrue(peek.slotIsValid());
+        assertTrue(peek.hasNext());
+        assertNull(peek.next());
+
+        assertEquals("b", peek.peek());
+        assertEquals("b", peek.next());
+        assertFalse(peek.hasNext());
+
+        assertNull(peek.peek());
+        assertFalse(peek.slotIsValid());
+    }
+
+    @Test
+    public void peek_7() {
+        PeekIterator<String> peek = create("a", "b", null);
+        assertEquals("a", peek.peek());
+        assertEquals("a", peek.next());
+        assertEquals("b", peek.peek());
+        assertEquals("b", peek.next());
+
+        assertNull(peek.peek());
+        assertTrue(peek.slotIsValid());
+        assertTrue(peek.hasNext());
+
+        assertNull(peek.next());
+        assertFalse(peek.hasNext());
+    }
+
+    @Test
+    public void peek_8() {
+        PeekIterator<String> peek = create(null, "a", "b");
+        assertNull(peek.peek());
+        assertTrue(peek.slotIsValid());
+        assertTrue(peek.hasNext());
+        assertEquals(null, peek.next());
+
+        assertEquals("a", peek.peek());
+        assertEquals("a", peek.next());
+        assertEquals("b", peek.peek());
+        assertEquals("b", peek.next());
+
+        assertNull(peek.peek());
+        assertFalse(peek.slotIsValid());
+        assertFalse(peek.hasNext());
+    }
+}
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIteratorPushback.java b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestPushbackIterator.java
similarity index 98%
rename from jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIteratorPushback.java
rename to jena-base/src/test/java/org/apache/jena/atlas/iterator/TestPushbackIterator.java
index 541460af04..c57aef54c1 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIteratorPushback.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestPushbackIterator.java
@@ -26,7 +26,7 @@ import java.util.List ;
 
 import org.junit.Test ;
 
-public class TestIteratorPushback
+public class TestPushbackIterator
 {
 
     static List<String> data = new ArrayList<>() ;


(jena) 09/12: Provide merge operation that reuses a BindingBuilder

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 02b955204b70206f748de486c800ceaf320f636a
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sat Aug 24 17:12:54 2024 +0100

    Provide merge operation that reuses a BindingBuilder
---
 .../apache/jena/sparql/engine/binding/BindingLib.java    | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingLib.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingLib.java
index ea77786870..82b82febeb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingLib.java
@@ -54,8 +54,20 @@ public class BindingLib {
 
     /** Merge two bindings, assuming they are compatible. */
     public static Binding merge(Binding bind1, Binding bind2) {
-        // Create binding from LHS
-        BindingBuilder builder = Binding.builder(bind1);
+        BindingBuilder builder = Binding.builder();
+        Binding merge = merge(builder, bind1, bind2);
+        return merge;
+    }
+
+    /**
+     * Merge two bindings, assuming they are compatible.
+     *
+     * The {@link BindingBuilder} is reused and
+     * left in an indeterminate state.
+     */
+    public static Binding merge(BindingBuilder builder, Binding bind1, Binding bind2) {
+        builder.reset();
+        builder.addAll(bind1);
         Iterator<Var> vIter = bind2.vars();
         // Add any variables from the RHS
         for ( ; vIter.hasNext() ; ) {


(jena) 05/12: Remove commented out code

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 2561cf1a09eb214f95b50752d896a5a12c223564
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Aug 21 10:34:37 2024 +0100

    Remove commented out code
---
 .../java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java | 2 --
 1 file changed, 2 deletions(-)

diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java
index 1ba1dcf4f5..3d539b64c2 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/QueryValidatorHTML.java
@@ -62,8 +62,6 @@ public class QueryValidatorHTML {
             }
 
             final String queryString = httpRequest.getParameter(paramQuery).replaceAll("(\r|\n| )*$", "");
-// queryString = queryString.replace("\r\n", "\n");
-// queryString.replaceAll("(\r|\n| )*$", "");
 
             String querySyntax = httpRequest.getParameter(paramSyntax);
             if ( querySyntax == null || querySyntax.equals("") )


(jena) 04/12: Update white space

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit c0570fc5576c34c05669a0f44526aba7da08ff78
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Fri Aug 16 14:52:34 2024 +0100

    Update white space
---
 .../sparql/engine/iterator/QueryIterProject.java   | 74 +++++++++++----------
 .../engine/iterator/QueryIterProjectMerge.java     | 75 +++++++++++-----------
 .../apache/jena/sparql/engine/main/OpExecutor.java |  2 +-
 .../jena/sparql/engine/ref/EvaluatorSimple.java    |  2 +-
 4 files changed, 76 insertions(+), 77 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProject.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProject.java
index 48713bab54..0b26843c40 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProject.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProject.java
@@ -18,58 +18,56 @@
 
 package org.apache.jena.sparql.engine.iterator;
 
-import java.util.List ;
+import java.util.List;
 
-import org.apache.jena.atlas.io.IndentedWriter ;
-import org.apache.jena.atlas.lib.Lib ;
-import org.apache.jena.atlas.lib.ListUtils ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.ExecutionContext ;
-import org.apache.jena.sparql.engine.QueryIterator ;
-import org.apache.jena.sparql.engine.binding.Binding ;
-import org.apache.jena.sparql.engine.binding.BindingProject ;
-import org.apache.jena.sparql.serializer.SerializationContext ;
+import org.apache.jena.atlas.io.IndentedWriter;
+import org.apache.jena.atlas.lib.Lib;
+import org.apache.jena.atlas.lib.ListUtils;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.ExecutionContext;
+import org.apache.jena.sparql.engine.QueryIterator;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.engine.binding.BindingProject;
+import org.apache.jena.sparql.serializer.SerializationContext;
 
+public class QueryIterProject extends QueryIterConvert {
 
-public class QueryIterProject extends QueryIterConvert
-{
-    List<Var> projectionVars ;
+    public static QueryIterator create(QueryIterator input, List<Var> vars, ExecutionContext qCxt) {
+        return new QueryIterProject(input, vars, qCxt);
+    }
+
+    private List<Var> projectionVars;
 
-    public QueryIterProject(QueryIterator input, List<Var> vars, ExecutionContext qCxt)
-    {
-        super(input, project(vars, qCxt), qCxt) ;
-        projectionVars = vars ;
+    private QueryIterProject(QueryIterator input, List<Var> vars, ExecutionContext qCxt) {
+        super(input, project(vars, qCxt), qCxt);
+        projectionVars = vars;
     }
 
-    static QueryIterConvert.Converter project(List<Var> vars, ExecutionContext qCxt)
-    {
-        return new Projection(vars, qCxt) ;
+    static QueryIterConvert.Converter project(List<Var> vars, ExecutionContext qCxt) {
+        return new Projection(vars, qCxt);
+    }
+
+    public List<Var> getProjectionVars() {
+        return projectionVars;
     }
-    
-    public List<Var> getProjectionVars()   { return projectionVars ; }
 
     @Override
-    protected void details(IndentedWriter out, SerializationContext sCxt)
-    {
-        out.print(Lib.className(this)) ;
-        out.print(" ") ;
-        ListUtils.print(out, projectionVars) ;
+    protected void details(IndentedWriter out, SerializationContext sCxt) {
+        out.print(Lib.className(this));
+        out.print(" ");
+        ListUtils.print(out, projectionVars);
     }
-    
-    static
-    class Projection implements QueryIterConvert.Converter
-    {
-        List<Var> projectionVars ;
 
-        Projection(List<Var> vars, ExecutionContext qCxt)
-        { 
-            this.projectionVars = vars ;
+    static class Projection implements QueryIterConvert.Converter {
+        List<Var> projectionVars;
+
+        Projection(List<Var> vars, ExecutionContext qCxt) {
+            this.projectionVars = vars;
         }
 
         @Override
-        public Binding convert(Binding bind)
-        {
-            return new BindingProject(projectionVars, bind) ;
+        public Binding convert(Binding bind) {
+            return new BindingProject(projectionVars, bind);
         }
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProjectMerge.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProjectMerge.java
index 754f0fd2fd..2630ef8b15 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProjectMerge.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterProjectMerge.java
@@ -16,19 +16,19 @@
  * limitations under the License.
  */
 
-package org.apache.jena.sparql.engine.iterator ;
+package org.apache.jena.sparql.engine.iterator;
 
-import java.util.Iterator ;
-import java.util.List ;
+import java.util.Iterator;
+import java.util.List;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.sparql.algebra.op.OpProject ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.ExecutionContext ;
-import org.apache.jena.sparql.engine.QueryIterator ;
-import org.apache.jena.sparql.engine.binding.* ;
-import org.apache.jena.sparql.engine.main.OpExecutor ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Node;
+import org.apache.jena.sparql.algebra.op.OpProject;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.ExecutionContext;
+import org.apache.jena.sparql.engine.QueryIterator;
+import org.apache.jena.sparql.engine.binding.*;
+import org.apache.jena.sparql.engine.main.OpExecutor;
 
 /**
  * Execute a projection in the middle of an execution. This requires the outcome
@@ -37,68 +37,69 @@ import org.apache.jena.sparql.engine.main.OpExecutor ;
  * should not be used.
  */
 public class QueryIterProjectMerge extends QueryIterRepeatApply {
-    private final OpProject  opProject ;
-    private final OpExecutor engine ;
+    private final OpProject  opProject;
+    private final OpExecutor engine;
 
     public QueryIterProjectMerge(OpProject opProject, QueryIterator input, OpExecutor engine, ExecutionContext execCxt) {
-        super(input, execCxt) ;
-        this.opProject = opProject ;
-        this.engine = engine ;
+        super(input, execCxt);
+        this.opProject = opProject;
+        this.engine = engine;
     }
 
     @Override
     protected QueryIterator nextStage(Binding binding) {
         QueryIterator qIter = engine.executeOp(opProject.getSubOp(),
-                                               QueryIterSingleton.create(binding, getExecContext())) ;
+                                               QueryIterSingleton.create(binding, getExecContext()));
         qIter = new QueryIterConvert(qIter,
                                      new ProjectEnsureBindingConverter(binding, opProject.getVars()),
-                                     getExecContext()) ;
-        return qIter ;
+                                     getExecContext());
+        return qIter;
     }
 
     /** Ensure binding from outer binding are present when projecting */
     static class ProjectEnsureBindingConverter implements QueryIterConvert.Converter {
 
-        private final Binding   outerBinding ;
-        private final List<Var> projectionVars ;
+        private final Binding   outerBinding;
+        private final List<Var> projectionVars;
 
         public ProjectEnsureBindingConverter(Binding outerBinding, List<Var> vars) {
-            this.outerBinding = outerBinding ;
-            this.projectionVars = vars ;
+            this.outerBinding = outerBinding;
+            this.projectionVars = vars;
         }
 
         @Override
         public Binding convert(Binding bind) {
-            return ensure(projectionVars, outerBinding, bind) ;
+            return ensure(projectionVars, outerBinding, bind);
             // Effectively, this is:
-            //bind = new BindingProject(projectionVars, bind) ;
-            // return BindingUtils.merge(outerBinding, bind) ;
+            //bind = new BindingProject(projectionVars, bind);
+            // return BindingUtils.merge(outerBinding, bind);
         }
 
-        /** Merge two bindings, the outer and inner, projecting the inner with the give variables.
-         *  This is what happens in substitutIon execution, with a inner select-project.
+        /**
+         * Merge two bindings, the outer and inner, projecting the inner with the given variables.
+         * This is what happens in substitution execution, with an inner select-project.
          */
         private static Binding ensure(List<Var> vars, Binding outer, Binding inner) {
             // A specialised BindingUtils.merge that does project as well.
             // Reduce small object churn.
-            BindingBuilder b2 = Binding.builder(outer) ;
-            Iterator<Var> vIter = (vars != null) ? vars.iterator() : inner.vars() ;
+            BindingBuilder b2 = Binding.builder(outer);
+            Iterator<Var> vIter = (vars != null) ? vars.iterator() : inner.vars();
             // Add any variables from the RHS
-            for ( ; vIter.hasNext() ; ) {
-                Var v = vIter.next() ;
-                Node n2 = inner.get(v) ;
+            for (; vIter.hasNext(); ) {
+                Var v = vIter.next();
+                Node n2 = inner.get(v);
                 if ( n2 == null )
-                    continue ;
+                    continue;
                 if ( ! b2.contains(v) )
-                    b2.add(v, inner.get(v)) ;
+                    b2.add(v, inner.get(v));
                 else {
                     // Checking!
-                    Node n1 = outer.get(v) ;
+                    Node n1 = outer.get(v);
                     if ( ! n1.equals(n2) )
                         Log.warn(ProjectEnsureBindingConverter.class,  "merge: Mismatch : "+n1+" != "+n2);
                 }
             }
-            return b2.build() ;
+            return b2.build();
         }
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
index 93b12bfed6..0edb6b263d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
@@ -391,7 +391,7 @@ public class OpExecutor {
 
         if ( input instanceof QueryIterRoot ) {
             QueryIterator qIter = exec(opProject.getSubOp(), input);
-            qIter = new QueryIterProject(qIter, opProject.getVars(), execCxt);
+            qIter = QueryIterProject.create(qIter, opProject.getVars(), execCxt);
             return qIter;
         }
         // Nested projected : need to ensure the input is seen.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java
index c37b84a7cf..749402c18b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ref/EvaluatorSimple.java
@@ -210,7 +210,7 @@ public class EvaluatorSimple implements Evaluator {
     @Override
     public Table project(Table table, List<Var> projectVars) {
         QueryIterator qIter = table.iterator(getExecContext());
-        qIter = new QueryIterProject(qIter, projectVars, getExecContext());
+        qIter = QueryIterProject.create(qIter, projectVars, getExecContext());
         return new TableN(qIter);
     }
 


(jena) 06/12: Prefer the name Iter.filterDrop

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 25f8a950964f7a3b18c648f87c345bc4f8660acb
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Aug 21 10:37:11 2024 +0100

    Prefer the name Iter.filterDrop
---
 jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
index 7338bd3f59..aabbba5929 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
@@ -247,10 +247,16 @@ public class Iter<T> implements IteratorCloseable<T> {
         return new IterFiltered<T>(stream, filter);
     }
 
-    public static <T> Iterator<T> notFilter(final Iterator<? extends T> stream, final Predicate<T> filter) {
+    public static <T> Iterator<T> filterDrop(final Iterator<? extends T> stream, final Predicate<T> filter) {
         return filter(stream, filter.negate());
     }
 
+    /** @deprecated Use {@link #filterDrop} */
+    @Deprecated
+    public static <T> Iterator<T> notFilter(final Iterator<? extends T> stream, final Predicate<T> filter) {
+        return filterDrop(stream, filter);
+    }
+
     // Filter-related
 
     private static final class IterFiltered<T> implements IteratorCloseable<T> {


(jena) 11/12: Include initial text direction in toString

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 3f3eb632c40fd18f831fed003126b7e3ac4e82e3
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Aug 28 19:08:16 2024 +0100

    Include initial text direction in toString
---
 .../src/main/java/org/apache/jena/graph/impl/LiteralLabel.java      | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java b/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java
index 441b649cae..ea1acb1bd6 100644
--- a/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java
+++ b/jena-core/src/main/java/org/apache/jena/graph/impl/LiteralLabel.java
@@ -286,9 +286,11 @@ final public class LiteralLabel {
         if ( quoting )
             b.append('"');
 
-        if ( lang != null && !lang.equals("") )
+        if ( lang != null && !lang.equals("") ) {
             b.append("@").append(lang);
-        else if ( ! dtype.equals(XSDDatatype.XSDstring) ) {
+            if ( textDir != null )
+                b.append("--").append(textDir);
+        } else if ( ! dtype.equals(XSDDatatype.XSDstring) ) {
                 String dtStr = (pmap != null)
                         ? PrefixMapping.Standard.shortForm(dtype.getURI())
                         : dtype.getURI();