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 2018/05/04 08:40:42 UTC

[1/9] jena git commit: JENA-1532 | fix for date based text query search

Repository: jena
Updated Branches:
  refs/heads/master 0870e404b -> 88cd917f2


JENA-1532 | fix for date based text query search


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/c2a3bac1
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/c2a3bac1
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/c2a3bac1

Branch: refs/heads/master
Commit: c2a3bac147a786210b1ba4125a4be9edc66719c4
Parents: a56f771
Author: Anuj Kumar <ak...@isightpartners.com>
Authored: Mon Apr 23 10:42:13 2018 +0200
Committer: Anuj Kumar <ak...@isightpartners.com>
Committed: Mon Apr 23 10:42:13 2018 +0200

----------------------------------------------------------------------
 .../main/java/examples/JenaESTextExample.java   |  3 +-
 .../apache/jena/query/text/es/TextIndexES.java  | 13 +++++----
 .../jena/query/text/es/it/TextIndexESIT.java    | 30 ++++++++++++++++++++
 3 files changed, 40 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/c2a3bac1/jena-text-es/src/main/java/examples/JenaESTextExample.java
----------------------------------------------------------------------
diff --git a/jena-text-es/src/main/java/examples/JenaESTextExample.java b/jena-text-es/src/main/java/examples/JenaESTextExample.java
index f48b291..1b40fe6 100644
--- a/jena-text-es/src/main/java/examples/JenaESTextExample.java
+++ b/jena-text-es/src/main/java/examples/JenaESTextExample.java
@@ -73,7 +73,8 @@ public class JenaESTextExample {
         String qs = StrUtils.strjoinNL
                 ( "SELECT * "
 //                        , " { ?s text:query (rdfs:comment 'this' 'lang:en') ;"
-                        , " { ?s text:query ('this' 'lang:en*') ;"
+//                        , " { ?s text:query ('this' 'lang:en*') ;"
+                        ,"{ ?s text:query ('2016-12-01T15:31:10-05:00') ;"
 //                        , " { ?s text:query ('this' 'lang:en-GB') ;"
 //                        , " { ?s text:query (rdfs:comment 'this' 'lang:en-GB') ;"
 //                        , " { ?s text:query (rdfs:comment 'this' 'lang:*') ;"

http://git-wip-us.apache.org/repos/asf/jena/blob/c2a3bac1/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
----------------------------------------------------------------------
diff --git a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
index fc2a8b5..6e5e91c 100644
--- a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
+++ b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
@@ -18,11 +18,6 @@
 
 package org.apache.jena.query.text.es;
 
-import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
-
-import java.net.InetAddress;
-import java.util.*;
-
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.NodeFactory;
@@ -48,6 +43,11 @@ import org.elasticsearch.transport.client.PreBuiltTransportClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.net.InetAddress;
+import java.util.*;
+
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+
 /**
  * Elastic Search Implementation of {@link TextIndex}
  *
@@ -422,6 +422,9 @@ public class TextIndexES implements TextIndex {
     }
 
     private String parse(String fieldName, String qs, String lang) {
+        //Escape the ":" character if any in the query string
+        qs = qs.replaceAll("\\:", "\\\\:");
+
         if(fieldName != null && !fieldName.isEmpty()) {
             if(lang != null && !lang.equals("none")) {
                 if (!ASTERISK.equals(lang)) {

http://git-wip-us.apache.org/repos/asf/jena/blob/c2a3bac1/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
----------------------------------------------------------------------
diff --git a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
index 9d0e38d..0ccb203 100644
--- a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
+++ b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
@@ -46,6 +46,36 @@ public class TextIndexESIT extends BaseESTest {
     }
 
     @Test
+    public void testAddDateEntity() {
+        String dateKey = "label";
+        String dateValue = "2016-12-01T15:31:10-05:00";
+        Assert.assertNotNull(classToTest);
+        Entity entityToAdd = entity("http://example/x5", dateKey, dateValue);
+        GetResponse response = addEntity(entityToAdd);
+        Assert.assertTrue(response.getSource().containsKey(dateKey));
+        Assert.assertEquals(dateValue, ((List<?>)response.getSource().get(dateKey)).get(0));
+    }
+
+    @Test
+    public void dateQuery() {
+        testAddDateEntity();
+        List<TextHit> result =  classToTest.query(RDFS.label.asNode(), "2016-12-01T15:31:10-05:00", null, null, 10);
+        Assert.assertNotNull(result);
+        Assert.assertEquals(1, result.size());
+
+        //This will search for value "2016-12-01T15:31:10-05:00" across all the fields
+        result =  classToTest.query(null, "2016-12-01T15:31:10-05:00", null, null, 10);
+        Assert.assertNotNull(result);
+        Assert.assertEquals(1, result.size());
+
+        //This will search for value "this" in the label_en field, if it exists. In this case it doesnt so we should get zero results
+        result =  classToTest.query(RDFS.label.asNode(), "2016-12-01T15:31:10-05:00", null, "en", 10);
+        Assert.assertNotNull(result);
+        Assert.assertEquals(0, result.size());
+
+    }
+
+    @Test
     public void testDeleteEntity() {
         testAddEntity();
         String labelKey = "label";


[7/9] jena git commit: JENA-1538: Merge commit 'refs/pull/411/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1538: Merge commit 'refs/pull/411/head' of https://github.com/apache/jena

This closes #411.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/18eb495c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/18eb495c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/18eb495c

Branch: refs/heads/master
Commit: 18eb495c788c77a623536787d8342440e4836344
Parents: 81fedb1 b901e14
Author: Andy Seaborne <an...@apache.org>
Authored: Fri May 4 08:52:26 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri May 4 08:52:26 2018 +0100

----------------------------------------------------------------------
 apache-jena-osgi/jena-osgi/pom.xml                            | 7 +++++++
 .../services/org.apache.jena.sys.JenaSubsystemLifecycle       | 1 +
 2 files changed, 8 insertions(+)
----------------------------------------------------------------------



[4/9] jena git commit: Include TDB2 in the jena-osgi module

Posted by an...@apache.org.
Include TDB2 in the jena-osgi module


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/b901e14e
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/b901e14e
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/b901e14e

Branch: refs/heads/master
Commit: b901e14e50f563cf8e0f2993ca2362cc3c07b58e
Parents: ad5b445
Author: Aaron Coburn <ac...@apache.org>
Authored: Sat Apr 28 16:43:51 2018 -0400
Committer: Aaron Coburn <ac...@apache.org>
Committed: Sat Apr 28 16:43:51 2018 -0400

----------------------------------------------------------------------
 apache-jena-osgi/jena-osgi/pom.xml                            | 7 +++++++
 .../services/org.apache.jena.sys.JenaSubsystemLifecycle       | 1 +
 2 files changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/b901e14e/apache-jena-osgi/jena-osgi/pom.xml
----------------------------------------------------------------------
diff --git a/apache-jena-osgi/jena-osgi/pom.xml b/apache-jena-osgi/jena-osgi/pom.xml
index aa434ae..91f04e5 100644
--- a/apache-jena-osgi/jena-osgi/pom.xml
+++ b/apache-jena-osgi/jena-osgi/pom.xml
@@ -143,6 +143,13 @@
       <version>3.8.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.jena</groupId>
+      <artifactId>jena-tdb2</artifactId>
+      <version>3.8.0-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
     <!--
     NOTE: Also update 
     src/main/resources/META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle

http://git-wip-us.apache.org/repos/asf/jena/blob/b901e14e/apache-jena-osgi/jena-osgi/src/main/resources/META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle
----------------------------------------------------------------------
diff --git a/apache-jena-osgi/jena-osgi/src/main/resources/META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle b/apache-jena-osgi/jena-osgi/src/main/resources/META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle
index 52ac905..45bf115 100644
--- a/apache-jena-osgi/jena-osgi/src/main/resources/META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle
+++ b/apache-jena-osgi/jena-osgi/src/main/resources/META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle
@@ -2,3 +2,4 @@ org.apache.jena.sys.InitJenaCore
 org.apache.jena.riot.system.InitRIOT
 org.apache.jena.sparql.system.InitARQ
 org.apache.jena.tdb.sys.InitTDB
+org.apache.jena.tdb2.sys.InitTDB2


[5/9] jena git commit: JENA-1539: Txn nesting compatibility

Posted by an...@apache.org.
JENA-1539: Txn nesting compatibility


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/dbce176a
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/dbce176a
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/dbce176a

Branch: refs/heads/master
Commit: dbce176ad7f9a422198c24f8b7b79cb3c1fe5d9f
Parents: 52377b8
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Apr 29 17:22:31 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Apr 29 17:22:31 2018 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/system/Txn.java   | 45 ++++++++++-----
 .../java/org/apache/jena/system/TestTxn.java    | 61 ++++++++++++++++----
 .../apache/jena/system/TestTxnLifecycle.java    |  3 +-
 3 files changed, 83 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/dbce176a/jena-arq/src/main/java/org/apache/jena/system/Txn.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/system/Txn.java b/jena-arq/src/main/java/org/apache/jena/system/Txn.java
index dc7158b..4ab2c82 100644
--- a/jena-arq/src/main/java/org/apache/jena/system/Txn.java
+++ b/jena-arq/src/main/java/org/apache/jena/system/Txn.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.system;
 
+import java.util.Objects;
 import java.util.function.Supplier ;
 
 import org.apache.jena.query.TxnType;
@@ -71,12 +72,9 @@ public class Txn {
     /** Execute application code in a transaction with the given {@link TxnType trasnaction type}. */
     public static <T extends Transactional> void exec(T txn, TxnType txnType, Runnable r) {
         boolean b = txn.isInTransaction() ;
-        if ( b )  {
-            TxnType txnTypeOuter = txn.transactionType();
-            if ( txnTypeOuter != txnType )
-                throw new JenaTransactionException("Already in a transaction of a different type: "
-                                                  +"outer="+txnTypeOuter+" : inner="+txnType);
-        } else
+        if (  b )
+            checkCompatible(txn, txnType);
+        else
             txn.begin(txnType) ;
         try { r.run() ; }
         catch (Throwable th) {
@@ -94,14 +92,10 @@ public class Txn {
     /** Execute and return a value in a transaction with the given {@link TxnType trasnaction type}. */
     public static <T extends Transactional, X> X calc(T txn, TxnType txnType, Supplier<X> r) {
         boolean b = txn.isInTransaction() ;
-        if ( b )  {
-            TxnType txnTypeOuter = txn.transactionType();
-            if ( txnTypeOuter != txnType )
-                throw new JenaTransactionException("Already in a transaction of a different type: "
-                                                  +"outer="+txnTypeOuter+" : inner="+txnType);
-        } else
+        if (  b )
+            checkCompatible(txn, txnType);
+        else
             txn.begin(txnType) ;
-    
         X x;
         try { x = r.get() ; } 
         catch (Throwable th) {
@@ -138,6 +132,31 @@ public class Txn {
         return calc(txn, TxnType.WRITE, r);
     }
     
+    /** Check the requested transaction {@code innerTxnType} is compatible with the transactional.
+     * @param txn
+     * @param innerTxnType
+     */
+    private static void checkCompatible(Transactional txn, TxnType innerTxnType) {
+        TxnType outerTxnType = txn.transactionType();
+        if ( outerTxnType == null ) 
+            // Not in an outer transaction.
+            return;
+        // innerTxnType must be "less than or equal to the outer.
+        // Inner is READ works with any outer.
+        // Outer is WRITE works with any inner. 
+        // Must match:
+        // Outer is READ, then inner must be READ.
+        // Promotion must be the same.
+        if ( TxnType.READ.equals(innerTxnType) )
+            return;
+        if ( TxnType.WRITE.equals(outerTxnType) )
+            return;
+        if ( Objects.equals(innerTxnType, outerTxnType) )
+            return;
+        throw new JenaTransactionException("Already in a transaction of an incompatable type: "
+                                          +"outer="+outerTxnType+" : inner="+innerTxnType);
+    }        
+    
     // Attempt some kind of cleanup.
     private static <T extends Transactional> void onThrowable(Throwable th, T txn) {
         try {

http://git-wip-us.apache.org/repos/asf/jena/blob/dbce176a/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java b/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
index 668efb5..901b9c6 100644
--- a/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
+++ b/jena-arq/src/test/java/org/apache/jena/system/TestTxn.java
@@ -242,23 +242,36 @@ public class TestTxn {
         });
     }
 
-    @Test(expected=JenaTransactionException.class)
+    @Test
     public void txn_nested_02() {
-        Txn.exec(counter, TxnType.READ, ()->{
-            Txn.exec(counter, TxnType.WRITE, ()->{});
+        Txn.exec(counter, TxnType.WRITE, ()->{
+            Txn.exec(counter, TxnType.READ, ()->{});
         });
     }
 
-    @Test(expected=JenaTransactionException.class)
+    @Test
     public void txn_nested_03() {
-        Txn.exec(counter, TxnType.WRITE, ()->{
-            // Must the same type to nest Txn.
+        Txn.exec(counter, TxnType.READ_PROMOTE, ()->{
             Txn.exec(counter, TxnType.READ, ()->{});
         });
     }
 
     @Test
     public void txn_nested_04() {
+        Txn.exec(counter, TxnType.READ_COMMITTED_PROMOTE, ()->{
+            Txn.exec(counter, TxnType.READ, ()->{});
+        });
+    }
+
+    @Test(expected=JenaTransactionException.class)
+    public void txn_nested_05() {
+        Txn.exec(counter, TxnType.READ, ()->{
+            Txn.exec(counter, TxnType.WRITE, ()->{});
+        });
+    }
+
+    @Test
+    public void txn_nested_06() {
         Txn.exec(counter, TxnType.READ_PROMOTE, ()->{
             boolean b = counter.promote();
             assertTrue(b);
@@ -268,23 +281,49 @@ public class TestTxn {
     }
 
     @Test
-    public void txn_nested_05() {
-        Txn.exec(counter, TxnType.READ_PROMOTE, ()->{
+    public void txn_nested_07() {
+        Txn.exec(counter, TxnType.READ_COMMITTED_PROMOTE, ()->{
+            boolean b = counter.promote();
+            assertTrue(b);
+            // Must the same type to nest Txn.
+            Txn.exec(counter, TxnType.READ_COMMITTED_PROMOTE, ()->{});
+        });
+    }
+
+    @Test
+    public void txn_nested_08() {
+        Txn.exec(counter, TxnType.READ_COMMITTED_PROMOTE, ()->{
             boolean b = counter.promote();
             assertTrue(b);
             assertEquals(ReadWrite.WRITE, counter.transactionMode());
             // Must the same type to nest Txn.
-            Txn.exec(counter, TxnType.READ_PROMOTE, ()->{});
+            Txn.exec(counter, TxnType.READ_COMMITTED_PROMOTE, ()->{});
         });
     }
 
-    @Test(expected=JenaTransactionException.class)
-    public void txn_nested_06() {
+    @Test
+    public void txn_nested_09() {
         Txn.exec(counter, TxnType.READ_PROMOTE, ()->{
             boolean b = counter.promote();
             assertTrue(b);
             assertEquals(ReadWrite.WRITE, counter.transactionMode());
             // Must the same type to nest Txn.
+            Txn.exec(counter, TxnType.READ_PROMOTE, ()->{});
+        });
+    }
+
+    @Test(expected=JenaTransactionException.class)
+    public void txn_nested_10() {
+        Txn.exec(counter, TxnType.READ_PROMOTE, ()->{
+            // Must the same type to nest Txn.
+            Txn.exec(counter, TxnType.WRITE, ()->{});
+        });
+    }
+
+    @Test(expected=JenaTransactionException.class)
+    public void txn_nested_11() {
+        Txn.exec(counter, TxnType.READ_COMMITTED_PROMOTE, ()->{
+            // Must the same type to nest Txn.
             Txn.exec(counter, TxnType.WRITE, ()->{});
         });
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/dbce176a/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java b/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
index 76ae02e..bf65468 100644
--- a/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
+++ b/jena-arq/src/test/java/org/apache/jena/system/TestTxnLifecycle.java
@@ -72,10 +72,9 @@ public class TestTxnLifecycle {
         assertEquals(56,x) ;
     }
     
-    @Test(expected=JenaTransactionException.class)
+    @Test
     public void txn_lifecycle_05b() {
         int x = Txn.calculateWrite(trans, ()-> {
-            // Does not continue outer transaction.
             return Txn.calculateRead(trans, ()->56) ;
         });
         assertEquals(56,x) ;


[2/9] jena git commit: JENA-1532 | fix for date based text query search

Posted by an...@apache.org.
JENA-1532 | fix for date based text query search


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/7f4915ee
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/7f4915ee
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/7f4915ee

Branch: refs/heads/master
Commit: 7f4915ee6c94b1044155110fe4612147a9e8de91
Parents: c2a3bac
Author: Anuj Kumar <ak...@isightpartners.com>
Authored: Mon Apr 23 20:23:38 2018 +0200
Committer: Anuj Kumar <ak...@isightpartners.com>
Committed: Mon Apr 23 20:23:38 2018 +0200

----------------------------------------------------------------------
 .../apache/jena/query/text/es/TextIndexES.java  |  22 +-
 .../jena/query/text/es/it/TextIndexESIT.java    | 244 ++++++++++++++++---
 2 files changed, 233 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/7f4915ee/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
----------------------------------------------------------------------
diff --git a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
index 6e5e91c..6a8a649 100644
--- a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
+++ b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
@@ -422,8 +422,26 @@ public class TextIndexES implements TextIndex {
     }
 
     private String parse(String fieldName, String qs, String lang) {
-        //Escape the ":" character if any in the query string
-        qs = qs.replaceAll("\\:", "\\\\:");
+        //Escape special characters if any in the query string
+        qs = qs.replaceAll("\\:", "\\\\:")
+                .replaceAll("\\+", "\\\\+")
+                .replaceAll("\\-", "\\\\-")
+                .replaceAll("\\=", "\\\\=")
+                .replaceAll("\\&", "\\\\&")
+                .replaceAll("\\|", "\\\\|")
+                .replaceAll("\\>", "\\\\>")
+                .replaceAll("\\<", "\\\\<")
+                .replaceAll("\\!", "\\\\!")
+                .replaceAll("\\(", "\\\\(")
+                .replaceAll("\\)", "\\\\)")
+                .replaceAll("\\{", "\\\\{")
+                .replaceAll("\\}", "\\\\}")
+                .replaceAll("\\]", "\\\\]")
+                .replaceAll("\\[", "\\\\[")
+                .replaceAll("\\^", "\\\\^")
+                .replaceAll("\\~", "\\\\~")
+                .replaceAll("\\?", "\\\\?");
+
 
         if(fieldName != null && !fieldName.isEmpty()) {
             if(lang != null && !lang.equals("none")) {

http://git-wip-us.apache.org/repos/asf/jena/blob/7f4915ee/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
----------------------------------------------------------------------
diff --git a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
index 0ccb203..1e03e39 100644
--- a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
+++ b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
@@ -36,59 +36,241 @@ public class TextIndexESIT extends BaseESTest {
 
     @Test
     public void testAddEntity() {
-        String labelKey = "label";
-        String labelValue = "this is a sample Label";
-        Assert.assertNotNull(classToTest);
-        Entity entityToAdd = entity("http://example/x3", labelKey, labelValue);
-        GetResponse response = addEntity(entityToAdd);
-        Assert.assertTrue(response.getSource().containsKey(labelKey));
-        Assert.assertEquals(labelValue, ((List<?>)response.getSource().get(labelKey)).get(0));
+
+        addSpecialCharacterString("label", "this is a sample Label");
+
     }
 
     @Test
     public void testAddDateEntity() {
-        String dateKey = "label";
-        String dateValue = "2016-12-01T15:31:10-05:00";
-        Assert.assertNotNull(classToTest);
-        Entity entityToAdd = entity("http://example/x5", dateKey, dateValue);
-        GetResponse response = addEntity(entityToAdd);
-        Assert.assertTrue(response.getSource().containsKey(dateKey));
-        Assert.assertEquals(dateValue, ((List<?>)response.getSource().get(dateKey)).get(0));
+
+        addSpecialCharacterString("label", "2016-12-01T15:31:10-05:00");
+
     }
 
     @Test
-    public void dateQuery() {
-        testAddDateEntity();
-        List<TextHit> result =  classToTest.query(RDFS.label.asNode(), "2016-12-01T15:31:10-05:00", null, null, 10);
-        Assert.assertNotNull(result);
-        Assert.assertEquals(1, result.size());
+    public void testPlusInSearchQuery() {
+        //Test + character string
+        addSpecialCharacterString("label", "We have +plus in the string");
+        String queryString = "+plus";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
 
-        //This will search for value "2016-12-01T15:31:10-05:00" across all the fields
-        result =  classToTest.query(null, "2016-12-01T15:31:10-05:00", null, null, 10);
-        Assert.assertNotNull(result);
-        Assert.assertEquals(1, result.size());
+    @Test
+    public void testMinusInSearchQuery() {
+        //Test - character string
+        addSpecialCharacterString("label", "We have -minus in the string");
+        String queryString = "-minus";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
 
-        //This will search for value "this" in the label_en field, if it exists. In this case it doesnt so we should get zero results
-        result =  classToTest.query(RDFS.label.asNode(), "2016-12-01T15:31:10-05:00", null, "en", 10);
-        Assert.assertNotNull(result);
-        Assert.assertEquals(0, result.size());
+    @Test
+    public void testEqualInSearchQuery() {
+                //Test = character string
+        addSpecialCharacterString("label", "We have =equal in the string");
+        String queryString = "=equal";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+
+    @Test
+    public void testAmpersandInSearchQuery() {
+                //Test && character string
+        addSpecialCharacterString("label", "We have &&ampersand in the string");
+        String queryString = "&&ampersand";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
 
+    @Test
+    public void testPipeInSearchQuery() {
+//        Test || character string
+        addSpecialCharacterString("label", "We have ||pipe in the string");
+        String queryString = "||pipe";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
     }
 
     @Test
+    public void testGreaterInSearchQuery() {
+//        //Test > character string
+        addSpecialCharacterString("label", "We have >greater in the string");
+        String queryString = ">greater";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testLessInSearchQuery() {
+        // Test < character string
+        addSpecialCharacterString("label", "We have <less in the string");
+        String queryString = "<less";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+
+    @Test
+    public void testExclamationInSearchQuery() {
+        //Test ! character string
+        addSpecialCharacterString("label", "We have !notequal in the string");
+        String queryString = "!notequal";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testOpenRoundInSearchQuery() {
+        //Test ( character string
+        addSpecialCharacterString("label", "We have (bracket in the string");
+        String queryString = "(bracket";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testClosedRoundInSearchQuery() {
+        //Test ) character string
+        addSpecialCharacterString("label", "We have )bracket in the string");
+        String queryString = ")bracket";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testOpenCurlyInSearchQuery() {
+        //Test {bracket character string
+        addSpecialCharacterString("label", "We have {bracket in the string");
+        String queryString = "{bracket";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testClosedCurlyInSearchQuery() {
+        //Test }bracket character string
+        addSpecialCharacterString("label", "We have }bracket in the string");
+        String queryString = "}bracket";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testOpenSquareInSearchQuery() {
+        //Test [bracket character string
+        addSpecialCharacterString("label", "We have [bracket in the string");
+        String queryString = "[bracket";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testClosedSquareInSearchQuery() {
+        //Test ]bracket character string
+        addSpecialCharacterString("label", "We have ]bracket in the string");
+        String queryString = "]bracket";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testCaretInSearchQuery() {
+        //Test ^bracket character string
+        addSpecialCharacterString("label", "We have ^bracket in the string");
+        String queryString = "^bracket";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testTildaInSearchQuery() {
+        //Test ~bracket character string
+        addSpecialCharacterString("label", "We have ~tilda in the string");
+        String queryString = "~tilda";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testQuestionInSearchQuery() {
+        //Test ?question character string
+        addSpecialCharacterString("label", "We have ?question in the string");
+        String queryString = "?question";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+    }
+
+    @Test
+    public void testDateQuery() {
+        addSpecialCharacterString("label", "2016-12-01T15:31:10-05:00");
+        String queryString = "2016-12-01T15:31:10-05:00";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+
+    }
+
+    @Test
+    public void testDoubleQouteQuery() {
+        addSpecialCharacterString("label", "This is a \"double\" quote");
+        String queryString = "\"double\"";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 0);
+
+    }
+
+
+    private void addSpecialCharacterString(String key, String value) {
+
+        Assert.assertNotNull(classToTest);
+        Entity entityToAdd = entity("http://example/x5", key, value);
+        GetResponse response = addEntity(entityToAdd);
+        Assert.assertTrue(response.getSource().containsKey(key));
+        Assert.assertEquals(value, ((List<?>)response.getSource().get(key)).get(0));
+
+    }
+    private void querySpecialCharacterQuery(Node label, String queryString, String lang, int limit, int expectedResults) {
+        List<TextHit> result = classToTest.query(label, queryString, null, lang, limit);
+        Assert.assertNotNull(result);
+        Assert.assertEquals(expectedResults, result.size());
+    }
+
+
+    @Test
     public void testDeleteEntity() {
         testAddEntity();
         String labelKey = "label";
         String labelValue = "this is a sample Label";
         //Now Delete the entity
-        classToTest.deleteEntity(entity("http://example/x3", labelKey, labelValue));
+        classToTest.deleteEntity(entity("http://example/x5", labelKey, labelValue));
 
         //Try to find it
-        GetResponse response = transportClient.prepareGet(INDEX_NAME, DOC_TYPE, "http://example/x3").get();
+        GetResponse response = transportClient.prepareGet(INDEX_NAME, DOC_TYPE, "http://example/x5").get();
         //It Should Exist
         Assert.assertTrue(response.isExists());
         //But the field value should now be empty
-        Assert.assertEquals("http://example/x3", response.getId());
+        Assert.assertEquals("http://example/x5", response.getId());
         Assert.assertTrue(response.getSource().containsKey(labelKey));
         Assert.assertEquals(0, ((List<?>)response.getSource().get(labelKey)).size());
     }
@@ -136,7 +318,7 @@ public class TextIndexESIT extends BaseESTest {
     public void testGet() {
         testAddEntity();
         //Now Get the same entity
-        Map<String, Node> response = classToTest.get("http://example/x3");
+        Map<String, Node> response = classToTest.get("http://example/x5");
         Assert.assertNotNull(response);
         Assert.assertEquals(2, response.size());
     }


[9/9] jena git commit: This closes #390

Posted by an...@apache.org.
This closes #390


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/88cd917f
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/88cd917f
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/88cd917f

Branch: refs/heads/master
Commit: 88cd917f2615f4d70c22ae42ef0b11d89f0d0c58
Parents: ec72211
Author: Andy Seaborne <an...@apache.org>
Authored: Fri May 4 09:09:24 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri May 4 09:09:24 2018 +0100

----------------------------------------------------------------------

----------------------------------------------------------------------



[6/9] jena git commit: JENA-1532: Merge commit 'refs/pull/406/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1532: Merge commit 'refs/pull/406/head' of https://github.com/apache/jena

This closes #406.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/81fedb16
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/81fedb16
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/81fedb16

Branch: refs/heads/master
Commit: 81fedb16a4869783ff3dc3eb40f65ebd0c5fe13e
Parents: 0870e40 77058de
Author: Andy Seaborne <an...@apache.org>
Authored: Fri May 4 08:51:21 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri May 4 08:51:21 2018 +0100

----------------------------------------------------------------------
 .../main/java/examples/JenaESTextExample.java   |   3 +-
 .../apache/jena/query/text/es/TextIndexES.java  |  14 +-
 .../jena/query/text/es/it/TextIndexESIT.java    | 239 ++++++++++++++++++-
 3 files changed, 241 insertions(+), 15 deletions(-)
----------------------------------------------------------------------



[3/9] jena git commit: JENA-1532 | fix for date based text query search

Posted by an...@apache.org.
JENA-1532 | fix for date based text query search


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/77058de8
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/77058de8
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/77058de8

Branch: refs/heads/master
Commit: 77058de86a6a85f6bdffc5b0b733572cac1d84b1
Parents: 7f4915e
Author: Anuj Kumar <ak...@isightpartners.com>
Authored: Tue Apr 24 19:38:37 2018 +0200
Committer: Anuj Kumar <ak...@isightpartners.com>
Committed: Tue Apr 24 19:38:37 2018 +0200

----------------------------------------------------------------------
 .../apache/jena/query/text/es/TextIndexES.java  | 21 ++------------------
 .../jena/query/text/es/it/TextIndexESIT.java    |  9 +++++++++
 2 files changed, 11 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/77058de8/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
----------------------------------------------------------------------
diff --git a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
index 6a8a649..62c66f3 100644
--- a/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
+++ b/jena-text-es/src/main/java/org/apache/jena/query/text/es/TextIndexES.java
@@ -23,6 +23,7 @@ import org.apache.jena.graph.Node;
 import org.apache.jena.graph.NodeFactory;
 import org.apache.jena.query.text.*;
 import org.apache.jena.sparql.util.NodeFactoryExtra;
+import org.apache.lucene.queryparser.classic.QueryParserBase;
 import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
 import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
 import org.elasticsearch.action.get.GetResponse;
@@ -423,25 +424,7 @@ public class TextIndexES implements TextIndex {
 
     private String parse(String fieldName, String qs, String lang) {
         //Escape special characters if any in the query string
-        qs = qs.replaceAll("\\:", "\\\\:")
-                .replaceAll("\\+", "\\\\+")
-                .replaceAll("\\-", "\\\\-")
-                .replaceAll("\\=", "\\\\=")
-                .replaceAll("\\&", "\\\\&")
-                .replaceAll("\\|", "\\\\|")
-                .replaceAll("\\>", "\\\\>")
-                .replaceAll("\\<", "\\\\<")
-                .replaceAll("\\!", "\\\\!")
-                .replaceAll("\\(", "\\\\(")
-                .replaceAll("\\)", "\\\\)")
-                .replaceAll("\\{", "\\\\{")
-                .replaceAll("\\}", "\\\\}")
-                .replaceAll("\\]", "\\\\]")
-                .replaceAll("\\[", "\\\\[")
-                .replaceAll("\\^", "\\\\^")
-                .replaceAll("\\~", "\\\\~")
-                .replaceAll("\\?", "\\\\?");
-
+        qs = QueryParserBase.escape(qs);
 
         if(fieldName != null && !fieldName.isEmpty()) {
             if(lang != null && !lang.equals("none")) {

http://git-wip-us.apache.org/repos/asf/jena/blob/77058de8/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
----------------------------------------------------------------------
diff --git a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
index 1e03e39..022bef5 100644
--- a/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
+++ b/jena-text-es/src/test/java/org/apache/jena/query/text/es/it/TextIndexESIT.java
@@ -240,6 +240,15 @@ public class TextIndexESIT extends BaseESTest {
 
     }
 
+    @Test
+    public void testBackslash() {
+        addSpecialCharacterString("label", "C:\\ title.csv save this");
+        String queryString = "C:\\ title.csv";
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, null, 10, 1);
+        querySpecialCharacterQuery(null, queryString, null, 10, 1);
+        querySpecialCharacterQuery(RDFS.label.asNode(), queryString, "en", 10, 1);
+    }
+
 
     private void addSpecialCharacterString(String key, String value) {
 


[8/9] jena git commit: JENA-1539: Merge commit 'refs/pull/412/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1539: Merge commit 'refs/pull/412/head' of https://github.com/apache/jena

This closes #412.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ec722117
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ec722117
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ec722117

Branch: refs/heads/master
Commit: ec7221176e131b34bfc1ac8cdfc5251b3daaddbe
Parents: 18eb495 dbce176
Author: Andy Seaborne <an...@apache.org>
Authored: Fri May 4 08:53:53 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri May 4 08:53:53 2018 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/system/Txn.java   | 45 ++++++++++-----
 .../java/org/apache/jena/system/TestTxn.java    | 61 ++++++++++++++++----
 .../apache/jena/system/TestTxnLifecycle.java    |  3 +-
 3 files changed, 83 insertions(+), 26 deletions(-)
----------------------------------------------------------------------