Merge branch 'master' into release/5.3.2-HI
diff --git a/CHANGES.md b/CHANGES.md
index 730def9..2ab7c90 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,4 +1,5 @@
### Apache MetaModel _WIP_
+ * [METAMODEL-82] - Detect Column Types with Excel datastores
* [METAMODEL-1221] - Upgrade to Elasticsearch 7.3
* Bind Travis build to Trusty distribution to avoid CI build failures.
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 @@
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 @@
.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 @@
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 @@
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());
}