Re: SETFable join slots?
Bill Atkins <[email protected]> Thu, 7 Sep 2006 11:04:24 -0400
| Newsgroups | gmane.lisp.clsql.devel |
|---|---|
| Message-ID | <[email protected]> |
Sorry it took so long to reply to this. What kinds of problems have people been having with the object- relational mapping? I'm planning on writing production code with these mappings and while I haven't noticed any problems yet, it would be good to know what to expect. :-) One behavior that seems a little dangerous is this: if the user doesn't specify that one field is a primary key in the DEF-VIEW- CLASS, then calling (update-records-from-instance foo) will set the columns in *all* rows of that table to the appropriate value in foo. Bill On Aug 22, 2006, at 12:49 PM, Kevin Rosenberg wrote: > Bill Atkins wrote: >> One thing I'd like to do with CLSQL is: >> (push *bob* (account-customers *yoyodne-inc*)) >> where ACCOUNT-CUSTOMERS is a join slot. Then when >> [...] >> that CLSQL supports this now - are there subtle, hard-to-get-right >> issues with this, or is it just that no one has added this support >> yet? If the latter is the case, I plan to add support for this >> within >> [...] > > Hi Bill, I have a few preliminary thoughts about this: > > 1. This brings up the whole issue of join slots and object > relations. My goal for CLSQL was to meet the specifications of the > Common Lisp documentation. One recurrent issue of the mail list has > been that the object relations don't do as much as some people think > they should. That's a fair observation. I haven't made any attempts to > add functionality beyond the CommonSQL specification. Personally, it's > rare that I use the object-oriented interface at all. I tend to use > optimized direct SQL statements using the "functional" model. > > More disturbing, though, is how a some have said on the mail list that > the object relations don't work as they expect them to. Indeed, some > patches have been proposed to change the join behavior. You can see > them in the mail list archives. > > Before adding more functionality (which has the chance of being > misunderstood or misused), I'd like to see more tests added to the > test database to ensure that the current join behavior is currently > meeting people's expectation. Then, any additional functionality would > need to come well-documented in the docbook files as well as with > tests in the test suites. > > While this may seem overly conservative or an impediment to rapidly > deploying functionality you might need, it's been my experience that > the object joining has been one of rougher areas in CLSQL and I don't > want to add to any ambiguity or surprising behavior that may already > exist. > > > 2. Adding a new means for an object to get modified in memory adds to > the potential issue of ensuring synchronization between objects in > memory and in the database. While CLSQL maintains an object cache (to > meet the CommonSQL specification), this cache is merely for > performance sake. > > I think adding the concept of 'singletons' would be > worthwhile. Singletons would ensure that every object made with a > unique primary key would be EQ to objects with the same primary > key. > > Having a cache already helps since CLSQL would need to cache each > singleton so requests for an object with the same primary key would > return an identical object. Reworking the caching to maintain > singletons isn't necessary for your extension. But, the more ways that > an object can be modified in memory increases the possibility that > some user will have two objects in memory that they think represents > the same object, but an operation on one object leaves the other > in-memory object in a different state. > > So that's my initial feedback on your "subtle issues, hard to get > right" question. While broad in scope, it should give you an idea of > the direction that I think extensions to object relation model should > go. > > -- > Kevin Rosenberg > [email protected]