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 2019/01/29 13:53:16 UTC
[openjpa] 05/05: OPENJPA-2713 add LocalDate support for Oracle DB
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 be62c5a1230e73902ace4d7056a2b6287d10105a
Author: Mark Struberg <st...@apache.org>
AuthorDate: Tue Jan 29 13:02:05 2019 +0100
OPENJPA-2713 add LocalDate support for Oracle DB
Oracle does still not support native LocalDate, etc in their JDBC driver.
So we have to treat it like the old datatypes.
---
.../apache/openjpa/jdbc/sql/OracleDictionary.java | 30 +++++++++++++++++++---
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
index 79190cb..b58b55e 100644
--- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
+++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
@@ -34,6 +34,11 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.sql.Types;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -192,6 +197,7 @@ public class OracleDictionary
varbinaryTypeName = "BLOB";
longVarbinaryTypeName = "BLOB";
timeTypeName = "DATE";
+ timeWithZoneTypeName = "DATE";
varcharTypeName = "VARCHAR2{0}";
fixedSizeTypeNameSet.addAll(Arrays.asList(new String[]{
"LONG RAW", "RAW", "LONG", "REF",
@@ -540,8 +546,9 @@ public class OracleDictionary
*/
private boolean requiresSubselectForRange(long start, long end,
boolean distinct, SQLBuffer order) {
- if (!isUsingRange(start, end))
- return false;
+ if (!isUsingRange(start, end)) {
+ return false;
+ }
return isUsingOffset(start) || distinct || isUsingOrderBy(order);
}
@@ -763,8 +770,7 @@ public class OracleDictionary
* Convert an object from its proprietary Oracle type to the standard
* Java type.
*/
- private static Object convertFromOracleType(Object obj,
- String convertMethod)
+ private static Object convertFromOracleType(Object obj, String convertMethod)
throws SQLException {
try {
Method m = obj.getClass().getMethod(convertMethod, (Class[]) null);
@@ -820,6 +826,22 @@ public class OracleDictionary
return cols;
}
+ /**
+ * Oracle JDBC is still Java7 at most :(
+ */
+ @Override
+ public int getPreferredType(int type) {
+ switch (type) {
+ case Types.TIME_WITH_TIMEZONE:
+ return Types.TIME;
+ case Types.TIMESTAMP_WITH_TIMEZONE:
+ return Types.TIMESTAMP;
+ default:
+ return type;
+ }
+ }
+
+
@Override
public PrimaryKey[] getPrimaryKeys(DatabaseMetaData meta,
String catalog, String schemaName, String tableName, Connection conn)