From e65588dc9fc539683882a4b52bacb93cfe551d5d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 28 Aug 2014 18:04:45 +0200 Subject: [PATCH] A try to speed up database resetting for testcases. --- .../cacert/gigi/testUtils/ManagedTest.java | 4 ++-- .../org/cacert/gigi/util/DatabaseManager.java | 22 +++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/tests/org/cacert/gigi/testUtils/ManagedTest.java b/tests/org/cacert/gigi/testUtils/ManagedTest.java index 637b272a..ed5f1eec 100644 --- a/tests/org/cacert/gigi/testUtils/ManagedTest.java +++ b/tests/org/cacert/gigi/testUtils/ManagedTest.java @@ -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(); } diff --git a/util/org/cacert/gigi/util/DatabaseManager.java b/util/org/cacert/gigi/util/DatabaseManager.java index 9fe3f5fb..457e11ff 100644 --- a/util/org/cacert/gigi/util/DatabaseManager.java +++ b/util/org/cacert/gigi/util/DatabaseManager.java @@ -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", "")); } } } -- 2.39.2