You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/06/10 12:52:54 UTC

[01/11] jena git commit: First implementation of fn:adjust-dateTime-to-timezone.

Repository: jena
Updated Branches:
  refs/heads/master 7f2dfed0a -> edba13136




First implementation of fn:adjust-dateTime-to-timezone.

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

Branch: refs/heads/master
Commit: da73e967b19f00f4d5f8b245079b9894331715db
Parents: f2ae5db
Author: ales004 <ci...@hotmail.com>
Authored: Sun May 29 19:13:47 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Sun May 29 19:13:47 2016 +0200

----------------------------------------------------------------------
 .../jena/sparql/expr/nodevalue/XSDFuncOp.java   | 61 +++++++++++++++++---
 .../jena/sparql/function/StandardFunctions.java |  1 +
 .../library/FN_AdjustDatetimeToTimezone.java    | 55 ++++++++++++++++++
 .../apache/jena/sparql/expr/TestFunctions.java  | 38 +++++++++++-
 4 files changed, 147 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/da73e967/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
index 817c20f..8b31d92 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
@@ -34,10 +34,7 @@ import static org.apache.jena.sparql.expr.nodevalue.NumericType.OP_INTEGER ;
 import java.math.BigDecimal ;
 import java.math.BigInteger ;
 import java.text.Normalizer;
-import java.util.ArrayList;
-import java.util.HashSet ;
-import java.util.List ;
-import java.util.Set ;
+import java.util.*;
 import java.util.regex.Matcher ;
 import java.util.regex.Pattern ;
 
@@ -1426,10 +1423,9 @@ public class XSDFuncOp
         return NodeValue.makeString(dts.timezone) ;
     }
 
-    public static NodeValue dtGetTimezone(NodeValue nv) {
-        DateTimeStruct dts = parseAnyDT(nv) ;
+    private static NodeValue fromTimezoneToDuration(DateTimeStruct dts){
         if ( dts == null || dts.timezone == null )
-            throw new ExprEvalException("Not a datatype with a timezone: " + nv) ;
+            return null;
         if ( "".equals(dts.timezone) )
             return null ;
         if ( "Z".equals(dts.timezone) ) {
@@ -1460,6 +1456,13 @@ public class XSDFuncOp
         return NodeValue.makeNode(sb.toString(), null, XSDDatatype.XSD + "#dayTimeDuration") ;
     }
 
+    public static NodeValue dtGetTimezone(NodeValue nv) {
+        DateTimeStruct dts = parseAnyDT(nv) ;
+        if ( dts == null || dts.timezone == null )
+            throw new ExprEvalException("Not a datatype with a timezone: " + nv) ;
+        return fromTimezoneToDuration(dts);
+    }
+
     private static void digitsTwo(String s, int idx, StringBuilder sb, char indicator) {
         if ( s.charAt(idx) == '0' ) {
             idx++ ;
@@ -1554,4 +1557,48 @@ public class XSDFuncOp
 //            dur = ... 
         return dur ;
     }
+
+    public static NodeValue adjustDatetimeToTimezone(NodeValue nv1,NodeValue nv2){
+        if(nv1 == null)
+            return null;
+
+        if(!nv1.isDateTime() && !nv1.isDate()){
+            throw new ExprEvalException("Not a valid date or datetime:"+nv1);
+        }
+        DateTimeStruct dts = parseAnyDT(nv1);
+        NodeValue inputTimezone = fromTimezoneToDuration(dts);
+        Boolean hasTz = inputTimezone == null ? false : true;
+        XMLGregorianCalendar calValue = nv1.getDateTime();
+        int inputOffset = 0;
+        if(hasTz){
+            Duration inputDuration = inputTimezone.getDuration();
+            inputOffset = inputDuration.getSign()*(inputDuration.getMinutes() + 60*inputDuration.getHours());
+        }
+
+        int tzOffset = TimeZone.getDefault().getRawOffset() / (1000*60);
+        if(nv2 != null){
+            if(!nv2.isDuration()) {
+                String nv2StrValue = nv2.getString();
+                if(nv2StrValue.equals("")){
+                    calValue.setTimezone(DatatypeConstants.FIELD_UNDEFINED);
+                    if(nv1.isDateTime())
+                        return NodeValue.makeDateTime(calValue);
+                    else
+                        return NodeValue.makeDate(calValue);
+                }
+                throw new ExprEvalException("Not a valid duration:" + nv2);
+            }
+            Duration tzDuration = nv2.getDuration();
+            tzOffset = tzDuration.getSign()*(tzDuration.getMinutes() + 60*tzDuration.getHours());
+        }
+        String tzSign = (tzOffset-inputOffset) > 0 ? "" : "-";
+        Duration durToAdd = NodeValue.makeDuration(tzSign+"PT"+java.lang.Math.abs(tzOffset-inputOffset)+"M").getDuration();
+        if(hasTz)
+            calValue.add(durToAdd);
+        calValue.setTimezone(tzOffset);
+        if(nv1.isDateTime())
+            return NodeValue.makeDateTime(calValue);
+        else
+            return NodeValue.makeDate(calValue);
+    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/da73e967/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
index 9594059..e8b014d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
@@ -164,6 +164,7 @@ public class StandardFunctions
         
         // XQ/XP 3.
 //        9.6.1 fn:adjust-dateTime-to-timezone
+        add(registry, xfn+"adjust-dateTime-to-timezone",  FN_AdjustDatetimeToTimezone.class) ;
 //        9.6.2 fn:adjust-date-to-timezone
 //        9.6.3 fn:adjust-time-to-timezone
 //        9.8.1 fn:format-dateTime

http://git-wip-us.apache.org/repos/asf/jena/blob/da73e967/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_AdjustDatetimeToTimezone.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_AdjustDatetimeToTimezone.java b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_AdjustDatetimeToTimezone.java
new file mode 100644
index 0000000..7d480dd
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_AdjustDatetimeToTimezone.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jena.sparql.function.library;
+
+import org.apache.jena.atlas.lib.Lib;
+import org.apache.jena.query.QueryBuildException;
+import org.apache.jena.sparql.expr.ExprEvalException;
+import org.apache.jena.sparql.expr.ExprList;
+import org.apache.jena.sparql.expr.NodeValue;
+import org.apache.jena.sparql.expr.nodevalue.XSDFuncOp;
+import org.apache.jena.sparql.function.FunctionBase;
+
+import java.util.List;
+
+public class FN_AdjustDatetimeToTimezone extends FunctionBase {
+    public FN_AdjustDatetimeToTimezone(){super();}
+
+    @Override
+    public void checkBuild(String uri, ExprList args)
+    {
+        if ( args.size() != 1 && args.size() != 2 )
+            throw new QueryBuildException("Function '"+ Lib.className(this)+"' takes one or two arguments") ;
+    }
+    @Override
+    public NodeValue exec(List<NodeValue> args)
+    {
+        if ( args.size() != 1 && args.size() != 2 )
+            throw new ExprEvalException("FN_StrNormalizeUnicode: Wrong number of arguments: "+args.size()+" : [wanted 1 or 2]") ;
+
+        NodeValue v1 = args.get(0) ;
+
+        if ( args.size() == 2 )
+        {
+            NodeValue v2 = args.get(1) ;
+            return XSDFuncOp.adjustDatetimeToTimezone(v1, v2) ;
+        }
+
+        return XSDFuncOp.adjustDatetimeToTimezone(v1, null) ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/da73e967/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
index 589c9c4..3864711 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
@@ -348,6 +348,35 @@ public class TestFunctions
     // counter-intuitive -- would fail if float/double not translated to decimal
     @Test public void exprRoundHalfEven_08()    { test("fn:round-half-to-even('150.015'^^xsd:float, 2)",     NodeValue.makeFloat((float)150.01)) ; }
 
+    private String getDynamicDurationString(){
+        int tzOffset = TimeZone.getDefault().getRawOffset() / (1000*60);
+        return "PT"+tzOffset+"M";
+    }
+
+    @Test public void exprAdjustDatetimeToTz_01(){
+        testEqual(
+                "fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00'^^xsd:dateTime)",
+                "fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00'^^xsd:dateTime,'"+getDynamicDurationString()+"'^^xsd:dayTimeDuration)");
+    }
+
+    @Test public void exprAdjustDatetimeToTz_02(){
+        testEqual(
+                "fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00-07:00'^^xsd:dateTime)",
+                "fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00-07:00'^^xsd:dateTime,'"+getDynamicDurationString()+"'^^xsd:dayTimeDuration)");
+    }
+
+    @Test public void exprAdjustDatetimeToTz_03(){test("fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00'^^xsd:dateTime,'-PT10H'^^xsd:dayTimeDuration)",NodeValue.makeDateTime("2002-03-07T10:00:00-10:00"));}
+
+    @Test public void exprAdjustDatetimeToTz_04(){test("fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00-07:00'^^xsd:dateTime,'-PT10H'^^xsd:dayTimeDuration)",NodeValue.makeDateTime("2002-03-07T07:00:00-10:00"));}
+
+    @Test public void exprAdjustDatetimeToTz_05(){test("fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00-07:00'^^xsd:dateTime,'PT10H'^^xsd:dayTimeDuration)",NodeValue.makeDateTime("2002-03-08T03:00:00+10:00"));}
+
+    @Test public void exprAdjustDatetimeToTz_06(){test("fn:adjust-dateTime-to-timezone('2002-03-07T00:00:00+01:00'^^xsd:dateTime,'-PT8H'^^xsd:dayTimeDuration)",NodeValue.makeDateTime("2002-03-06T15:00:00-08:00"));}
+
+    @Test public void exprAdjustDatetimeToTz_07(){test("fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00'^^xsd:dateTime,'')",NodeValue.makeDateTime("2002-03-07T10:00:00"));}
+
+    @Test public void exprAdjustDatetimeToTz_08(){test("fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00-07:00'^^xsd:dateTime,'')",NodeValue.makeDateTime("2002-03-07T10:00:00"));}
+
     //@Test public void exprStrJoin()      { test("fn:string-join('a', 'b')", NodeValue.makeString("ab")) ; }
     
     @Test public void exprSameTerm1()     { test("sameTerm(1,1)",           TRUE) ; }
@@ -402,7 +431,14 @@ public class TestFunctions
         NodeValue r = expr.eval(null, FunctionEnvBase.createTest()) ;
         assertEquals(result, r) ;
     }
-    
+
+    private void testEqual(String exprStr, String exprStrExpected)
+    {
+        Expr expr = ExprUtils.parse(exprStrExpected) ;
+        NodeValue rExpected = expr.eval(null, FunctionEnvBase.createTest()) ;
+        test(exprStr,rExpected);
+    }
+
     private void testEvalException(String exprStr)
     {
         Expr expr = ExprUtils.parse(exprStr) ;


[10/11] jena git commit: Merge commit 'refs/pull/148/head' of github.com:apache/jena

Posted by an...@apache.org.
Merge commit 'refs/pull/148/head' of github.com:apache/jena

This closes #148.


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

Branch: refs/heads/master
Commit: 9dd5ac3b583435a1557fd195f93617e8a5abe871
Parents: 7f2dfed 5152511
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jun 10 12:58:49 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jun 10 12:58:49 2016 +0100

----------------------------------------------------------------------
 .../jena/sparql/expr/nodevalue/XSDFuncOp.java   | 58 +++++++++++++-
 .../jena/sparql/function/StandardFunctions.java |  3 +
 .../library/FN_AdjustDatetimeToTimezone.java    | 55 +++++++++++++
 .../apache/jena/sparql/expr/TestFunctions.java  | 82 +++++++++++++++++++-
 4 files changed, 193 insertions(+), 5 deletions(-)
----------------------------------------------------------------------



[02/11] jena git commit: Add the error conditions.

Posted by an...@apache.org.

Add the error conditions.

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

Branch: refs/heads/master
Commit: 807d50feff9b300e81253e3306778863f78444c1
Parents: da73e96
Author: ales004 <ci...@hotmail.com>
Authored: Sun May 29 19:33:42 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Sun May 29 19:33:42 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java   | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/807d50fe/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
index 8b31d92..037b160 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
@@ -1590,6 +1590,11 @@ public class XSDFuncOp
             }
             Duration tzDuration = nv2.getDuration();
             tzOffset = tzDuration.getSign()*(tzDuration.getMinutes() + 60*tzDuration.getHours());
+            if(tzDuration.getSeconds() > 0)
+                throw new ExprEvalException("The timezone duration should be an integral number of minutes");
+            int absTzOffset = java.lang.Math.abs(tzOffset);
+            if(absTzOffset > 14*60)
+                throw new ExprEvalException("The timezone should be a duration between -PT14H and PT14H.");
         }
         String tzSign = (tzOffset-inputOffset) > 0 ? "" : "-";
         Duration durToAdd = NodeValue.makeDuration(tzSign+"PT"+java.lang.Math.abs(tzOffset-inputOffset)+"M").getDuration();


[09/11] jena git commit: Taking into account daylight savings in the timezone by using the current date value. Using newDurationDatetime instead of parsing the string value.

Posted by an...@apache.org.

Taking into account daylight savings in the timezone by using the current date value.
Using newDurationDatetime instead of parsing the string value.

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

Branch: refs/heads/master
Commit: 51525117bc9a81aa5362340c5a9a005eef0be28d
Parents: d57d48c
Author: ales004 <ci...@hotmail.com>
Authored: Thu Jun 9 07:56:07 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Thu Jun 9 07:56:07 2016 +0200

----------------------------------------------------------------------
 .../org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java     | 8 +++++---
 .../test/java/org/apache/jena/sparql/expr/TestFunctions.java | 7 +++++--
 2 files changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/51525117/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
index 785817f..7b565fd 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
@@ -1567,7 +1567,7 @@ public class XSDFuncOp
             inputOffset = calValue.getTimezone();
         }
 
-        int tzOffset = TimeZone.getDefault().getRawOffset() / (1000*60);
+        int tzOffset = 0;
         if(nv2 != null){
             if(!nv2.isDuration()) {
                 String nv2StrValue = nv2.getString();
@@ -1590,8 +1590,10 @@ public class XSDFuncOp
             if(absTzOffset > 14*60)
                 throw new ExprEvalException("The timezone should be a duration between -PT14H and PT14H.");
         }
-        String tzSign = (tzOffset-inputOffset) > 0 ? "" : "-";
-        Duration durToAdd = NodeValue.makeDuration(tzSign+"PT"+java.lang.Math.abs(tzOffset-inputOffset)+"M").getDuration();
+        else{
+            tzOffset = TimeZone.getDefault().getOffset(new Date().getTime())/(1000*60);
+        }
+        Duration durToAdd = NodeValue.xmlDatatypeFactory.newDurationDayTime((tzOffset-inputOffset) > 0,0,0,java.lang.Math.abs(tzOffset-inputOffset),0);
         if(hasTz)
             calValue.add(durToAdd);
         calValue.setTimezone(tzOffset);

http://git-wip-us.apache.org/repos/asf/jena/blob/51525117/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
index 1830c5e..e7bf8a6 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
@@ -349,8 +349,11 @@ public class TestFunctions
     @Test public void exprRoundHalfEven_08()    { test("fn:round-half-to-even('150.015'^^xsd:float, 2)",     NodeValue.makeFloat((float)150.01)) ; }
 
     private String getDynamicDurationString(){
-        int tzOffset = TimeZone.getDefault().getRawOffset() / (1000*60);
-        return "PT"+tzOffset+"M";
+        int tzOffset = TimeZone.getDefault().getOffset(new Date().getTime()) / (1000*60);
+        String off = "PT"+Math.abs(tzOffset)+"M";
+        if(tzOffset < 0)
+            off = "-"+off;
+        return off;
     }
 
     @Test public void exprAdjustDatetimeToTz_01(){


[11/11] jena git commit: JENA-1192: Support for the MariaDB JDBC driver.

Posted by an...@apache.org.
JENA-1192: Support for the MariaDB JDBC driver.


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

Branch: refs/heads/master
Commit: edba13136e2dd201e26e24a62e3f1b8a5c20e81e
Parents: 9dd5ac3
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jun 10 13:44:38 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jun 10 13:44:58 2016 +0100

----------------------------------------------------------------------
 .../jena/sdb/layout2/LoaderTuplesNodes.java     |  3 +-
 .../apache/jena/sdb/layout2/NodeLayout2.java    |  2 +-
 .../main/java/org/apache/jena/sdb/sql/JDBC.java | 36 ++++++++++++++++----
 .../org/apache/jena/sdb/store/DatabaseType.java |  7 ++--
 .../org/apache/jena/sdb/store/StoreFactory.java | 21 +++++++++++-
 .../org/apache/jena/sdb/util/StoreUtils.java    | 11 +++---
 6 files changed, 60 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
index 395a8ee..0fee236 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/LoaderTuplesNodes.java
@@ -285,8 +285,7 @@ public class LoaderTuplesNodes
     		if (currentLoader == null) { // make a new loader
     			try {
 					currentLoader =
-						tupleLoaderClass.getConstructor(SDBConnection.class, TableDesc.class, 
-								Integer.TYPE).newInstance(connection(), tuple.table, chunkSize);
+						tupleLoaderClass.getConstructor(SDBConnection.class, TableDesc.class, Integer.TYPE).newInstance(connection(), tuple.table, chunkSize);
 				} catch (Exception e) {
 					throw new SDBException("Problem making new tupleloader", e);
 				}

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
index bbe174d..6fa56b6 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/layout2/NodeLayout2.java
@@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
 
 public class NodeLayout2
 {
-    // Turn into the lexcial form
+    // Turn into the lexical form
 
     public static String nodeToLex(Node node)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java b/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
index ca55fcd..f1da4bd 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/sql/JDBC.java
@@ -40,9 +40,13 @@ public class JDBC
     // The "well known" not a JDBC connection really scheme
     public static final String jdbcNone = "jdbc:none" ;
 
+    public static final String jdbcDriverClassMySQL ; 
+    public static final String jdbcDriverClassMariaDB ;
+    
     private static Map<DatabaseType, String> driver = new HashMap<DatabaseType, String>() ;
     static {
         driver.put(DatabaseType.MySQL,      "com.mysql.jdbc.Driver") ;
+        driver.put(DatabaseType.MariaDB,    "org.mariadb.jdbc.Driver") ;
         driver.put(DatabaseType.PostgreSQL, "org.postgresql.Driver") ;
         driver.put(DatabaseType.H2,         "org.h2.Driver") ;
         driver.put(DatabaseType.HSQLDB,     "org.hsqldb.jdbcDriver") ;
@@ -52,6 +56,9 @@ public class JDBC
         driver.put(DatabaseType.Oracle,     "oracle.jdbc.driver.OracleDriver") ;
         driver.put(DatabaseType.DB2,        "com.ibm.db2.jcc.DB2Driver") ;
         driver.put(DatabaseType.SAP,        "com.sap.db.jdbc.Driver") ;
+        
+        jdbcDriverClassMySQL       = driver.get(DatabaseType.MySQL) ;
+        jdbcDriverClassMariaDB     = driver.get(DatabaseType.MariaDB) ;
     }
     
     static public String getDriver(DatabaseType dbType) { return driver.get(dbType) ; }
@@ -62,6 +69,8 @@ public class JDBC
     static public void loadDriverH2()  { loadDriver(driver.get(DatabaseType.H2)) ; }
     /** Explicitly load the MySQL driver */ 
     static public void loadDriverMySQL() { loadDriver(driver.get(DatabaseType.MySQL)) ; }
+    /** Explicitly load the MariaDB driver */ 
+    static public void loadDriverMariaDB() { loadDriver(driver.get(DatabaseType.MariaDB)) ; }
     /** Explicitly load the PostgreSQL driver */ 
     static public void loadDriverPGSQL() { loadDriver(driver.get(DatabaseType.PostgreSQL)); }
     /** Explicitly load the Derby driver */ 
@@ -99,16 +108,28 @@ public class JDBC
         return DriverManager.getConnection(url, user, password) ;
     }
     
-//    static public void loadClass(String className)
-//    { Loader.loadClass(className) ; }
-
     static private void loadClass(String className)
     { 
-        try { Class.forName(className); }
+        try { Class.forName(className); return ; }
         catch (ClassNotFoundException ex)
-        { throw new SDBNotFoundException("Class.forName("+className+")", ex) ; } 
+        {
+            // Ir MySQL or MariaDB, try the other one.
+            if ( className.equals(jdbcDriverClassMySQL) || className.equals(jdbcDriverClassMariaDB) ) {
+                String classNameAlt = null ; 
+                if ( className.equals(jdbcDriverClassMySQL) )
+                    classNameAlt = jdbcDriverClassMariaDB ;
+                else if ( className.equals(jdbcDriverClassMariaDB) )
+                    classNameAlt = jdbcDriverClassMySQL ;
+                try { Class.forName(classNameAlt) ; return ; }
+                catch (ClassNotFoundException ex2) {}
+            }
+            throw new SDBNotFoundException("Class.forName("+className+")", ex) ; }
     }
 
+    static private void loadClass1(String className) {
+        
+    }
+    
     public static String makeURL(String type, String host, String dbName)
     { return makeURL(type, host, dbName, null, null) ; }
 
@@ -125,8 +146,11 @@ public class JDBC
         if ( password == null )
             password = Access.getPassword() ;
         
-        if ( type.equals("mysql") )
+        if ( type.equals("mysql") || type.equals("mariadb") )
         {
+            // MariaDB responds to jdbc:mysql:... 
+            // but MySQL does not respond to jdbc:mariadb:...
+            type = "mysql" ;
             String s = String.format("jdbc:%s://%s/%s", type, host, dbName) ;
             return s ;
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java b/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
index 5e3d83b..685b0ca 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/store/DatabaseType.java
@@ -35,6 +35,8 @@ public class DatabaseType extends Symbol implements Named
     public static final DatabaseType H2              = new DatabaseType("H2") ;
     public static final DatabaseType HSQLDB          = new DatabaseType("HSQLDB") ;
     public static final DatabaseType MySQL           = new DatabaseType("MySQL") ;
+    // MariaDB is currently treated as MySQL - the only difference is that a different JDBC driver is loaded.  
+    public static final DatabaseType MariaDB         = new DatabaseType("MariaDB") ;
     public static final DatabaseType PostgreSQL      = new DatabaseType("PostgreSQL") ;
     public static final DatabaseType SQLServer       = new DatabaseType("SQLServer") ;
     public static final DatabaseType Oracle          = new DatabaseType("Oracle") ;
@@ -63,7 +65,6 @@ public class DatabaseType extends Symbol implements Named
     
     static void init()
     {
-        // Java databases
         register(Derby) ;
         registerName("JavaDB", Derby) ;
         
@@ -78,14 +79,12 @@ public class DatabaseType extends Symbol implements Named
         registerName("h2:tcp", H2) ;
         registerName("h2", H2) ;
         
-        // Open source DBs
         register(MySQL) ;
-        // registerName("MySQL5", HSQLDB) ;      // am I right in assuming that "HSQLDB" should actually be "MySQL"
+        register(MariaDB) ;
         registerName("MySQL5", MySQL) ;
         
         register(PostgreSQL) ;
         
-        // Commercial DBs
         register(SQLServer) ;
         registerName("MSSQLServer" , SQLServer) ;
         registerName("MSSQLServerExpress" , SQLServer) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java b/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
index a9cb925..58f6e46 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/store/StoreFactory.java
@@ -173,6 +173,13 @@ public class StoreFactory
                     @Override
                     public Store create(SDBConnection conn, StoreDesc desc)
                     { return new StoreTriplesNodesHashMySQL(conn, desc, desc.engineType) ; } }) ;
+        
+        // Treat as MySQL
+        register(MariaDB, LayoutTripleNodesHash,
+                 new StoreMaker() {
+                    @Override
+                    public Store create(SDBConnection conn, StoreDesc desc)
+                    { return new StoreTriplesNodesHashMySQL(conn, desc, desc.engineType) ; } }) ;
 
         register(PostgreSQL, LayoutTripleNodesHash,
                  new StoreMaker() {
@@ -232,6 +239,12 @@ public class StoreFactory
                     public Store create(SDBConnection conn, StoreDesc desc)
                     { return new StoreTriplesNodesIndexMySQL(conn, desc, desc.engineType) ; } }) ;
 
+        register(MariaDB, LayoutTripleNodesIndex,
+                 new StoreMaker() {
+                    @Override
+                    public Store create(SDBConnection conn, StoreDesc desc)
+                    { return new StoreTriplesNodesIndexMySQL(conn, desc, desc.engineType) ; } }) ;
+        
         register(PostgreSQL, LayoutTripleNodesIndex,
                  new StoreMaker() {
                     @Override
@@ -290,6 +303,12 @@ public class StoreFactory
                     public Store create(SDBConnection conn, StoreDesc desc)
                     { return new StoreSimpleMySQL(conn, desc, desc.engineType) ; } }) ;
 
+        register(MariaDB,  LayoutSimple,
+                 new StoreMaker() {
+                    @Override
+                    public Store create(SDBConnection conn, StoreDesc desc)
+                    { return new StoreSimpleMySQL(conn, desc, desc.engineType) ; } }) ;
+ 
         register(PostgreSQL, LayoutSimple,
                  new StoreMaker() {
                     @Override
@@ -323,7 +342,7 @@ public class StoreFactory
     
     static private void checkRegistry()
     {
-        DatabaseType[] dbTypes = {Derby, HSQLDB, H2, MySQL, PostgreSQL, SQLServer, Oracle, SAP} ;
+        DatabaseType[] dbTypes = {Derby, HSQLDB, H2, MySQL, MariaDB, PostgreSQL, SQLServer, Oracle, SAP} ;
         LayoutType[] layoutTypes = {LayoutTripleNodesHash, LayoutTripleNodesIndex, LayoutSimple} ;
         
         Set <StoreMaker> seen = new HashSet<StoreMaker>() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/edba1313/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java b/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
index c259279..70248ab 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/util/StoreUtils.java
@@ -18,13 +18,9 @@
 
 package org.apache.jena.sdb.util;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Collection;
-import java.util.HashSet;
 import java.sql.Connection;
 import java.sql.SQLException;
+import java.util.* ;
 
 import org.apache.jena.graph.Node ;
 import org.apache.jena.query.Dataset ;
@@ -67,7 +63,10 @@ public class StoreUtils
 
     public static boolean isMySQL(Store store)
     {
-        return store.getDatabaseType().equals(DatabaseType.MySQL) ;
+        DatabaseType type = store.getDatabaseType() ;
+        
+        return Objects.equals(type, DatabaseType.MySQL) ||
+               Objects.equals(type, DatabaseType.MariaDB) ;
     }
     
     public static boolean isSQLServer(Store store)


[05/11] jena git commit: Simplified the checking of the input timezone.

Posted by an...@apache.org.

Simplified the checking of the input timezone.

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

Branch: refs/heads/master
Commit: 77ddf08758c37efc15410e938b65e3d379f83dd8
Parents: d786344
Author: ales004 <ci...@hotmail.com>
Authored: Fri Jun 3 20:53:02 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Fri Jun 3 20:53:02 2016 +0200

----------------------------------------------------------------------
 .../org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java     | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/77ddf087/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
index 037b160..861b388 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
@@ -1565,14 +1565,12 @@ public class XSDFuncOp
         if(!nv1.isDateTime() && !nv1.isDate()){
             throw new ExprEvalException("Not a valid date or datetime:"+nv1);
         }
-        DateTimeStruct dts = parseAnyDT(nv1);
-        NodeValue inputTimezone = fromTimezoneToDuration(dts);
-        Boolean hasTz = inputTimezone == null ? false : true;
+
         XMLGregorianCalendar calValue = nv1.getDateTime();
+        Boolean hasTz = calValue.getTimezone() != DatatypeConstants.FIELD_UNDEFINED;
         int inputOffset = 0;
         if(hasTz){
-            Duration inputDuration = inputTimezone.getDuration();
-            inputOffset = inputDuration.getSign()*(inputDuration.getMinutes() + 60*inputDuration.getHours());
+            inputOffset = calValue.getTimezone();
         }
 
         int tzOffset = TimeZone.getDefault().getRawOffset() / (1000*60);


[08/11] jena git commit: Merge remote-tracking branch 'upstream/master'

Posted by an...@apache.org.
Merge remote-tracking branch 'upstream/master'


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

Branch: refs/heads/master
Commit: d57d48cfc61d1c32ddad182e1352feb404340a9d
Parents: 739a2a3 8e02240
Author: ales004 <ci...@hotmail.com>
Authored: Thu Jun 9 07:34:30 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Thu Jun 9 07:34:30 2016 +0200

----------------------------------------------------------------------
 .../optimize/TransformFilterEquality.java       |  3 +
 .../jena/sparql/engine/main/JoinClassifier.java | 59 +++++++------
 .../sparql/engine/main/LeftJoinClassifier.java  | 47 ++++++-----
 .../jena/sparql/engine/main/VarFinder.java      | 88 +++++++++++++++++---
 .../jena/sparql/sse/builders/BuilderExpr.java   |  3 +-
 .../jena/sparql/algebra/TestClassify.java       | 23 +++--
 .../jena/sparql/algebra/TestTransformQuads.java |  3 +-
 .../jena/sparql/algebra/TestVarFinder.java      | 49 ++++++-----
 .../algebra/optimize/TestTransformFilters.java  | 24 ++++++
 jena-sdb/src/main/java/sdb/sdbdump.java         |  6 +-
 jena-sdb/src/main/java/sdb/sdbload.java         | 53 ++++++++----
 11 files changed, 253 insertions(+), 105 deletions(-)
----------------------------------------------------------------------



[03/11] jena git commit: Implemented adjust-date-to-timezone

Posted by an...@apache.org.

Implemented adjust-date-to-timezone

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

Branch: refs/heads/master
Commit: 8de4216c0cb96f098a84d765db6cf1bf3e2b3956
Parents: 807d50f
Author: ales004 <ci...@hotmail.com>
Authored: Sun May 29 23:04:25 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Sun May 29 23:04:25 2016 +0200

----------------------------------------------------------------------
 .../jena/sparql/function/StandardFunctions.java  |  1 +
 .../apache/jena/sparql/expr/TestFunctions.java   | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/8de4216c/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
index e8b014d..adecc95 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
@@ -166,6 +166,7 @@ public class StandardFunctions
 //        9.6.1 fn:adjust-dateTime-to-timezone
         add(registry, xfn+"adjust-dateTime-to-timezone",  FN_AdjustDatetimeToTimezone.class) ;
 //        9.6.2 fn:adjust-date-to-timezone
+        add(registry, xfn+"adjust-date-to-timezone",  FN_AdjustDatetimeToTimezone.class) ;
 //        9.6.3 fn:adjust-time-to-timezone
 //        9.8.1 fn:format-dateTime
 //        9.8.2 fn:format-date

http://git-wip-us.apache.org/repos/asf/jena/blob/8de4216c/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
index 3864711..f0f252e 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
@@ -377,6 +377,25 @@ public class TestFunctions
 
     @Test public void exprAdjustDatetimeToTz_08(){test("fn:adjust-dateTime-to-timezone('2002-03-07T10:00:00-07:00'^^xsd:dateTime,'')",NodeValue.makeDateTime("2002-03-07T10:00:00"));}
 
+    @Test public void exprAdjustDateToTz_01(){
+        testEqual(
+                "fn:adjust-date-to-timezone('2002-03-07'^^xsd:date)",
+                "fn:adjust-date-to-timezone('2002-03-07'^^xsd:date,'"+getDynamicDurationString()+"'^^xsd:dayTimeDuration)");
+    }
+
+    @Test public void exprAdjustDateToTz_02(){
+        testEqual(
+                "fn:adjust-date-to-timezone('2002-03-07-07:00'^^xsd:date)",
+                "fn:adjust-date-to-timezone('2002-03-07-07:00'^^xsd:date,'"+getDynamicDurationString()+"'^^xsd:dayTimeDuration)");
+    }
+
+    @Test public void exprAdjustDateToTz_03(){test("fn:adjust-date-to-timezone('2002-03-07'^^xsd:date,'-PT10H'^^xsd:dayTimeDuration)",NodeValue.makeDate("2002-03-07-10:00"));}
+
+    @Test public void exprAdjustDateToTz_04(){test("fn:adjust-date-to-timezone('2002-03-07-07:00'^^xsd:date,'-PT10H'^^xsd:dayTimeDuration)",NodeValue.makeDate("2002-03-06-10:00"));}
+
+    @Test public void exprAdjustDateToTz_05(){test("fn:adjust-date-to-timezone('2002-03-07'^^xsd:date,'')",NodeValue.makeDate("2002-03-07"));}
+
+    @Test public void exprAdjustDateToTz_06(){test("fn:adjust-date-to-timezone('2002-03-07-07:00'^^xsd:date,'')",NodeValue.makeDate("2002-03-07"));}
     //@Test public void exprStrJoin()      { test("fn:string-join('a', 'b')", NodeValue.makeString("ab")) ; }
     
     @Test public void exprSameTerm1()     { test("sameTerm(1,1)",           TRUE) ; }


[07/11] jena git commit: Implemented adujst-time-to-timezone

Posted by an...@apache.org.

Implemented adujst-time-to-timezone

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

Branch: refs/heads/master
Commit: 739a2a39d3c32c3b41a5c6f4095004492cb96d86
Parents: 5dcb82b
Author: ales004 <ci...@hotmail.com>
Authored: Sat Jun 4 20:37:25 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Sat Jun 4 20:37:25 2016 +0200

----------------------------------------------------------------------
 .../jena/sparql/expr/nodevalue/XSDFuncOp.java   |  8 +++++--
 .../jena/sparql/function/StandardFunctions.java |  1 +
 .../apache/jena/sparql/expr/TestFunctions.java  | 22 ++++++++++++++++++++
 3 files changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/739a2a39/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
index f00d564..785817f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
@@ -1556,8 +1556,8 @@ public class XSDFuncOp
         if(nv1 == null)
             return null;
 
-        if(!nv1.isDateTime() && !nv1.isDate()){
-            throw new ExprEvalException("Not a valid date or datetime:"+nv1);
+        if(!nv1.isDateTime() && !nv1.isDate() && !nv1.isTime()){
+            throw new ExprEvalException("Not a valid date, datetime or time:"+nv1);
         }
 
         XMLGregorianCalendar calValue = nv1.getDateTime();
@@ -1575,6 +1575,8 @@ public class XSDFuncOp
                     calValue.setTimezone(DatatypeConstants.FIELD_UNDEFINED);
                     if(nv1.isDateTime())
                         return NodeValue.makeDateTime(calValue);
+                    else if(nv1.isTime())
+                        return NodeValue.makeNode(calValue.toXMLFormat(),XSDDatatype.XSDtime);
                     else
                         return NodeValue.makeDate(calValue);
                 }
@@ -1595,6 +1597,8 @@ public class XSDFuncOp
         calValue.setTimezone(tzOffset);
         if(nv1.isDateTime())
             return NodeValue.makeDateTime(calValue);
+        else if(nv1.isTime())
+            return NodeValue.makeNode(calValue.toXMLFormat(),XSDDatatype.XSDtime);
         else
             return NodeValue.makeDate(calValue);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/739a2a39/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
index adecc95..81ed75c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
@@ -168,6 +168,7 @@ public class StandardFunctions
 //        9.6.2 fn:adjust-date-to-timezone
         add(registry, xfn+"adjust-date-to-timezone",  FN_AdjustDatetimeToTimezone.class) ;
 //        9.6.3 fn:adjust-time-to-timezone
+        add(registry, xfn+"adjust-time-to-timezone",  FN_AdjustDatetimeToTimezone.class) ;
 //        9.8.1 fn:format-dateTime
 //        9.8.2 fn:format-date
 //        9.8.3 fn:format-time

http://git-wip-us.apache.org/repos/asf/jena/blob/739a2a39/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
index f0f252e..1830c5e 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java
@@ -396,6 +396,28 @@ public class TestFunctions
     @Test public void exprAdjustDateToTz_05(){test("fn:adjust-date-to-timezone('2002-03-07'^^xsd:date,'')",NodeValue.makeDate("2002-03-07"));}
 
     @Test public void exprAdjustDateToTz_06(){test("fn:adjust-date-to-timezone('2002-03-07-07:00'^^xsd:date,'')",NodeValue.makeDate("2002-03-07"));}
+
+    @Test public void exprAdjustTimeToTz_01(){
+        testEqual(
+                "fn:adjust-time-to-timezone('10:00:00'^^xsd:time)",
+                "fn:adjust-time-to-timezone('10:00:00'^^xsd:time,'"+getDynamicDurationString()+"'^^xsd:dayTimeDuration)");
+    }
+
+    @Test public void exprAdjustTimeToTz_02(){
+        testEqual(
+                "fn:adjust-time-to-timezone('10:00:00-07:00'^^xsd:time)",
+                "fn:adjust-time-to-timezone('10:00:00-07:00'^^xsd:time,'"+getDynamicDurationString()+"'^^xsd:dayTimeDuration)");
+    }
+
+    @Test public void exprAdjustTimeToTz_03(){test("fn:adjust-time-to-timezone('10:00:00'^^xsd:time,'-PT10H'^^xsd:dayTimeDuration)",NodeValue.makeNode("10:00:00-10:00",XSDDatatype.XSDtime));}
+
+    @Test public void exprAdjustTimeToTz_04(){test("fn:adjust-time-to-timezone('10:00:00-07:00'^^xsd:time,'-PT10H'^^xsd:dayTimeDuration)",NodeValue.makeNode("07:00:00-10:00",XSDDatatype.XSDtime));}
+
+    @Test public void exprAdjustTimeToTz_05(){test("fn:adjust-time-to-timezone('10:00:00'^^xsd:time,'')",NodeValue.makeNode("10:00:00",XSDDatatype.XSDtime));}
+
+    @Test public void exprAdjustTimeToTz_06(){test("fn:adjust-time-to-timezone('10:00:00-07:00'^^xsd:time,'')",NodeValue.makeNode("10:00:00",XSDDatatype.XSDtime));}
+
+    @Test public void exprAdjustTimeToTz_07(){test("fn:adjust-time-to-timezone('10:00:00-07:00'^^xsd:time,'PT10H'^^xsd:dayTimeDuration)",NodeValue.makeNode("03:00:00+10:00",XSDDatatype.XSDtime));}
     //@Test public void exprStrJoin()      { test("fn:string-join('a', 'b')", NodeValue.makeString("ab")) ; }
     
     @Test public void exprSameTerm1()     { test("sameTerm(1,1)",           TRUE) ; }


[06/11] jena git commit: Reverted changes made to the dtGetTimezone function.

Posted by an...@apache.org.

Reverted changes made to the dtGetTimezone function.

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

Branch: refs/heads/master
Commit: 5dcb82b67a20e56d1e9476e34c288b36eec69152
Parents: 77ddf08
Author: ales004 <ci...@hotmail.com>
Authored: Fri Jun 3 21:00:18 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Fri Jun 3 21:00:18 2016 +0200

----------------------------------------------------------------------
 .../apache/jena/sparql/expr/nodevalue/XSDFuncOp.java    | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/5dcb82b6/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
index 861b388..f00d564 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java
@@ -1423,9 +1423,10 @@ public class XSDFuncOp
         return NodeValue.makeString(dts.timezone) ;
     }
 
-    private static NodeValue fromTimezoneToDuration(DateTimeStruct dts){
+    public static NodeValue dtGetTimezone(NodeValue nv) {
+        DateTimeStruct dts = parseAnyDT(nv) ;
         if ( dts == null || dts.timezone == null )
-            return null;
+            throw new ExprEvalException("Not a datatype with a timezone: " + nv) ;
         if ( "".equals(dts.timezone) )
             return null ;
         if ( "Z".equals(dts.timezone) ) {
@@ -1456,13 +1457,6 @@ public class XSDFuncOp
         return NodeValue.makeNode(sb.toString(), null, XSDDatatype.XSD + "#dayTimeDuration") ;
     }
 
-    public static NodeValue dtGetTimezone(NodeValue nv) {
-        DateTimeStruct dts = parseAnyDT(nv) ;
-        if ( dts == null || dts.timezone == null )
-            throw new ExprEvalException("Not a datatype with a timezone: " + nv) ;
-        return fromTimezoneToDuration(dts);
-    }
-
     private static void digitsTwo(String s, int idx, StringBuilder sb, char indicator) {
         if ( s.charAt(idx) == '0' ) {
             idx++ ;


[04/11] jena git commit: Merge remote-tracking branch 'upstream/master'

Posted by an...@apache.org.
Merge remote-tracking branch 'upstream/master'


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

Branch: refs/heads/master
Commit: d786344dca85fcedeaa43ae7b211621fa9998afc
Parents: 8de4216 c6ad4fc
Author: ales004 <ci...@hotmail.com>
Authored: Fri Jun 3 20:43:31 2016 +0200
Committer: ales004 <ci...@hotmail.com>
Committed: Fri Jun 3 20:43:31 2016 +0200

----------------------------------------------------------------------
 .../jena/sparql/algebra/table/Table1.java       |   2 +-
 .../jena/sparql/engine/main/JoinClassifier.java |  10 +-
 .../jena/sparql/engine/main/VarFinder.java      |  22 +-
 .../org/apache/jena/sparql/expr/E_Call.java     |   4 +-
 .../org/apache/jena/sparql/expr/ExprNode.java   |   1 -
 .../jena/sparql/function/library/eval.java      |  43 +-
 .../jena/sparql/sse/writers/WriterExpr.java     | 105 ++--
 .../jena/sparql/sse/writers/WriterOp.java       | 502 ++++++++-----------
 .../jena/sparql/algebra/TestClassify.java       |   7 +-
 .../org/apache/jena/atlas/lib/SetUtils.java     |  15 +
 .../org/apache/jena/atlas/lib/TestSetUtils.java |  48 +-
 jena-cmds/src/main/java/arq/qparse.java         |  14 +-
 12 files changed, 363 insertions(+), 410 deletions(-)
----------------------------------------------------------------------