diff --git a/src/main/java/eu/hbp/mip/utils/DataUtil.java b/src/main/java/eu/hbp/mip/utils/DataUtil.java index 87ff932f885c5fde24d7b40773b44f16130f1602..4ce7416bcff58acd7a71e631db0a76e6465489ff 100644 --- a/src/main/java/eu/hbp/mip/utils/DataUtil.java +++ b/src/main/java/eu/hbp/mip/utils/DataUtil.java @@ -33,25 +33,41 @@ public class DataUtil { for (String var : vars) { JsonArray currentVarData = new JsonArray(); - int nbRows = (int) countDatasetRows(); - if (nbRows < 1) { return data; } - - int nb_samples = Math.min(nbRows, MAX_NB_SAMPLES); - int samplingPercentage = 100 * nb_samples / nbRows; - List<Object> queryResult = jdbcTemplate.queryForList( - "SELECT " + var + " FROM "+featuresMainTable+" " + - "TABLESAMPLE SYSTEM ("+ samplingPercentage +") REPEATABLE ( "+ TABLESAMPLE_SEED +" )", Object.class); - for (Object value : queryResult) - { - String strValue = String.valueOf(value); - try { - double numValue = Double.parseDouble(strValue); - currentVarData.add(numValue); - } catch (NumberFormatException e2) { - currentVarData.add(strValue); + long nbRows = countDatasetRows(); + + if (nbRows >= 1) { + + long nb_samples = Math.min(nbRows, MAX_NB_SAMPLES); + int samplingPercentage = (int) (100 * nb_samples / nbRows); + List<Object> queryResult = jdbcTemplate.queryForList( + String.format("SELECT %s FROM %s TABLESAMPLE SYSTEM (%d) REPEATABLE (%d)", + var, featuresMainTable, samplingPercentage, TABLESAMPLE_SEED), + Object.class); + for (Object value : queryResult) { + if (value == null) { + currentVarData.add((String) null); + } else { + if (value instanceof Double) { + currentVarData.add((Double) value); + } else if (value instanceof Float) { + currentVarData.add((Float) value); + } else if (value instanceof Integer) { + currentVarData.add((Integer) value); + } else if (value instanceof Long) { + currentVarData.add((Long) value); + } else { + String strValue = String.valueOf(value); + try { + double numValue = Double.parseDouble(strValue); + currentVarData.add(numValue); + } catch (NumberFormatException e2) { + currentVarData.add(strValue); + } + } + } } + data.add(var, currentVarData); } - data.add(var, currentVarData); } return data;