The MetaTable was created to match the Expressions that create anonymous types with two table types. I'm not sure there's any expression creating an anonymous type with more than 2 tables, so I suggest the second option. But I'm not in the code right now, so you can tell what's best :)
Pascal. jabber/gtalk: [email protected] msn: [email protected] On Fri, Mar 20, 2009 at 16:43, Giacomo Tesio <[email protected]> wrote: > Ok... so we need > - to refactor it to become "an internal object that associates N tables > with some relations" or > - to create a metatable on each join (after the first join containing > metatables containing the precedents joined table) > > Which do you think would be better? > > Giacomo > > > On Fri, Mar 20, 2009 at 11:22 AM, Pascal Craponne <[email protected]>wrote: > >> Hi Giacomo, >> a MetaTableExpression is an internal object that associates two tables >> with a relation (join). >> >> Pascal. >> >> jabber/gtalk: [email protected] >> msn: [email protected] >> >> >> >> On Fri, Mar 20, 2009 at 11:18, Giacomo Tesio <[email protected]> wrote: >> >>> Hi! >>> >>> Since I've not yet found the time to deeply understand and fix the bug, >>> can you explain me what's the definition of the metatable concept? >>> >>> >>> I've to understand if it's to be used to fix the problem (actually if the >>> problem is that it's not used or updated when the second join is visited). >>> >>> >>> Giacomo >>> >>> >>> >>> On Fri, Mar 13, 2009 at 3:12 PM, Giacomo Tesio <[email protected]> wrote: >>> >>>> I've added it now, >>>> http://code.google.com/p/dblinq2007/source/diff?spec=svn1016&r=1016&format=side&path=/trunk/src/DbLinq/Test/Providers/ReadTest.cs >>>> >>>> On ReadTest.C12_SelectEmployee_MultiJoinWithWhere() >>>> >>>> >>>> Giacomo >>>> >>>> >>>> On Fri, Mar 13, 2009 at 9:37 AM, Pascal Craponne <[email protected]>wrote: >>>> >>>>> Do we have a unit test somewhere showing this problem? >>>>> Pascal. >>>>> >>>>> jabber/gtalk: [email protected] >>>>> msn: [email protected] >>>>> >>>>> >>>>> >>>>> >>>>> On Fri, Mar 13, 2009 at 08:58, Giacomo Tesio <[email protected]> wrote: >>>>> >>>>>> As far as I saw, the problem signaled is related to multiple joins and >>>>>> anonymous type handling. >>>>>> >>>>>> During the first example expression tree visit, the *where *node is >>>>>> unable to access the *r* parameter, since it is part of a generated >>>>>> anonymous type containing both *r* and *l*. >>>>>> >>>>>> On a single join query there's no such anonymous type, so the *r*would >>>>>> be reachable. >>>>>> >>>>>> >>>>>> Here the question: why there is such anonymous type? >>>>>> Could such anonymous type be substituted by something more easy to >>>>>> handle? (metatable? if I've understood what they are...) >>>>>> Or could a query optimization (given it's executed in the right >>>>>> moment) scompose the where and move each clausole in the right place? >>>>>> >>>>>> >>>>>> Giacomo >>>>>> >>>>>> On Thu, Mar 5, 2009 at 6:57 PM, Giacomo Tesio <[email protected]>wrote: >>>>>> >>>>>>> Building the following query I'm getting such an exception in >>>>>>> DbLinq\src\DbLinq\Data\Linq\Sugar\Implementation\QueryBuilder.cs >>>>>>> >>>>>>> var res = from r in db.Roles >>>>>>> join l in db.RoleUserLinks on r.Id equals >>>>>>> l.cRoleID >>>>>>> join us in db.Users on l.cUserID equals us.Id >>>>>>> *where r.cRole == "RP00"* >>>>>>> select us; >>>>>>> >>>>>>> BTW moving the where in the initial from query execute with no >>>>>>> problem: >>>>>>> var res = from r in db.Roles*.Where((r) => r.cRole == >>>>>>> "RP00")* >>>>>>> join l in db.RoleUserLinks on r.Id equals >>>>>>> l.cRoleID >>>>>>> join us in db.Users on l.cUserID equals us.Id >>>>>>> select us; >>>>>>> >>>>>>> I'm try to debug the problem but with no success: >>>>>>> >>>>>>> protected virtual void CompileRowCreator(BuilderContext >>>>>>> builderContext) >>>>>>> { >>>>>>> var reader = builderContext.CurrentSelect.Reader; >>>>>>> reader = >>>>>>> (LambdaExpression)SpecialExpressionTranslator.Translate(reader); >>>>>>> reader = >>>>>>> (LambdaExpression)ExpressionOptimizer.Optimize(reader, builderContext); >>>>>>> builderContext.ExpressionQuery.RowObjectCreator = * >>>>>>> reader.Compile()*; >>>>>>> } >>>>>>> >>>>>>> Exception is thrown from reader.Compile(), but I can't understand the >>>>>>> difference between the two queries... >>>>>>> >>>>>>> What am I missing? >>>>>>> >>>>>>> >>>>>>> Giacomo >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>> >>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "DbLinq" 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/dblinq?hl=en -~----------~----~----~----~------~----~------~--~---
