From: Andrey G. (JIRA) <no...@at...> - 2006-05-17 09:47:27
|
ClasscQueryTranslator do not make SQL Function substitution ----------------------------------------------------------- Key: HHH-1759 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1759 Project: Hibernate3 Type: Bug Components: query-hql 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.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |