Run ShowBuildMenu.bat in the root folder. You will see an interesting option then.
/G 2011/9/15 Don <[email protected]> > Hi, Gunnar, > > I just downloaded your fork, and I got this error in the NHibernate > project: > > Source file 'C:\path\to\src\NHibernate\AssemblyInfo.cs' could not be > opened ('Unspecified error ') > > I get similar errors for all of the Visual Studio projects. (I've > been working on other projects in the general sense and didn't get > back to this until just now.) > > Any ideas? > > Don > > > > On Sep 6, 10:01 am, Gunnar Liljas <[email protected]> wrote: > > Download my fork: > > > > https://github.com/gliljas/nhibernate-core > > > > or just patch some stuff: > > > > https://github.com/gliljas/nhibernate-core/commit/5dff10fed53f200aa5d... > > > > It's not a major change. One new class, and one change in the > > SelectClauseVisitor class. > > > > The test case is actually not very good (cleaned it up before > committing,and > > managed to remove the actual proof), so you can skip that. > > > > I can't make any guarantees, but I think that the problem will be solved > in > > the next release, using my code or something else. It's invalid behavior, > > especially when things like aggregates and distinct comes into play. > > > > /G > > > > 2011/9/6 mysterd429 <[email protected]> > > > > > > > > > > > > > > > > > Gunnar, > > > > > Thank you again for your help. I was hoping that the mistake was > > > mine! Can your changes be merged into the latest stable revision? > > > I'm not familiar at all with the NHibernate source, but if it takes a > > > while for this fix to go in, I'll patch a local copy, try running the > > > NHibernate tests and my own tests, and see if I get something that > > > works. > > > > > Regards, > > > > > Don > > > > > On Sep 5, 4:23 pm, Gunnar Liljas <[email protected]> wrote: > > > > Hi, > > > > > > Kudos for providing a self contained test project. Much appreciated! > > > > > > I tried your code, and indeed, no function calls were included in the > > > > projection! After investigating a bit further I found that any part > of > > > the > > > > expression tree which contains Constant expressions (in your case, > the > > > > arguments to the extension method) will be executed locally, instead > of > > > in > > > > HQL/SQL. > > > > > > I've submitted a pull request with code that fixes this. Hopefully it > (or > > > > some other solution) will be accepted. > > > > > >https://github.com/nhibernate/nhibernate-core/pull/6 > > > > > > /Gunnar > > > > > > 2011/9/1 mysterd429 <[email protected]> > > > > > > > Gunnar, > > > > > > > I sent you a link to a ZIP file with a sample that demonstrates the > > > > > issue. If we find a resolution, I'll post the problem and the > > > > > correction to the list. > > > > > > > Thank you again! > > > > > > > Don > > > > > > > On Aug 31, 11:31 am, Gunnar Liljas <[email protected]> > wrote: > > > > > > How about.. > > > > > > > > Session.Query<ResultObject>().Select(ro => new > > > > > > {Id=ro.Id,Rank=ro.DoSearch("foo", "bar")}).OrderBy(p =>p.Rank) > > > > > > > > ? > > > > > > > > /G > > > > > > 2011/8/31 mysterd429 <[email protected]> > > > > > > > > > When executing Session.Query<ResultObject>().OrderBy(ro => > > > > > > > ro.DoSearch("foo", "bar").Select(ro => ro.DoSearch("foo", > "bar"). > > > > > > > > > On Aug 31, 10:34 am, mysterd429 <[email protected]> > > > wrote: > > > > > > > > Gunnar, > > > > > > > > > > Both of these examples mimic the SQL in .NET, which does not > make > > > > > > > > sense for this application. There is no way to mimic the > results > > > of > > > > > > > > FREETEXT (which my UDF wraps), so I'm a little confused: what > is > > > the > > > > > > > > purpose of mimicking the SQL in .NET? My understanding based > on > > > the > > > > > > > > articles that you provided was that the HQL generator would > > > always be > > > > > > > > used and that the method was just a placeholder. There is no > > > > > > > > mechanism to mimic my UDF. > > > > > > > > > > I implemented the BuildHql method (remarkably simple), and > it's > > > used > > > > > > > > for OrderBy, but not for Select. If there is no way to force > > > > > > > > NHibernate to translate to HQL by both? Here's the SQL that > I > > > get > > > > > > > > (formatted and with the names of our actual domain objects > > > removed): > > > > > > > > > > select > > > > > > > > resultobject0_.RESULT_OBJECT_ID > > > > > > > > , /* other properties */ > > > > > > > > from > > > > > > > > RESULT_OBJECT resultobject0_ > > > > > > > > order by > > > > > > > > ( > > > > > > > > SELECT > > > > > > > > RANK > > > > > > > > FROM > > > > > > > > DO_SEARCH(@p0, @p1) > > > > > > > > WHERE > > > > > > > > RESULT_OBJECT_ID = > resultobject0_.RESULT_OBJECT_ID > > > > > > > > ) asc > > > > > > > > > > I was expecting something more like this: > > > > > > > > > > select > > > > > > > > DO_SEARCH(@p0, @p1) > > > > > > > > from > > > > > > > > RESULT_OBJECT resultobject0_ > > > > > > > > order by > > > > > > > > ( > > > > > > > > SELECT > > > > > > > > RANK > > > > > > > > FROM > > > > > > > > DO_SEARCH(@p0, @p1) > > > > > > > > WHERE > > > > > > > > RESULT_OBJECT_ID = > resultobject0_.RESULT_OBJECT_ID > > > > > > > > ) asc > > > > > > > > > > Thanks for your help. I appreciate it. > > > > > > > > > > On Aug 31, 10:04 am, Gunnar Liljas <[email protected]> > > > wrote: > > > > > > > > > > > That is what this article is all about. > > > > > > > > http://www.primordialcode.com/blog/post/nhibernate-customize-linq-pro. > > > > > > > .. > > > > > > > > > > > or this > > > > > > > > http://fabiomaulo.blogspot.com/2010/07/nhibernate-linq-provider-exten. > > > > > > > .. > > > > > > > > > > > /G > > > > > > > > > > > 2011/8/31 mysterd429 <[email protected]> > > > > > > > > > > > > Gunnar, > > > > > > > > > > > > Thanks for your help so far. I originally had a UDF, so > I've > > > > > > > > > > converted back to the UDF. I've got an extension method > for > > > > > > > > > > ResultObject called GetSearchRank, which takes the same > > > > > parameters as > > > > > > > > > > the UDF in addition the "this" parameter and returns -1 > > > > > (temporarily > > > > > > > > > > for testing). I've created a dialect that is a subclass > of > > > > > > > > > > MsSql2008Dialect, an HQL generator that is a subclass of > > > > > > > > > > BaseHqlGeneratorForMethod, and an HQL generators registry > > > that is > > > > > a > > > > > > > > > > subclass of another HQL generators registry common to all > of > > > our > > > > > > > > > > projects (all it does it add the "trim" function for > > > strings.) > > > > > > > > > > > > When I try to run the code, the generator registry is > getting > > > > > built, > > > > > > > > > > and execution goes to the BuildHql gets called (I've not > yet > > > > > > > > > > implemented it) when I do > > > > > Session.Query<ResultObject>().OrderBy(ro => > > > > > > > > > > ro.GetSearchRank("foo", "bar")), but when I do > > > > > > > > > > Session.Query<ResultObject>().Select(ro => > > > > > ro.GetSearchRank("foo", > > > > > > > > > > "bar")), I just get a queryable full of -1. > > > > > > > > > > > > How can I get NHibernate to translate the method call to > SQL > > > > > instead > > > > > > > > > > of executing it on the .NET side? > > > > > > > > > > > > Thanks! > > > > > > > > > > > > Don > > > > > > > > > > > > On Aug 30, 7:54 pm, Gunnar Liljas < > [email protected]> > > > > > wrote: > > > > > > > > > > > Since you're inlining this in a SELECT, you should not > use > > > your > > > > > SP. > > > > > > > > > > Either > > > > > > > > > > > use FREETEXTTABLE directly or create a UDF. > > > > > > > > > > > > > The steps are: > > > > > > > > > > > > > 1. Customize the SQL dialect and configure NHibernate > to > > > use it > > > > > > > > > > > 2. Register the functions in the Linq provider > > > > > > > > > > > 3. Something like what you described. > > > > > > > > > > > > > /G > > > > > > > > > > > > > 2011/8/30 mysterd429 <[email protected]> > > > > > > > > > > > > > > Hi, Gunnar, > > > > > > > > > > > > > > Okay, that will work, I think. I would use my > existing > > > > > stored > > > > > > > > > > > > procedure rather than FREETEXTTABLE. Would these be > the > > > > > steps: > > > > > > > > > > > > > > 1. Customize the LINQ provider using something like > > > > > > > > > > > > RegisterFunction("GetRank", /* SQLFunctionTemplate or > > > > > > > > > > > > StandardSQLFunction, not sure, that calls DO_SEARCH > using > > > > > T-SQL > > > > > > > */). > > > > > > > > > > > > 2. Do something like this: > > > > > > > > > > > > > > String field1, field2, field3; > > > > > > > > > > > > // assign field1, field2, field3 > > > > > > > > > > > > IQueryable<SearchResult> queryable = > > > > > > > > > > > > Session.Query<ResultObject>().Select(ro => new > > > SearchResult > > > > > > > > > > > > { ResultObject = ro, Rank = GetRank(ro, field1, > field2, > > > > > > > > > > > > field3) }).Where(ro => GetRank(ro, field1, field, > field3) > > > ?? > > > > > 0 > > > > > > > > 0); > > > > > > > > > > > > if(myUtilityInstance != null) queryable = > > > > > > > > > > > > myUtilityInstance.Paginate(queryable); > > > > > > > > > > > > results = queryable.ToList(); > > > > > > > > > > > > > > Does that seem about right? Thanks so much for your > > > help! > > > > > > > > > > > > > > Regards, > > > > > > > > > > > > > > Don > > > > > > > > > > > > > > On Aug 30, 3:40 pm, Gunnar Liljas < > > > [email protected]> > > > > > > > wrote: > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > While there may be ways to get the result set of a > > > stored > > > > > > > procedure > > > > > > > > > > into > > > > > > > > > > > > an > > > > > > > > > > > > > NhQueryable, it doesn't make much sense, since any > > > extra > > > > > Linq > > > > > > > > > > predicates > > > > > > > > > > > > you > > > > > > > > > > > > > apply will then by run on the full result set (when > > > paging > > > > > > > etc.), and > > > > > > > > > > if > > > > > > > > > > > > you > > > > > > > > > > > > > do that, you might just as well apply it after the > > > query, > > > > > with > > > > > > > in > > > > > > > > > > memory > > > > > > > > > > > > > operations. > > > > > > > > > > > > > > > I still think that a custom SQL function is > feasible. > > > You > > > > > will > > > > > > > have > > > > > > > > > > to > > > > > > > > > > > > > reshape it into a scalar value... > > > > > > > > > > > > > > > SELECT ...., (SELECT [RANK] FROM > > > > > > > > > > FREETEXTTABLE(tableref,columnref,value) > > > > > > > > > > > > > WHERE [KEY]=tableref.Id) as [RANK] FROM ... > > > > > > > > > > > > > > > Maybe not easy, but doable. > > > > > > > > > > > > > > > /G > > > > > > > > > > > > > > > 2011/8/30 mysterd429 <[email protected]> > > > > > > > > > > > > > > > > Thanks for the reply, Gunnar. Unfortunately, I > don't > > > see > > > > > how > > > > > > > I can > > > > > > > > > > > > > > use these links. I'm trying to use > FREETEXTTABLE, > > > which > > > > > > > provides a > > > > > > > > > > > > > > result set with the search results, not FREETEXT, > > > which > > > > > is > > > > > > > scalar. > > > > > > > > > > I > > > > > > > > > > > > > > need to know not only that a row matches, but > what > > > its > > > > > > > relative > > > > > > > > > > rank > > > > ... > > > > read more ยป > > -- > 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. > > -- 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.
