package com.querydsl.example.sql.repository;
import com.querydsl.example.sql.guice.GuiceTestRunner;
import com.querydsl.example.sql.guice.Transactional;
import org.junit.Before;
import org.junit.runner.RunWith;
import javax.inject.Inject;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@RunWith(GuiceTestRunner.class)
public abstract class AbstractPersistenceTest {
@Inject
private DataSource dataSource;
@Before
@Transactional
public void before() {
try (Connection connection = dataSource.getConnection()) {
List<String> tables = new ArrayList<String>();
DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, null,
new String[] { "TABLE" });
try {
while (rs.next()) {
tables.add(rs.getString("TABLE_NAME"));
}
} finally {
rs.close();
}
java.sql.Statement stmt = connection.createStatement();
try {
stmt.execute("SET REFERENTIAL_INTEGRITY FALSE");
for (String table : tables) {
stmt.execute("TRUNCATE TABLE " + table);
}
stmt.execute("SET REFERENTIAL_INTEGRITY TRUE");
} finally {
stmt.close();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}