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();
    }

}

Reply via email to