From 86b6f9ee96d3e6037c1063c3862c455822e7e256 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Fri, 2 Dec 2011 15:03:03 +0100 Subject: [PATCH] Fix DaoTestCase for Oracle We didn't succeed in using java.sql.DatabaseMetaData#getTables() on Oracle. --- .../org/sonar/persistence/DatabaseUtils.java | 59 +++++++++++++++++++ .../sonar/persistence/dao/DaoTestCase.java | 34 ++--------- .../main/webapp/WEB-INF/db/migrate/README.txt | 2 +- 3 files changed, 66 insertions(+), 29 deletions(-) create mode 100644 sonar-core/src/main/java/org/sonar/persistence/DatabaseUtils.java diff --git a/sonar-core/src/main/java/org/sonar/persistence/DatabaseUtils.java b/sonar-core/src/main/java/org/sonar/persistence/DatabaseUtils.java new file mode 100644 index 00000000000..15dc2a4d061 --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/persistence/DatabaseUtils.java @@ -0,0 +1,59 @@ +package org.sonar.persistence; + +/** + * @since 2.13 + */ +public final class DatabaseUtils { + private DatabaseUtils() { + } + + /** + * List of all the tables. + * This list is hardcoded because we didn't succeed in using java.sql.DatabaseMetaData#getTables() in the same way + * for all the supported databases, particularly due to Oracle results. + */ + public static final String[] TABLE_NAMES = { + "active_dashboards", + "active_filters", + "active_rules", + "active_rule_changes", + "active_rule_parameters", + "active_rule_param_changes", + "alerts", + "characteristics", + "characteristic_edges", + "characteristic_properties", + "criteria", + "dashboards", + "dependencies", + "duplications_index", + "events", + "filters", + "filter_columns", + "groups", + "groups_users", + "group_roles", + "manual_measures", + "measure_data", + "metrics", + "notifications", + "projects", + "project_links", + "project_measures", + "properties", + "quality_models", + "reviews", + "review_comments", + "rules", + "rules_categories", + "rules_parameters", + "rules_profiles", + "rule_failures", + "schema_migrations", + "snapshots", + "snapshot_sources", + "users", + "user_roles", + "widgets", + "widget_properties"}; +} diff --git a/sonar-core/src/test/java/org/sonar/persistence/dao/DaoTestCase.java b/sonar-core/src/test/java/org/sonar/persistence/dao/DaoTestCase.java index 045a6474d3d..f515d87f549 100644 --- a/sonar-core/src/test/java/org/sonar/persistence/dao/DaoTestCase.java +++ b/sonar-core/src/test/java/org/sonar/persistence/dao/DaoTestCase.java @@ -19,7 +19,6 @@ */ package org.sonar.persistence.dao; -import com.google.common.collect.Lists; import org.apache.commons.io.IOUtils; import org.dbunit.Assertion; import org.dbunit.DataSourceDatabaseTester; @@ -34,15 +33,13 @@ import org.dbunit.operation.DatabaseOperation; import org.junit.*; import org.slf4j.LoggerFactory; import org.sonar.api.config.Settings; -import org.sonar.persistence.Database; -import org.sonar.persistence.DefaultDatabase; -import org.sonar.persistence.InMemoryDatabase; -import org.sonar.persistence.MyBatis; +import org.sonar.persistence.*; import java.io.InputStream; import java.io.StringWriter; -import java.sql.*; -import java.util.List; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; import java.util.Map; import static org.junit.Assert.fail; @@ -94,32 +91,13 @@ public abstract class DaoTestCase { } } - private List listTables() throws SQLException { - Connection connection = myBatis.openSession().getConnection(); - DatabaseMetaData meta = connection.getMetaData(); - Statement statement = connection.createStatement(); - - ResultSet res = meta.getTables(null, database.getSchema(), null, new String[]{"TABLE"}); - List tables = Lists.newArrayList(); - while (res.next()) { - String tableName = res.getString("TABLE_NAME"); - tables.add(tableName.toLowerCase()); - } - res.close(); - statement.close(); - connection.close(); - return tables; - } - private void truncateTables() throws SQLException { - List tables = listTables(); Connection connection = myBatis.openSession().getConnection(); Statement statement = connection.createStatement(); - for (String table : tables) { + LoggerFactory.getLogger(getClass()).info("Truncate tables and reset primary keys"); + for (String table : DatabaseUtils.TABLE_NAMES) { // 1. truncate - String truncateCommand = databaseCommands.truncate(table); - LoggerFactory.getLogger(getClass()).info("Execute: " + truncateCommand); statement.executeUpdate(truncateCommand); connection.commit(); diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/README.txt b/sonar-server/src/main/webapp/WEB-INF/db/migrate/README.txt index 65920ee80ca..a02204611a2 100644 --- a/sonar-server/src/main/webapp/WEB-INF/db/migrate/README.txt +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/README.txt @@ -6,7 +6,7 @@ HOW TO ADD A MIGRATION + sonar-core/src/main/resources/org/sonar/persistence/rows-derby.sql : - add "INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('')" * Update the migration id defined in sonar-core/src/main/java/org/sonar/jpa/entity/SchemaMigration.java - +* If a table is addded or removed, then edit sonar-core/src/main/java/org/sonar/persistence/DatabaseUtils.java -- 2.39.5