[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1759?page=c...
]
Sandeep Vaid commented on HHH-1759:
-----------------------------------
Steve, yes i am using weblogic 8 and hence forced to use ClassicQueryTranslatorFactory.
and if i elaborate more on this problem, i get different different error messages in the
following 2 cases :
CASE 1: I have extended the DB2Dialect and defined my own function:
registerFunction("svminus1", new SQLFunctionTemplate( Hibernate.TIME,
"current time") );
HQL: select svminus1() from Temp c where c.id=1
SQL: select svminus1() as col_0_0_ from TEMP c where c.id=1
The error message is :
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0440N No authorized routine
named "SVMINUS1" of type "FUNCTION"
having compatible arguments was found. SQLSTATE=42884
NOTE: In this case, while converting HQL to SQL it has not replaced my custom function
name by it's definition.
CASE 2:
registerFunction("svminus1", new NoArgSQLFunction("current time",
Hibernate.TIME, false) );
This time the error is :
org.hibernate.QueryException: aggregate function expected before ( in SELECT [select
svminus1() from Temp c where c.id=1]
ClasscQueryTranslator do not make SQL Function substitution
-----------------------------------------------------------
Key: HHH-1759
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1759
Project: Hibernate Core
Issue Type: Bug
Components: query-hql
Affects Versions: 3.1.3
Environment: Hibernate 3.1.3, JDK 1.5.0_05, MySQL 4.0.20d, Tomcat 5.5.15
Reporter: Andrey Grebnev
I have already asked about this problem in forum
http://forum.hibernate.org/viewtopic.php?t=959442 but I did not get answer.
below my text from forum's question:
Hello
I have faced with the following problem. I use Hibernate-3.1.3 with
ClassicQueryTranslatorFactory under MySQL 4.0.20d.
I need the SQL function "day". MySQL 4.0 does not have day function, but it has
equal "dayofmonth". MySQLDialect.java has the following definition:
registerFunction("day", new StandardSQLFunction("day",
Hibernate.INTEGER) );
In order to have compatibility both with MySQL 4.0 and above I have written my own
Dialect which override day function in the following way:
registerFunction("day", new StandardSQLFunction("dayofmonth",
Hibernate.INTEGER) );
With ASTQueryTranslator this dialect works corrrectly, but with Classic one it does not
work!!!
I have examined Hibernate SRC and have found out that we have follwing code in the
org.hibernate.hql.classic.SelectParser: 126
else if ( getFunction( lctoken, q ) != null && token.equals( q.unalias(
token ) ) ) {
// the name of an SQL function
if ( !ready ) throw new QueryException( ", expected before aggregate
function in SELECT: " + token );
aggregate = true;
aggregateAddSelectScalar = true;
aggregateFuncTokenList.add( lctoken );
ready = false;
q.appendScalarSelectToken( token );
if ( !aggregateHasArgs( lctoken, q ) ) {
q.addSelectScalar( aggregateType( aggregateFuncTokenList, null, q ) );
if ( !aggregateFuncNoArgsHasParenthesis( lctoken, q ) ) {
aggregateFuncTokenList.removeLast();
if ( aggregateFuncTokenList.size() < 1 ) {
aggregate = false;
ready = false;
}
else {
ready = true;
}
}
}
}
we can see that we call
q.appendScalarSelectToken( token );
function with original token, we do not use "render" method of
org.hibernate.dialect.function.StandardSQLFunction.
Is this a bug of classic translator?
I am obliged to use Classic translator because Weblogic's problems with AST. Please
give me an advice.
Thanks beforehand.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira