I'm in doubt if the method
org.apache.empire.db.expr.column.DBFuncExpr.getFunctionName()
will work fine with Oracle, for some date related functions.
I think the method it is called just for generating XML.
Maybe a *test* for such feature should be done for the Oracle driver.
I attach a sample test (for the year function) to make things clearer.
Oracle has a "strange" name for the year function. Is that correct?
package temp;
import static junit.framework.Assert.assertEquals;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.derby.DBDatabaseDriverDerby;
import org.apache.empire.db.expr.column.DBFuncExpr;
import org.apache.empire.db.h2.DBDatabaseDriverH2;
import org.apache.empire.db.hsql.DBDatabaseDriverHSql;
import org.apache.empire.db.mysql.DBDatabaseDriverMySQL;
import org.apache.empire.db.oracle.DBDatabaseDriverOracle;
import org.apache.empire.db.postgresql.DBDatabaseDriverPostgreSQL;
import org.apache.empire.db.sqlserver.DBDatabaseDriverMSSQL;
import org.junit.Test;
public class YearFunctionNameTest {
@Test
public void getYearFunctionName() {
assertEquals("year", yearFunctionName(new DBDatabaseDriverDerby()));
assertEquals("year", yearFunctionName(new DBDatabaseDriverH2()));
assertEquals("year", yearFunctionName(new DBDatabaseDriverHSql()));
assertEquals("year", yearFunctionName(new DBDatabaseDriverMSSQL()));
assertEquals("year", yearFunctionName(new DBDatabaseDriverMySQL()));
assertEquals("year", yearFunctionName(new DBDatabaseDriverPostgreSQL()));
assertEquals("TO_CHAR", yearFunctionName(new DBDatabaseDriverOracle()));
}
private String yearFunctionName(DBDatabaseDriver driver) {
String template = driver.getSQLPhrase(DBDatabaseDriver.SQL_FUNC_YEAR);
return new DBFuncExpr(null, template, null, null, true, null) {
public String name() {
return super.getFunctionName();
}
}.name();
}
}