thingsboard-aplcache

Fix SQL upgrade script.

3/1/2018 7:58:57 AM

Details

diff --git a/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java b/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java
index c78ceda..669646f 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java
@@ -45,11 +45,7 @@ public class SqlDbHelper {
     public static Path dumpTableIfExists(Connection conn, String tableName,
                                          String[] columns, String[] defaultValues, String dumpPrefix, boolean printHeader) throws Exception {
 
-        DatabaseMetaData metaData = conn.getMetaData();
-        ResultSet res = metaData.getTables(null, null, tableName,
-                new String[] {"TABLE"});
-        if (res.next()) {
-            res.close();
+        if (tableExists(conn, tableName)) {
             Path dumpFile = Files.createTempFile(dumpPrefix, null);
             Files.deleteIfExists(dumpFile);
             CSVFormat csvFormat = CSV_DUMP_FORMAT;
@@ -61,9 +57,9 @@ public class SqlDbHelper {
                     try (ResultSet tableRes = stmt.executeQuery()) {
                         ResultSetMetaData resMetaData = tableRes.getMetaData();
                         Map<String, Integer> columnIndexMap = new HashMap<>();
-                        for (int i = 0; i < resMetaData.getColumnCount(); i++) {
+                        for (int i = 1; i <= resMetaData.getColumnCount(); i++) {
                             String columnName = resMetaData.getColumnName(i);
-                            columnIndexMap.put(columnName, i);
+                            columnIndexMap.put(columnName.toUpperCase(), i);
                         }
                         while(tableRes.next()) {
                             dumpRow(tableRes, columnIndexMap, columns, defaultValues, csvPrinter);
@@ -77,6 +73,15 @@ public class SqlDbHelper {
         }
     }
 
+    private static boolean tableExists(Connection conn, String tableName) {
+        try (Statement stmt = conn.createStatement()) {
+            stmt.executeQuery("select * from " + tableName + " where 1=0");
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
     public static void loadTable(Connection conn, String tableName, String[] columns, Path sourceFile) throws Exception {
         loadTable(conn, tableName, columns, sourceFile, false);
     }
@@ -89,7 +94,6 @@ public class SqlDbHelper {
             csvFormat = CSV_DUMP_FORMAT.withHeader(columns);
         }
         try (PreparedStatement prepared = conn.prepareStatement(createInsertStatement(tableName, columns))) {
-            prepared.getParameterMetaData();
             try (CSVParser csvParser = new CSVParser(Files.newBufferedReader(sourceFile), csvFormat)) {
                 csvParser.forEach(record -> {
                     try {
@@ -122,13 +126,13 @@ public class SqlDbHelper {
     }
 
     private static String getColumnValue(String column, String defaultValue, Map<String, Integer> columnIndexMap, ResultSet res) {
-        int index = columnIndexMap.containsKey(column) ? columnIndexMap.get(column) : -1;
+        int index = columnIndexMap.containsKey(column.toUpperCase()) ? columnIndexMap.get(column.toUpperCase()) : -1;
         if (index > -1) {
             String str;
             try {
                 Object obj = res.getObject(index);
                 if (obj == null) {
-                    str = "";
+                    return null;
                 } else {
                     str = obj.toString();
                 }