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.hope@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 marijnh@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.hope@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