From ecd4f31d127db7a634989bbf10fa484f13c86e05 Mon Sep 17 00:00:00 2001 From: Dimitri Fontaine Date: Mon, 16 Jun 2014 16:27:46 +0200 Subject: [PATCH] Accept more syntaxes for fields and columns, fixes #79. With this patch it's now possible to "quote" column names and to use _ (underscore) as the leading character in a field or column name. Of course it is still unnecessary to quote the column names, but handling the PostgreSQL quoting rules can't be bad here. --- src/parser.lisp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/parser.lisp b/src/parser.lisp index 2ff09ba..8c9e457 100644 --- a/src/parser.lisp +++ b/src/parser.lisp @@ -1558,12 +1558,20 @@ load database (:lambda (options) (alexandria:alist-plist options))) -(defrule csv-field-name (and (alpha-char-p character) - (* (or (alpha-char-p character) - (digit-char-p character) - #\_))) +(defrule csv-bare-field-name (and (or #\_ (alpha-char-p character)) + (* (or (alpha-char-p character) + (digit-char-p character) + #\_))) (:text t)) +(defrule csv-quoted-field-name (and #\" csv-bare-field-name #\") + (:lambda (csv-field-name) + (destructuring-bind (open name close) csv-field-name + (declare (ignore open close)) + name))) + +(defrule csv-field-name (or csv-quoted-field-name csv-bare-field-name)) + (defrule csv-source-field (and csv-field-name csv-field-options) (:destructure (name opts) `(,name ,@opts)))