Hi All,

I was using NHibernate 2.0.1.GA release. I recently switched to
2.1.0.Alpha2 release.
One of my criteria is fetching TOP 10 DISTINCT rows. It was working
fine in NH 2.0.1.GA. But in NH 2.1.0.Alpha2 it is not returning
Distinct rows. When I observed the underlying SQL generated by this
criteria it is entirely different in latest build and it is a cause of
this error.

Following is the resulted query in 2.0.1.GA:
SELECT TOP 5  y0_,
               y1_,
               y2_,
               y3_,
               y4_,
               y5_,
               y6_,
               y7_,
               y8_,
               y9_,
               y10_,
               y11_,
               y12_,
               y13_,
               y14_
FROM     (SELECT  ROW_NUMBER()
                   OVER(ORDER BY y14_ DESC) as row,
                 query.y0_,
                 query.y1_,
                 query.y2_,
                 query.y3_,
          FROM   (SELECT distinct this_.ID     as y0_,
                                  this_.VersionNumber     as y1_,
                                  this_.TotalAmount       as y2_,
                                  (select SUM(a.Amount)
                                   from   TableA a
                                   where  a.ID= this_.ID
                                          And a.Flag= 'True') as y3_,

                  FROM   dbo.TableB this_
                         inner join dbo.TableA t1_
                           on this_.ID = t1_.TransactionID
                         inner join dbo.TableC c2_
                           on t1_.D = c2_.D
                  WHERE  t1_.Flag = 1 /* @p0 */
                         and c2_.CNumber = '5859' /* @p1 */) query)
page
WHERE    page.row > 0
ORDER BY y2_ DESC


While the same Criteria is generating following query in 2.1.0.Alpha2
release:

SELECT   TOP 10 y0_,
                y1_,
                y2_,
                y3_,
FROM     (SELECT distinct this_.ID                   as y0_,
                          this_.VersionNumber                   as
y1_,
                          this_.TotalAmount                     as
y2_,
                          (select SUM(a.Amount)
                           from   TableA a
                           where  a.ID = this_.ID
                                  And a.Flag= 'True') as y3_,
                          ROW_NUMBER()
                            OVER(ORDER BY this_.TotalAmount DESC) as
__hibernate_sort_row
          FROM   dbo.TableB this_
                 inner join dbo.TableA t1_
                   on this_.ID = t1_.ID
                 inner join dbo.TableC c2
                   on t1_.D = c2.ID
          WHERE  t1_.Flag = 1 /* @p0 */
                 and c2_.CNumber = '5859' /* @p1 */) as query
WHERE    query.__hibernate_sort_row > 0
ORDER BY query.__hibernate_sort_row

Is it a bug got into NHibernate 2.1.0Alpha2 release? Am I missing some
thing in following Criteria API code:

        public IList<TableB> MyMethod(string number, int firstResult,
int maxResults, ref int count)
        {

            ProjectionList proj = Projections.ProjectionList()
                .Add(Projections.Alias(Projections.Property("Id"),
"Id"))
                .Add(Projections.Alias(Projections.Property
("VersionNumber"), "VersionNumber"))
                .Add(Projections.Alias(Projections.Property
("TotalAmount"), "TotalAmount"));
                .Add(Projections.Alias(Projections.Property("Tax"),
"Tax"));

            ICriteria criteria = Session.CreateCriteria(typeof
(Transaction)).SetProjection(Projections.Distinct(proj));
            ICriteria txndetailCriteria = criteria.CreateCriteria
("TableA");
            txndetailCriteria.Add(Expression.Eq("Flag", true));

            txndetailCriteria.CreateCriteria("TableC").Add
(Expression.Eq("CNumber", number));
            criteria.AddOrder(Order.Desc("TotalAmount"));
            criteria.SetResultTransformer(new
NHibernate.Transform.AliasToBeanResultTransformer(typeof(TableB)));


            criteria.SetFirstResult(firstResult);
            criteria.SetMaxResults(maxResults);
            IList<TableB> result = criteria.List<TableB>();
            return result;
        }

Regards,

Asif Tasleem




--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to