Invalid SQL Generated using queryover and future queries

36 views
Skip to first unread message

Berke

unread,
Jan 17, 2013, 10:37:24 AM1/17/13
to nhu...@googlegroups.com
We are using version 3.3.2 GA (From Nuget)

I have what I think is a complex query, that allows our users to search the system using quite a few different switches. We implemented this using the QueryOver<T> API. We are also supporting paging and are required to get two different object counts, so we have utilized the Future<> support to limit the trips back to the database. I have ran into a case when I add a Criteria such as (This works fine without using the Future):

 var crit = CurrentSession.QueryOver<WorkBase>(() => opp);
/* Snipped out adding various other criteria, paging ordering and projecting into the alias*/

crit.Where(Expression.Sql("({alias}.Organizationid in (SELECT * FROM [fn_Get_Organization_Search_Tree](?)))", query.OrganizationId, new NHibernate.Type.GuidType()));


I end up getting SQL which generates the error:  The parameterized query '(@p0 bit,@p1 bit,@p2 int,@p3 uniqueidentifier,@p4 int,@p5 int,@p' expects the parameter '@p5', which was not supplied.

The query that is generated that is a multiquery looks like this (I snipped out what I feel is irrelevant)

SELECT count(*) as y0_ 
FROM WorkAlert this_ /*snipped*/;

SELECT count(*) as y0_ 
FROM Work /* snipped */
WHERE this_.FolderId is null and this_.Status = @p4 
and (this_.Organizationid in (SELECT * FROM [fn_Get_Organization_Search_Tree](@p5)));

SELECT TOP (@p5)  /* snipped fields */
 FROM Work this_ 
 /* snipped other joins*/
 WHERE this_.FolderId is null and this_.Status = @p12 and 
 (this_.Organizationid in (SELECT * FROM [fn_Get_Organization_Search_Tree](@p13))) ORDER BY y25_ desc, y24_ desc, this_.DateCreated desc;

In this query @p5 is defined as an int with the value of default being passed in.  (I am passing to nhibernate a page size of 25 FYI).  My Search Tree function takes a GUID and is correct in the third query.  If I'm able I will try and create a reproduction. If anyone can provide any insight or ideas....Is there a way I can get rid of the SQLExpression? The function being used traverses a tree finding all ancestors and descendants, I couldn't figure out a way to handle that without using a SQLExpression.  


I also ran into another issue where my Work object was an abstract object and the Alias in the SQL Expression wouldn't resolve the base alias, but the object was only abstract due to an outdated design and we refactored it and smashed it.


Thanks for any help!



Reply all
Reply to author
Forward
0 new messages