From a930ace8156d60ff72b92ae4d543f87b1c23b71e Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Mon, 26 Jun 2017 19:11:23 +0200
Subject: [PATCH] bugfix

---
 src/main/java/eu/hbp/mip/utils/DataUtil.java | 22 +++++++++++---------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/main/java/eu/hbp/mip/utils/DataUtil.java b/src/main/java/eu/hbp/mip/utils/DataUtil.java
index 2e93bbed2..3c37d97df 100644
--- a/src/main/java/eu/hbp/mip/utils/DataUtil.java
+++ b/src/main/java/eu/hbp/mip/utils/DataUtil.java
@@ -14,7 +14,6 @@ import java.util.List;
 public class DataUtil {
 
     private static final int MAX_NB_SAMPLES = 200;
-    private static final int TABLESAMPLE_SEED = 42;
 
     private JdbcTemplate jdbcTemplate;
     private String featuresMainTable;
@@ -30,22 +29,25 @@ public class DataUtil {
     {
         JsonObject data = new JsonObject();
 
+        if (filters.length() > 0)
+        {
+            filters = String.format("AND %s", filters);
+        }
+
         for (String var : vars) {
             JsonArray currentVarData = new JsonArray();
 
             long nbRows = countDatasetRows();
 
             if (nbRows >= 1) {
-
-                long nb_samples = Math.min(nbRows, MAX_NB_SAMPLES);
-                int samplingPercentage = (int) (100 * nb_samples / nbRows);
-                if (filters.length() > 0) {
-                    filters = "WHERE " + filters;
+                List<Object> queryResult;
+                synchronized(this){
+                    jdbcTemplate.execute("SELECT SETSEED(0.42)");
+                    queryResult = jdbcTemplate.queryForList(
+                            String.format("SELECT %s FROM %s WHERE %s IS NOT NULL %s ORDER BY Random() LIMIT %d",
+                                    var, featuresMainTable, var, filters, MAX_NB_SAMPLES),
+                            Object.class);
                 }
-                List<Object> queryResult = jdbcTemplate.queryForList(
-                        String.format("SELECT %s FROM %s TABLESAMPLE SYSTEM (%d) REPEATABLE (%d) %s",
-                                var, featuresMainTable, samplingPercentage, TABLESAMPLE_SEED, filters),
-                        Object.class);
                 for (Object value : queryResult) {
                     if (value == null) {
                         currentVarData.add((String) null);
-- 
GitLab