diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2011-03-22 16:12:46 +0100 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2011-03-22 16:12:46 +0100 |
commit | df928a8339af1148ec835d8f917385a73d57c767 (patch) | |
tree | cf7d7a39bac6c7b9781a9b11f98463b6e765ccff | |
parent | 0c55d369ae0884d4b127745bd19ee00d323897c8 (diff) |
Calculate global article revision IDs by recursion over the child-parent relationship.
-rw-r--r-- | mulkcms.lisp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/mulkcms.lisp b/mulkcms.lisp index 7c8bad5..1ca5359 100644 --- a/mulkcms.lisp +++ b/mulkcms.lisp @@ -561,6 +561,33 @@ FROM article_revisions WHERE status = 'syndicated'" :single)) + (revisions-with-global-ids + (mapcar (lambda (x) + (let ((global-id + ;; FIXME: May want to specify a + ;; stopping condition in the + ;; recursive query. + (query + "WITH RECURSIVE q(rid, rglobal_id) AS ( + SELECT id, global_id + FROM article_revisions + WHERE id = $1 + UNION + SELECT id, global_id FROM q + JOIN article_revision_parenthood + ON rid = child + JOIN article_revisions + ON parent = id + ) + SELECT rglobal_id + FROM q + WHERE rglobal_id IS NOT NULL" + (getf x :revision) + :single))) + ;; NOTE: This shadows the existing + ;; :GLOBAL-ID key in X. + (list* :global-id global-id x))) + revisions)) (template-params (list :title *site-name* :last-updated-date last-updated @@ -569,7 +596,7 @@ :global-id *feed-global-id* :authors authors :feed-uri (link-to :view-atom-feed :absolute t) - :articles revisions))) + :articles revisions-with-global-ids))) (expand-template (template "article_feed") template-params)))))))))) |