You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by st...@apache.org on 2021/04/03 07:31:10 UTC

[openjpa] branch master updated (53cc83e -> ab8090f)

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

struberg pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/openjpa.git.


    from 53cc83e  OPENJPA-1303 "KEY" is also a reserved word for columns
     new 7622526  OPENJPA-2851 simplify comparison
     new ab8090f  OPENJPA-2856 improve MariaDB TIME handling

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


Summary of changes:
 .../apache/openjpa/jdbc/sql/MariaDBDictionary.java | 23 ++++++++++++++++++++++
 .../java/org/apache/openjpa/kernel/Filters.java    | 10 +++++-----
 .../TestTemporalTypeQueryParameterBinding.java     |  2 +-
 pom.xml                                            |  4 ++--
 4 files changed, 31 insertions(+), 8 deletions(-)

[openjpa] 01/02: OPENJPA-2851 simplify comparison

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

struberg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openjpa.git

commit 76225267d90f9abe559dc63a7f5f74a1aa5bcd93
Author: Mark Struberg <st...@apache.org>
AuthorDate: Fri Apr 2 20:46:41 2021 +0200

    OPENJPA-2851 simplify comparison
    
    since java.time classes are final we can also use == instead of isAssignableFrom
---
 .../src/main/java/org/apache/openjpa/kernel/Filters.java       | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Filters.java b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Filters.java
index ac6091f..d9e8c22 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Filters.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Filters.java
@@ -1075,11 +1075,11 @@ public class Filters {
              || Time.class.isAssignableFrom(c)
              || Timestamp.class.isAssignableFrom(c)
              || Calendar.class.isAssignableFrom(c)
-             || LocalDate.class.isAssignableFrom(c)
-             || LocalDateTime.class.isAssignableFrom(c)
-             || LocalTime.class.isAssignableFrom(c)
-             || OffsetTime.class.isAssignableFrom(c)
-             || OffsetDateTime.class.isAssignableFrom(c));
+             || LocalDate.class == c  // java.time classes are final, so we can compare with ==
+             || LocalDateTime.class == c
+             || LocalTime.class == c
+             || OffsetTime.class ==c
+             || OffsetDateTime.class == c);
     }
 
     public static Object getDefaultForNull(Class<?> nType) {

[openjpa] 02/02: OPENJPA-2856 improve MariaDB TIME handling

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

struberg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openjpa.git

commit ab8090f5566c68fd3d46600158527de14ce622f2
Author: Mark Struberg <st...@apache.org>
AuthorDate: Sat Apr 3 08:42:28 2021 +0200

    OPENJPA-2856 improve MariaDB TIME handling
    
    * java.sql.Time parameters must be on date Jan 1st 1970, otherwise MariaDB won't find anything in the DB
    * from > 10 onwards MariaDB supports up to 6 fractions in TIME as well.
---
 .../apache/openjpa/jdbc/sql/MariaDBDictionary.java | 23 ++++++++++++++++++++++
 .../TestTemporalTypeQueryParameterBinding.java     |  2 +-
 pom.xml                                            |  4 ++--
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MariaDBDictionary.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MariaDBDictionary.java
index c377954..30adc89 100644
--- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MariaDBDictionary.java
+++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MariaDBDictionary.java
@@ -20,11 +20,15 @@ package org.apache.openjpa.jdbc.sql;
 
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Time;
 import java.sql.Types;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collection;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -196,6 +200,13 @@ public class MariaDBDictionary extends DBDictionary {
             timestampTypeName = "DATETIME{0}";
             fixedSizeTypeNameSet.remove(timestampTypeName);
             fractionalTypeNameSet.add(timestampTypeName);
+
+            // also TIME type now has optional fraction digits
+
+            if (dateFractionDigits > 0 ) {
+                timeTypeName = "TIME{0}";
+                fractionalTypeNameSet.add(timeTypeName);
+            }
         }
     }
 
@@ -516,4 +527,16 @@ public class MariaDBDictionary extends DBDictionary {
         }
         buf.append(")");
     }
+
+    @Override
+    public void setTime(PreparedStatement stmnt, int idx, Time val, Calendar cal, Column col) throws SQLException {
+        // nail down to Jan 1st 1970, because MariaDB uses getTime LONG  and freaks out.
+        final Date date = new Date(val.getTime());
+        date.setYear(70);
+        date.setMonth(0);
+        date.setDate(1);
+        val = new Time(date.getTime());
+
+        super.setTime(stmnt, idx, val, cal, col);
+    }
 }
diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestTemporalTypeQueryParameterBinding.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestTemporalTypeQueryParameterBinding.java
index 923c19d..634c7c7 100644
--- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestTemporalTypeQueryParameterBinding.java
+++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestTemporalTypeQueryParameterBinding.java
@@ -67,6 +67,7 @@ public class TestTemporalTypeQueryParameterBinding extends SingleEMFTestCase {
                 "openjpa.jdbc.DBDictionary", "(dateFractionDigits=6)",
                 TimeKeeper.class, TimeEntity.class);
         em = emf.createEntityManager();
+        em.getTransaction().begin();
 
         TimeKeeper pc = new TimeKeeper();
         pc.setDate(VALUE_DATE);
@@ -83,7 +84,6 @@ public class TestTemporalTypeQueryParameterBinding extends SingleEMFTestCase {
         te.setUDate2Time(VALUE_DATE);
         te.setUDate2Timestamp(VALUE_DATE);
 
-        em.getTransaction().begin();
         em.persist(pc);
         em.persist(te);
         em.getTransaction().commit();
diff --git a/pom.xml b/pom.xml
index 6cc2591..139b31f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,7 +77,7 @@
         <derby.version>10.14.2.0</derby.version>
         <hsqldb.version>2.4.1</hsqldb.version>
         <mysql.connector.version>5.1.47</mysql.connector.version>
-        <mariadb.connector.version>2.2.0</mariadb.connector.version>
+        <mariadb.connector.version>2.7.2</mariadb.connector.version>
         <postgresql.connector.version>42.2.9</postgresql.connector.version>
         <mssql.connector.version>9.2.1.jre8</mssql.connector.version>
 
@@ -718,7 +718,7 @@
                 <dbcp.maxIdle>5</dbcp.maxIdle>
                 <dbcp.minIdle>0</dbcp.minIdle>
 
-                <mariadb.server.version>10.3</mariadb.server.version>
+                <mariadb.server.version>10.5</mariadb.server.version>
             </properties>
 
             <build>