[postmodern-devel] TRUNCATE missing

Nicolas Martyanoff khaelin at gmail.com
Sat May 21 13:59:45 UTC 2011


Marijn Haverbeke <marijnh at gmail.com> writes:

>> It seems the TRUNCATE¹ operation is missing, would it be possible to add
>> it to postmodern?
>
> You could, and I'd welcome such a patch. But since it's a rather
> simple command, you can also just use a string to issue it.

I tries the following:

(def-sql-op :truncate (&rest args)
  (split-on-keywords ((tables *) (only - ?) (identity - ?) (fkey - ?))
      (cons :tables args)
    (let ((identity-str (case identity
                          (:restart-identity "RESTART IDENTITY ")
                          (:continue-identity "CONTINUE IDENTITY ")))
          (fkey-str (case fkey
                      (:cascade "CASCADE ")
                      (:restrict "RESTRICT "))))
      `("(TRUNCATE "
        ,@(when only '("ONLY "))
        ,@(sql-expand-list tables)
        ,@(when identity identity-str)
        ,@(when fkey fkey-str)
        ")"))))

But SPLIT-ON-KEYWORDS doesn't work as I thought (doesn't seem to like
several optional keywords without arguments).

Would you have a suggestion on how to fix this ?

I'm also not sure about how to have the :only keyword before the tables
so that it matches the order in the SQL command.

Regards,

-- 
Nicolas Martyanoff
   http://codemore.org
   khaelin at gmail.com




More information about the postmodern-devel mailing list