A try to speed up database resetting for testcases.
authorFelix Dörre <felix@dogcraft.de>
Thu, 28 Aug 2014 16:04:45 +0000 (18:04 +0200)
committerFelix Dörre <felix@dogcraft.de>
Thu, 28 Aug 2014 16:10:16 +0000 (18:10 +0200)
tests/org/cacert/gigi/testUtils/ManagedTest.java
util/org/cacert/gigi/util/DatabaseManager.java

index 637b272aaed9dcba7e3681e10b1e8eab80f6607b..ed5f1eec2c831c4fbb5ac5511dcc3004ef33f0ef 100644 (file)
@@ -150,12 +150,12 @@ public class ManagedTest {
     }
 
     public static void purgeDatabase() throws SQLException, IOException {
-        System.out.print("... purging Database");
+        System.out.print("... resetting Database");
         long ms = System.currentTimeMillis();
         try {
             DatabaseManager.run(new String[] {
                     testProps.getProperty("sql.driver"), testProps.getProperty("sql.url"), testProps.getProperty("sql.user"), testProps.getProperty("sql.password")
-            });
+            }, true);
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         }
index 9fe3f5fb3ec774416152fe2a5433193b667350a6..457e11ff27b0c42a3a92e89f42422eba917aedef 100644 (file)
@@ -9,6 +9,8 @@ import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class DatabaseManager {
 
@@ -28,28 +30,34 @@ public class DatabaseManager {
             System.err.println("Usage: com.mysql.jdbc.Driver jdbc:mysql://localhost/cacert user password");
             return;
         }
-        run(args);
+        run(args, false);
     }
 
-    public static void run(String[] args) throws ClassNotFoundException, SQLException, IOException {
+    public static void run(String[] args, boolean truncate) throws ClassNotFoundException, SQLException, IOException {
         Class.forName(args[0]);
         Connection conn = DriverManager.getConnection(args[1], args[2], args[3]);
         Statement stmt = conn.createStatement();
-        addFile(stmt, new File("doc/tableStructure.sql"));
+        addFile(stmt, new File("doc/tableStructure.sql"), truncate);
         File localData = new File("doc/sampleData.sql");
         if (localData.exists()) {
-            addFile(stmt, localData);
+            addFile(stmt, localData, false);
         }
         stmt.executeBatch();
         stmt.close();
     }
 
-    private static void addFile(Statement stmt, File f) throws IOException, SQLException {
+    private static void addFile(Statement stmt, File f, boolean truncate) throws IOException, SQLException {
         String sql = readFile(f);
         String[] stmts = sql.split(";");
+        Pattern p = Pattern.compile("\\s*DROP TABLE IF EXISTS `([^`]+)`");
         for (String string : stmts) {
-            if ( !string.trim().equals("")) {
-                stmt.addBatch(string);
+            Matcher m = p.matcher(string);
+            if (m.matches()) {
+                String sql2 = "TRUNCATE `" + m.group(1) + "`";
+                stmt.addBatch(sql2);
+            }
+            if ( !string.trim().equals("") && ( !truncate || string.contains("INSERT"))) {
+                stmt.addBatch(string.replace("ENGINE=Memory", ""));
             }
         }
     }