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
+ }
+
+
}
}
|