]> source.dussan.org Git - jackcess.git/commitdiff
Better column type translation for very large MEMO/OLE types in the Database.copyTabl...
authorJames Ahlborn <jtahlborn@yahoo.com>
Fri, 18 Jul 2008 03:25:19 +0000 (03:25 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Fri, 18 Jul 2008 03:25:19 +0000 (03:25 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@360 f203690c-595d-4dc9-a70b-905162fa7fd2

src/changes/changes.xml
src/java/com/healthmarketscience/jackcess/DataType.java
test/src/java/com/healthmarketscience/jackcess/ImportTest.java

index e577cda933d6a2e2770bb575a1c56b5b153c26d2..3d2dcf9f42be1c4e386f5d7d992e3a8bce4443ce 100644 (file)
         Reserve minimum space for memo/ole fields so that greedy inline row
         usage does not cause spurious write failures for wide tables.
       </action>
+      <action dev="jahlborn" type="fix" issue="2018713">
+        Better column type translation for very large MEMO/OLE types in the
+        Database.copyTable logic.
+      </action>
     </release>
     <release version="1.1.15" date="2008-06-27">
       <action dev="jahlborn" type="fix" issue="1998225">
index f648fded230923f15c4c27b534f9990c6b3162db..8e08bec85f2d1e1cafb8a6eff7c08319d0ccdd49 100644 (file)
@@ -377,9 +377,11 @@ public enum DataType {
     // make sure size is reasonable
     int size = lengthInUnits * rtn.getUnitSize();
     if(rtn.isVariableLength() && !rtn.isValidSize(size)) {
-      // try alternate type
+      // try alternate type.  we always accept alternate "long value" types
+      // regardless of the given lengthInUnits
       DataType altRtn = ALT_SQL_TYPES.get(sqlType);
-      if((altRtn != null) && altRtn.isValidSize(size)) {
+      if((altRtn != null) &&
+         (altRtn.isLongValue() || altRtn.isValidSize(size))) {
         // use alternate type
         rtn = altRtn;
       }
index a2a4719557b9929455f6ae6a4d0dc3a3b8ecd957..ad2c8517044600870d2849809d9cd3b025392a6c 100644 (file)
@@ -74,6 +74,7 @@ public class ImportTest extends TestCase
     rs.addColumn(Types.BINARY, "col4", 128, 0, 0);
     rs.addColumn(Types.BINARY, "col5", 512, 0, 0);
     rs.addColumn(Types.NUMERIC, "col6", 0, 7, 15);
+    rs.addColumn(Types.VARCHAR, "col7", Integer.MAX_VALUE, 0, 0);
 
     Database db = create();
     db.copyTable("Test1", (ResultSet)Proxy.newProxyInstance(
@@ -83,7 +84,7 @@ public class ImportTest extends TestCase
 
     Table t = db.getTable("Test1");
     List<Column> columns = t.getColumns();
-    assertEquals(6, columns.size());
+    assertEquals(7, columns.size());
 
     Column c = columns.get(0);
     assertEquals("col1", c.getName());
@@ -116,6 +117,11 @@ public class ImportTest extends TestCase
     assertEquals(7, c.getScale());
     assertEquals(15, c.getPrecision());
     
+    c = columns.get(6);
+    assertEquals("col7", c.getName());
+    assertEquals(DataType.MEMO, c.getType());
+    assertEquals(0, c.getLength());
+
   }