Is there a better way to write "common table expressions " (with and with recursive) than:

(def-sql-op :with (&rest args)
  (let ((x (butlast args)) (y (last args))) 
  `("WITH " ,@(sql-expand-list x) ,@(sql-expand (car y)))))

(def-sql-op :with-recursive (&rest args)
  (let ((x (butlast args)) (y (last args))) 
  `("WITH RECURSIVE " ,@(sql-expand-list x) ,@(sql-expand (car y)))))

They work for me, but I have the feeling there is a better way to do it.

Actual use would be something like the following (using the example from the postgresql website):

(defun test2 ()
  (query (:with-recursive
            (:as 'regional-sales
                 (:select 'region (:as (:sum 'amount) 'total-sales)
                          :from 'orders  
                          :group-by 'region))
            (:as 'top-regions 
                 (:select 'region
                          :from 'regional-sales
                          :where (:> 'total-sales
                                     (:select (:/ (:sum
                                                   'total-sales) 10)
                                              :from 'regional-sales))))
            (:select 'region 'product (:as (:sum 'quantity) 'product-units)
                     (:as (:sum 'amount) 'product-sales)
                     :from 'orders
                     :where (:in 'region (:select 'region :from 'top-regions))
                     :group-by 'region 'product))))

Sabra