]> source.dussan.org Git - jackcess.git/commitdiff
Add ImportUtil.toColumns to enable more advanced Table creation implementations ...
authorJames Ahlborn <jtahlborn@yahoo.com>
Fri, 25 May 2012 01:55:12 +0000 (01:55 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Fri, 25 May 2012 01:55:12 +0000 (01:55 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@627 f203690c-595d-4dc9-a70b-905162fa7fd2

src/changes/changes.xml
src/java/com/healthmarketscience/jackcess/ImportUtil.java

index 9e81c4a8174055e339ac8be1218ef66fbb3e8860..389314bdbe94f491cd04562565537a0736f9c3e1 100644 (file)
@@ -8,6 +8,10 @@
       <action dev="jahlborn" type="update" issue="3523179">
         Add osgi header information to the manifest.
       </action>
+      <action dev="jahlborn" type="update" issue="3523181">
+        Add ImportUtil.toColumns to enable more advanced Table creation
+        implementations.
+      </action>
       <action dev="jahlborn" type="fix" issue="3529534">
         Fix NPE when running unit tests with db format MSISAM.
       </action>
index 28aa9ea5ae8b2ea4fd89f542f0160b0c97dbb46d..0fc18028bb7e718c2eea17bfaacca4db74b7f14c 100644 (file)
@@ -61,6 +61,44 @@ public class ImportUtil
   
   private ImportUtil() {}
 
+  /**
+   * Returns a List of Column instances converted from the given
+   * ResultSetMetaData (this is the same method used by the various {@code
+   * importResultSet()} methods).
+   *
+   * @return a List of Columns
+   */
+  public static List<Column> toColumns(ResultSetMetaData md)
+    throws SQLException
+  {
+      List<Column> columns = new LinkedList<Column>();
+      for (int i = 1; i <= md.getColumnCount(); i++) {
+        Column column = new Column();
+        column.setName(Database.escapeIdentifier(md.getColumnName(i)));
+        int lengthInUnits = md.getColumnDisplaySize(i);
+        column.setSQLType(md.getColumnType(i), lengthInUnits);
+        DataType type = column.getType();
+        // we check for isTrueVariableLength here to avoid setting the length
+        // for a NUMERIC column, which pretends to be var-len, even though it
+        // isn't
+        if(type.isTrueVariableLength() && !type.isLongValue()) {
+          column.setLengthInUnits((short)lengthInUnits);
+        }
+        if(type.getHasScalePrecision()) {
+          int scale = md.getScale(i);
+          int precision = md.getPrecision(i);
+          if(type.isValidScale(scale)) {
+            column.setScale((byte)scale);
+          }
+          if(type.isValidPrecision(precision)) {
+            column.setPrecision((byte)precision);
+          }
+        }
+        columns.add(column);
+      }
+      return columns;
+  }
+
   /**
    * Copy an existing JDBC ResultSet into a new table in this database.
    * <p>
@@ -129,34 +167,7 @@ public class ImportUtil
     name = Database.escapeIdentifier(name);
     Table table = null;
     if(!useExistingTable || ((table = db.getTable(name)) == null)) {
-      
-
-      List<Column> columns = new LinkedList<Column>();
-      for (int i = 1; i <= md.getColumnCount(); i++) {
-        Column column = new Column();
-        column.setName(Database.escapeIdentifier(md.getColumnName(i)));
-        int lengthInUnits = md.getColumnDisplaySize(i);
-        column.setSQLType(md.getColumnType(i), lengthInUnits);
-        DataType type = column.getType();
-        // we check for isTrueVariableLength here to avoid setting the length
-        // for a NUMERIC column, which pretends to be var-len, even though it
-        // isn't
-        if(type.isTrueVariableLength() && !type.isLongValue()) {
-          column.setLengthInUnits((short)lengthInUnits);
-        }
-        if(type.getHasScalePrecision()) {
-          int scale = md.getScale(i);
-          int precision = md.getPrecision(i);
-          if(type.isValidScale(scale)) {
-            column.setScale((byte)scale);
-          }
-          if(type.isValidPrecision(precision)) {
-            column.setPrecision((byte)precision);
-          }
-        }
-        columns.add(column);
-      }
-
+      List<Column> columns = toColumns(md);
       table = createUniqueTable(db, name, columns, md, filter);
     }