Slobodan,

Hi. Postmodern has been merged in as an "official" store though it's
not quite ready for production use to be honest. You would need to
manually manage per-request-thread database connections. This also
concerns the clsql backend to some degree (see the recent CLSQL-Fluid
thread). I'm relieved to hear that you like it and that it's
simplifying *anything* at the moment. :)
I'm going to finally settle in today and tomorrow to work on getting
the Store API extended for that.

You raise a very good point about dao-table-name. That hadn't occurred
to me during development. Postgres definitely supports composite keys
so I'm not sure what your concern is with class-id-slot-name. Even if
"under the covers" it was actually only using one primary key, I don't
see the benefit in taking the car of the list. It would at best
*slightly* simplify some client code. Correct me if I'm wrong.

Thanks for bringing the dao-table-name issue to light. I'll get that
committed to my fork with credit to you this afternoon if that's
alright.

Cheers,
B

On Jan 1, 7:13 pm, Slobodan Milnović <[email protected]>
wrote:
> Hi,
>
> I have updated weblocks to the latest version, since I've seen that
> the postmodern store has become part of the "official" stores. I like
> it so far, it simplifies so much the things I want to do.
>
> Also, I propose the following modifications to the
> stores/postmodern/postmodern.lisp file:
>
> - class-id-slot-name
> dao-keys returns a list of keys that an dao class uses. AFAIK there is
> no more than one primary key for each postgresql table, so it should
> be ok to car the list, but don't take my word for granted. I hope that
> someone else can confirm that.
>
> - find-persistent-objects
> Original is great for "straightforward" uses, when you have tables
> that are all located in public scheme. But, there are 2 cases where it
> is not so, with one of which I had an issue, so that is the main
> reason I had to modify the code.
>
> 1. Postmodern dao class can have the same name as the postgresql
> table, but with :table-name you can put something else, for example:
>
> (defclass mytable ()
>     ((firstcolumn :accessor firstcolumn :column t :initarg firstcolumn))
>     (:metaclass dao-class)
>     (:table-name "mysweettable")
>     (:keys firstcolumn))
>
> So, in this case, the class name is "mytable" but the name of the
> actual table in postgresql db is "mysweettable", and there will be an
> error "there is no table mytable"...
>
> 2. Postmodern dao class supports different scheme, in which case you
> must use :table-name as in
>
> (:table-name "myscheme.mytable")
>
> and in that case there is again the problem that class name and table
> name differ.
>
> Using dao-table-name both of these issues are solved - if the dao
> class has the :table-name defined, it will return that, and if
> :table-name is not defined, dao-table-name returns the class name
> since it then becomes the value of the :table-name. I have used
> explicit package declaration while modifying the code, so you can
> remove it if you want to...
>
> I have one question that has been bugging me today while I have been
> trying to solve my issues with the postmodern store. It is related to
> my still very lacking knowledge of common lisp and CLOS. Let me use
> the mytable class above for the example. I have to
>
> (defvar mytable (defclass mytable ..... ))
>
> to use (class-id-slot-name mytable), because for some reason that I
> don't understand (class-id-slot-name 'mytable) won't work, in that
> case it doesn't reckognize myclass as dao-class but returns the ID as
> the ID for weblocks, and not FIRSTCOLUMN. I'm already using unique
> sequences in the postgresql tables, and I'd like to reuse them as IDs
> for the weblocks objects. As far as I could understand from the few
> books and links that I have stuided so far, it is related to the way
> lisp works with variables and values, but I still don't quite
> understand it.
>
> Below is the diff:
>
> --- original-postmodern.lisp    2011-01-02 00:49:15.746939996 +0100
> +++ postmodern.lisp     2011-01-02 00:47:31.696939991 +0100
> @@ -117,9 +117,9 @@
>  ;;;;;;;;;;;;;
>  ;;; Utils ;;;
>  ;;;;;;;;;;;;;
> -(defmethod class-id-slot-name ((class dao-class))
> +(defmethod class-id-slot-name ((class postmodern:dao-class))
>    ;; Returns a list of the column names which compose the primary key.
> -  (dao-keys class))
> +          (car (postmodern:dao-keys class)))
>
>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> @@ -131,7 +131,7 @@
>  (defmethod find-persistent-objects ((store database-connection) class-name
>                                     &key order-by range where
>                                     &allow-other-keys)
> -  (let* ((base-expr `(:select '* :from ,class-name ,@(when where
> (list :where where))))
> +          (let* ((base-expr `(:select '* :from
> ,(postmodern:dao-table-name class-name) ,@(when where (list :where
> where))))
>          (order-expr (or `(,@(when order-by
>                                `(:order-by ,base-expr ,(car
> order-by)))) base-expr))
>          (sql-expr (or `(,@(when range
> @@ -140,6 +140,6 @@
>
>  (defmethod count-persistent-objects ((store database-connection) class-name
>                                      &key where &allow-other-keys)
> -  (let ((sql-expr `(:select (:count '*) :from ,class-name
> +          (let ((sql-expr `(:select (:count '*) :from
> ,(postmodern:dao-table-name class-name)
>                             ,@(when where (list :where where)))))
>      (query (sql-compile sql-expr) :single)))

-- 
You received this message because you are subscribed to the Google Groups 
"weblocks" 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/weblocks?hl=en.

Reply via email to