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