From: <hib...@li...> - 2006-05-08 21:14:23
|
Author: max...@jb... Date: 2006-05-08 17:14:20 -0400 (Mon, 08 May 2006) New Revision: 9909 Modified: trunk/Hibernate3/src/org/hibernate/dialect/Dialect.java Log: more complete "sum" type resolvement. Modified: trunk/Hibernate3/src/org/hibernate/dialect/Dialect.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/dialect/Dialect.java 2006-05-08 20:59:20 UTC (rev 9908) +++ trunk/Hibernate3/src/org/hibernate/dialect/Dialect.java 2006-05-08 21:14:20 UTC (rev 9909) @@ -79,13 +79,6 @@ throw new QueryException( me ); } if ( sqlTypes.length != 1 ) throw new QueryException( "multi-column type in avg()" ); - int sqlType = sqlTypes[0]; - /*pre H3.2 behavior if ( sqlType == Types.INTEGER || sqlType == Types.BIGINT || sqlType == Types.TINYINT ) { - return Hibernate.FLOAT; - } - else { - return columnType; - }*/ return Hibernate.DOUBLE; } } ); @@ -104,15 +97,26 @@ } if ( sqlTypes.length != 1 ) throw new QueryException( "multi-column type in sum()" ); int sqlType = sqlTypes[0]; + + // First allow the actual type to control the return value. (the actual underlying sqltype could actually be different) if ( columnType == Hibernate.BIG_INTEGER ) { return Hibernate.BIG_INTEGER; } - if ( columnType == Hibernate.BIG_DECIMAL ) { + else if ( columnType == Hibernate.BIG_DECIMAL ) { return Hibernate.BIG_DECIMAL; } - if ( sqlType == Types.FLOAT || sqlType == Types.DOUBLE || sqlType == Types.NUMERIC ) { + else if ( columnType == Hibernate.FLOAT || columnType == Hibernate.DOUBLE) { return Hibernate.DOUBLE; - } else if ( sqlType == Types.INTEGER || sqlType == Types.SMALLINT || sqlType == Types.TINYINT ) { + } + + // finally use the sqltype if == on Hibernate types did not find a match. + if ( sqlType == Types.BIGINT) { + return Hibernate.BIG_INTEGER; + } + else if ( sqlType == Types.FLOAT || sqlType == Types.DOUBLE || sqlType == Types.NUMERIC || sqlType == Types.DECIMAL || sqlType == Types.REAL) { + return Hibernate.DOUBLE; + } + else if ( sqlType == Types.INTEGER || sqlType == Types.SMALLINT || sqlType == Types.TINYINT ) { return Hibernate.LONG; } else { |