package io.ebean;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import org.tests.model.basic.Country;
import org.avaje.agentloader.AgentLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Types;
public class BaseTestCase {
protected static Logger logger = LoggerFactory.getLogger(BaseTestCase.class);
static {
logger.debug("... preStart");
if (!AgentLoader.loadAgentFromClasspath("ebean-agent", "debug=1;packages=com.avaje.tests,org.avaje.test")) {
logger.info("avaje-ebeanorm-agent not found in classpath - not dynamically loaded");
}
}
/**
* Return the generated sql trimming column alias if required.
*/
protected String sqlOf(Query<?> query) {
return trimSql(query.getGeneratedSql(), 0);
}
/**
* Return the generated sql trimming column alias if required.
*/
protected String sqlOf(Query<?> query, int columns) {
return trimSql(query.getGeneratedSql(), columns);
}
/**
* Trim out column alias if required from the generated sql.
*/
protected String trimSql(String sql, int columns) {
for (int i = 0; i <= columns; i++) {
sql = sql.replace(" c" + i + ",", ",");
}
for (int i = 0; i <= columns; i++) {
sql = sql.replace(" c" + i + " ", " ");
}
return sql;
}
/**
* MS SQL Server does not allow setting explicit values on identity columns
* so tests that do this need to be skipped for SQL Server.
*/
public boolean isSqlServer() {
return Platform.SQLSERVER == platform();
}
public boolean isH2() {
return Platform.H2 == platform();
}
public boolean isOracle() {
return Platform.ORACLE == platform();
}
public boolean isPostgres() {
return Platform.POSTGRES == platform();
}
public boolean isMySql() {
return Platform.MYSQL == platform();
}
public boolean isPlatformBooleanNative() {
return Types.BOOLEAN == spiEbeanServer().getDatabasePlatform().getBooleanDbType();
}
public boolean isPlatformOrderNullsSupport() {
return isH2() || isPostgres();
}
/**
* Wait for the L2 cache to propagate changes post-commit.
*/
protected void awaitL2Cache() {
// do nothing, used to thread sleep
}
protected <T> BeanDescriptor<T> getBeanDescriptor(Class<T> cls) {
return spiEbeanServer().getBeanDescriptor(cls);
}
protected Platform platform() {
return spiEbeanServer().getDatabasePlatform().getPlatform();
}
protected SpiEbeanServer spiEbeanServer() {
return (SpiEbeanServer) Ebean.getDefaultServer();
}
protected EbeanServer server() {
return Ebean.getDefaultServer();
}
protected void loadCountryCache() {
Ebean.find(Country.class)
.setLoadBeanCache(true)
.findList();
}
}