From: Michael D. <mik...@us...> - 2004-04-06 00:43:49
|
Update of /cvsroot/nhibernate/nhibernate/src/NHibernate/Dialect In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18825/Dialect Modified Files: Dialect.cs Log Message: Added IQueryFunctionInfo to HQL and some implementations to the Dialect. Resolves JIRA NH-46 Index: Dialect.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Dialect/Dialect.cs,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** Dialect.cs 2 Apr 2004 15:13:05 -0000 1.17 --- Dialect.cs 6 Apr 2004 00:31:07 -0000 1.18 *************** *** 4,10 **** --- 4,13 ---- using System.Text; + using NHibernate.Engine; + using NHibernate.Hql; using NHibernate.Sql; using NHibernate.SqlCommand; using NHibernate.SqlTypes; + using NHibernate.Type; using NHibernate.Util; *************** *** 30,34 **** static Dialect() { ! //TODO: H2.0.3 - add QueryFunctions in here } --- 33,41 ---- static Dialect() { ! aggregateFunctions["count"] = new Dialect.CountQueryFunctionInfo(); ! aggregateFunctions["avg"] = new Dialect.CountQueryFunctionInfo(); ! aggregateFunctions["max"] = new QueryFunctionStandard(); ! aggregateFunctions["min"] = new QueryFunctionStandard(); ! aggregateFunctions["sum"] = new QueryFunctionStandard(); } *************** *** 705,708 **** --- 712,781 ---- } + public class CountQueryFunctionInfo : IQueryFunctionInfo + { + #region IQueryFunctionInfo Members + + public IType QueryFunctionType(IType columnType, IMapping mapping) + { + return NHibernate.Int32; + } + + public bool IsFunctionArgs + { + get { return true;} + } + + public bool IsFunctionNoArgsUseParanthesis + { + get { return true;} + } + + #endregion + } + + public class AvgQueryFunctionInfo : IQueryFunctionInfo + { + #region IQueryFunctionInfo Members + + public IType QueryFunctionType(IType columnType, IMapping mapping) + { + SqlType[] sqlTypes; + try + { + sqlTypes = columnType.SqlTypes(mapping); + } + catch (MappingException me) + { + throw new QueryException(me); + } + + if(sqlTypes.Length!=1) throw new QueryException("multi-column type can not be in avg()"); + + SqlType sqlType = sqlTypes[0]; + + if(sqlType.DbType==DbType.Int16 || sqlType.DbType==DbType.Int32 || sqlType.DbType==DbType.Int64) + { + return NHibernate.Single; + } + else + { + return columnType; + } + } + + public bool IsFunctionArgs + { + get { return true; } + } + + public bool IsFunctionNoArgsUseParanthesis + { + get { return true; } + } + + #endregion + } + + } } |