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
-~----------~----~----~----~------~----~------~--~---

Reply via email to