You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ar...@apache.org on 2019/12/12 09:32:33 UTC

[metamodel] 01/02: METAMODEL-82 - Fix integers in double columns

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

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

commit 740fa138ec06bb769fe9a2ac0c7c6a33f92dfdff
Author: Gerard Dellemann <g....@quadient.com>
AuthorDate: Wed Dec 11 15:58:55 2019 +0100

    METAMODEL-82 - Fix integers in double columns
---
 .../org/apache/metamodel/excel/ExcelUtils.java     | 24 +++++++++++-----------
 .../metamodel/excel/ExcelDataContextTest.java      | 10 ++++++---
 2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java b/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java
index 21491ec..ce66480 100644
--- a/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java
+++ b/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java
@@ -275,20 +275,20 @@ final class ExcelUtils {
 
     private static Object evaluateCell(final Workbook workbook, final Cell cell, final ColumnType expectedColumnType) {
         final Object value = getCellValueAsObject(workbook, cell);
-        if (value == null || value.getClass().equals(expectedColumnType.getJavaEquivalentClass())) {
+        if (value == null || value.getClass().equals(expectedColumnType.getJavaEquivalentClass()) || (value
+                .getClass()
+                .equals(Integer.class) && expectedColumnType.getJavaEquivalentClass().equals(Double.class))) {
             return value;
+        } else {
+            if (logger.isWarnEnabled()) {
+                logger
+                        .warn("Cell ({},{}) has the value '{}' of data type '{}', which doesn't match the detected "
+                                + "column's data type '{}'. This cell gets value NULL in the DataSet.", cell
+                                        .getRowIndex(), cell.getColumnIndex(), value, value.getClass().getSimpleName(),
+                                expectedColumnType);
+            }
+            return null;
         }
-
-        // Don't log when an Integer value is in a Double column type
-        if (!(value.getClass().equals(Integer.class) && expectedColumnType
-                .getJavaEquivalentClass()
-                .equals(Double.class)) && logger.isWarnEnabled()) {
-            logger
-                    .warn("Cell ({},{}) has the value '{}' of data type '{}', which doesn't match the detected "
-                            + "column's data type '{}'. This cell gets value NULL in the DataSet.", cell.getRowIndex(),
-                            cell.getColumnIndex(), value, value.getClass().getSimpleName(), expectedColumnType);
-        }
-        return null;
     }
 
     private static String getFormulaCellValue(Workbook workbook, Cell cell) {
diff --git a/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java b/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java
index 7fdfff9..ed37de0 100644
--- a/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java
+++ b/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java
@@ -841,7 +841,11 @@ public class ExcelDataContextTest extends TestCase {
                 .from(table)
                 .select("MIXING_DOUBLE_AND_INT")
                 .execute();
-        IntStream.range(0, 20).forEach(i -> assertTrue(testWrongDatatypeDataSet.next()));
+        IntStream.range(0, 19).forEach(i -> {
+            assertTrue(testWrongDatatypeDataSet.next());
+            assertNotNull(testWrongDatatypeDataSet.getRow().getValue(0));
+        });
+        assertTrue(testWrongDatatypeDataSet.next());
         assertNull(testWrongDatatypeDataSet.getRow().getValue(0));
         assertFalse(testWrongDatatypeDataSet.next());
     }
@@ -919,7 +923,7 @@ public class ExcelDataContextTest extends TestCase {
         final ExcelDataContext dataContext = new ExcelDataContext(copyOf("src/test/resources/different_datatypes.xls"),
                 new ExcelConfiguration(ExcelConfiguration.DEFAULT_COLUMN_NAME_LINE, null, true, false, true, 19));
         final Table table = dataContext.getDefaultSchema().getTable(0);
-        dataContext.executeUpdate(new InsertInto(table).value("INTEGER", 123));
+        dataContext.executeUpdate(new InsertInto(table).value("INTEGER", Integer.valueOf(123)));
         final DataSet dataSet = dataContext.query().from(table).selectAll().where("INTEGER").eq(123).execute();
         assertTrue(dataSet.next());
     }
@@ -936,7 +940,7 @@ public class ExcelDataContextTest extends TestCase {
         final ExcelDataContext dataContext = new ExcelDataContext(copyOf("src/test/resources/different_datatypes.xls"),
                 new ExcelConfiguration(ExcelConfiguration.DEFAULT_COLUMN_NAME_LINE, null, true, false, true, 19));
         final Table table = dataContext.getDefaultSchema().getTable(0);
-        dataContext.executeUpdate(new Update(table).value("INTEGER", 1).value("INTEGER", 123));
+        dataContext.executeUpdate(new Update(table).value("INTEGER", 1).value("INTEGER", Integer.valueOf(123)));
         final DataSet dataSet = dataContext.query().from(table).selectAll().where("INTEGER").eq(123).execute();
         assertTrue(dataSet.next());
     }