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