Ah, you are right. If the slot object has already been instantiated as a regular slot, I don't know of any safe, portable way to make it a column slot. If you can think of a hack to make this work, let me know. But for now, you'll have to solve this in some other way.
Best, Marijn On Tue, Mar 10, 2009 at 10:10 AM, Lucas Hope <lucas.r.h...@gmail.com> wrote: > Hi Marijn, > > I stubbed out the form and the dao-circle was successfully compiled (of > course). > > However the example circle I tried to make did not have its slot value > set. I understand (I think) what you were trying to do with the > *direct-column-slot* special variable, but maybe in this case (on > Allegro CL, btw), while the effective-slot-definition-class works > correctly (indicated by the correct CREATE TABLE below), the actual > effective-column-slot object is instantiated OUTSIDE the scope of the > binding in compute-effective-slot-definitio which sets > *direct-column-slot* to non-nil. > > There's no reason for the lisp implementation to instantiate the class > returned by effective-column-slot immediately, as far as I can tell. > > (dao-table-definition 'dao-circle) ;; success! > "CREATE TABLE dao_circle (radius REAL NOT NULL)" > > (setf circle (make-instance 'dao-circle :radius 5.0)) > > (slot-boundp circle 'radius) > => NIL ;; fail. :( > > -Luke > > On Tue, Mar 10, 2009 at 6:19 PM, Marijn Haverbeke <mari...@gmail.com> wrote: >> Hello Luke, >> >> I think (though I'm never entirely sure with this MOP stuff) that that >> error is only there becuase I hadn't thought of the way you are trying >> to use this metaclass, and assumed redefining a slot as a column was >> always an accident. Could you try killing the WHEN-form on line 97 of >> postmodern/table.lisp, doing what you're trying to do, and reporting >> back whether it works as hoped? >> >> Best, >> Marijn >> >> >> On Tue, Mar 10, 2009 at 1:11 AM, Lucas Hope <lucas.r.h...@gmail.com> wrote: >>> Hi there, >>> >>> I am just getting my feet wet with postmodern. It looks like I will >>> be doing some heavy development with it for the next couple of weeks. >>> Wish me luck! >>> >>> My (first?) issue is that I want to do something similar to the >>> following example code. Here CIRCLE is an in-memory implementation of >>> a circle, and it is desired to create a DAO object which moves storage >>> to a postgres backend. (We have lots of circles...) >>> >>> Pretend CIRCLE has a host of useful functionality attached and I can't >>> just point all the defmethods to DAO-CIRCLE. >>> >>> (defclass SHAPE () ()) >>> >>> (defclass CIRCLE (SHAPE) >>> (radius)) >>> >>> (defclass DAO-CIRCLE (CIRCLE) >>> ((radius :col-type real)) >>> (:metaclass dao-class)) >>> >>> (dao-table-definition 'dao-circle) >>> => ERROR: Slot RADIUS in class #<DAO-CLASS DAO-CIRCLE> is both a >>> column slot and a regular slot. >>> >>> Why doesn't this work, and how can I make it work? It seems like this >>> is useful functionality to have. I want the DAO-CIRCLE's radius to be >>> a column slot. >>> >>> Cheers, >>> >>> -Luke >>> >>> _______________________________________________ >>> postmodern-devel mailing list >>> postmodern-devel@common-lisp.net >>> http://common-lisp.net/cgi-bin/mailman/listinfo/postmodern-devel >>> >> >> _______________________________________________ >> postmodern-devel mailing list >> postmodern-devel@common-lisp.net >> http://common-lisp.net/cgi-bin/mailman/listinfo/postmodern-devel >> > > > > -- > --------------------------------------------------- > Dr Lucas Hope - (646) 2332123 after 3pm US EST > Machine Learning and Software Engineering Consultant > Melbourne, Australia > > _______________________________________________ > postmodern-devel mailing list > postmodern-devel@common-lisp.net > http://common-lisp.net/cgi-bin/mailman/listinfo/postmodern-devel > _______________________________________________ postmodern-devel mailing list postmodern-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/postmodern-devel