]> source.dussan.org Git - jackcess.git/commitdiff
Add newer sql type to access type mappings if the jvm supports them. fixes #113
authorJames Ahlborn <jtahlborn@yahoo.com>
Wed, 26 Nov 2014 17:14:36 +0000 (17:14 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Wed, 26 Nov 2014 17:14:36 +0000 (17:14 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@899 f203690c-595d-4dc9-a70b-905162fa7fd2

src/changes/changes.xml
src/main/java/com/healthmarketscience/jackcess/DataType.java

index f27367859678cd820cb3e2e146939091d08d5489..e745224532a97156f4fa965d7cb04dd7fdd14743 100644 (file)
@@ -4,6 +4,11 @@
     <author email="javajedi@users.sf.net">Tim McCune</author>
   </properties>
   <body>
+    <release version="2.0.8" date="TBD">
+      <action dev="jahlborn" type="fix" system="SourceForge2" issue="113">
+        Add newer sql type to access type mappings if the jvm supports them.
+      </action>
+    </release>
     <release version="2.0.7" date="2014-11-22">
       <action dev="jahlborn" type="fix" system="SourceForge2" issue="111">
         Unicode compression support was not correct for all possibly
index e115cdf1cde50003e7ccdf74c92d2faa96287283..ffd5bf4cf8199abf933c1d74108ce45264a48735 100644 (file)
@@ -200,6 +200,14 @@ public enum DataType {
     ALT_SQL_TYPES.put(Types.VARCHAR, MEMO);
     ALT_SQL_TYPES.put(Types.VARBINARY, OLE);
     ALT_SQL_TYPES.put(Types.BINARY, OLE);
+
+    // add newer sql types if available in this jvm
+    addNewSqlType("NCHAR", TEXT, null);
+    addNewSqlType("NVARCHAR", TEXT, MEMO);
+    addNewSqlType("LONGNVARCHAR", MEMO, null);
+    addNewSqlType("NCLOB", MEMO, null);
+    addNewSqlType("TIME_WITH_TIMEZONE", SHORT_DATE_TIME, null);
+    addNewSqlType("TIMESTAMP_WITH_TIMEZONE", SHORT_DATE_TIME, null);
   }
   
   private static Map<Byte, DataType> DATA_TYPES = new HashMap<Byte, DataType>();
@@ -481,4 +489,23 @@ public enum DataType {
     return rtn;
   }
 
+  /**
+   * Adds mappings for a sql type which was added after jdk 1.5 (using
+   * reflection).
+   */
+  private static void addNewSqlType(String typeName, DataType type, 
+                                    DataType altType)
+  {
+    try {
+      java.lang.reflect.Field sqlTypeField = Types.class.getField(typeName);
+      Integer value = (Integer)sqlTypeField.get(null);
+      SQL_TYPES.put(value, type);
+      if(altType != null) {
+        ALT_SQL_TYPES.put(value, altType);
+      }
+    } catch(Exception ignored) {
+      // must not be available
+    }
+  }
+
 }