I think that a good (set of) sequence diagrams would be a good investment
for the project.

It would reduce the time required to fix a bug for new developers.


Giacomo

On Mon, Mar 23, 2009 at 9:27 AM, Pascal Craponne <[email protected]> wrote:

> hi Giacomo,
> there's no sequence diagram (sorry), but an overview of all classes at
> http://linq.to/db/Architecture, and a very small process at
> http://linq.to/db/Sugar (it is partly obsolete, and would require a
> refresh).
>
> Pascal.
>
> jabber/gtalk: [email protected]
> msn: [email protected]
>
>
>
> On Mon, Mar 23, 2009 at 08:50, Giacomo Tesio <[email protected]> wrote:
>
>> PS: I've tried both approach (multitable MetaTableExpression and nested
>> MetaTableExpression).
>>
>> Both could work, but the the structure of the anonymous types generated by
>> the expression tree parser, would make the multitable way too complex and
>> convoluted, while the nested solution appeared to be really fast and clean
>> given the current code.
>>
>> So I've committed the nesting one (even becouse the other would have
>> required a lot more code and test to be completed).
>>
>>
>> That let me focus about the fact that understanding the code interactions
>> required far more time than to localize and fix the bug.
>> Can someone write one or more sequence diagrams for the DbLinq core?
>> It would help a lot!
>>
>>
>> Giacomo
>>
>>
>>
>>
>> On Mon, Mar 23, 2009 at 8:41 AM, Giacomo Tesio <[email protected]> wrote:
>>
>>> Fixed in http://code.google.com/p/dblinq2007/source/detail?r=1019
>>>
>>> AFAIK, there's no regression in the unit tests, but I'd prefer if someone
>>> could run all the tests.
>>>
>>> I've changed the MetaTableExpression.Aliases dictionary to contain
>>> MutableExpressions instead of just TableExpression.
>>>
>>> May be a better approach would have been to make both TableExpression and
>>> MetaTableExpression derive from the same (empty) class, and use such a class
>>> as the dictionary entry.
>>>
>>> This would make the commented checks in the MetaTableExpression
>>> constructor unuseful (
>>> http://code.google.com/p/dblinq2007/source/browse/trunk/src/DbLinq/Data/Linq/Sugar/Expressions/MetaTableExpression.cs?spec=svn1019&r=1019
>>> )
>>> I've commented it out since the class is internal and used from limited
>>> points, but actually they would be right.
>>>
>>>
>>> If someone help me to find a good name (and location) for the utility
>>> class from which to derive TableExpression and MetaTableExpression, I'll
>>> correct the fix.
>>>
>>>
>>> Giacomo
>>>
>>>
>>>
>>>
>>>
>>> On Fri, Mar 20, 2009 at 5:54 PM, Pascal Craponne <[email protected]>wrote:
>>>
>>>> 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