diff --git a/src/parsers/command-csv.lisp b/src/parsers/command-csv.lisp index c50c084..230d210 100644 --- a/src/parsers/command-csv.lisp +++ b/src/parsers/command-csv.lisp @@ -189,15 +189,6 @@ (defrule csv-field-options (? csv-field-option-list)) -(defrule csv-raw-field-name (and (or #\_ (alpha-char-p character)) - (* (or (alpha-char-p character) - (digit-char-p character) - #\Space - #\. - #\$ - #\_))) - (:text t)) - (defrule csv-bare-field-name (and (or #\_ (alpha-char-p character)) (* (or (alpha-char-p character) (digit-char-p character) @@ -207,9 +198,10 @@ (:lambda (name) (string-downcase (text name)))) -(defrule csv-quoted-field-name (and #\" csv-raw-field-name #\") +(defrule csv-quoted-field-name (or (and #\' (* (not #\')) #\') + (and #\" (* (not #\")) #\")) (:lambda (csv-field-name) - (bind (((_ name _) csv-field-name)) name))) + (bind (((_ name _) csv-field-name)) (text name)))) (defrule csv-field-name (or csv-quoted-field-name csv-bare-field-name)) diff --git a/test/csv-non-printable.load b/test/csv-non-printable.load index f172b4f..b87f921 100644 --- a/test/csv-non-printable.load +++ b/test/csv-non-printable.load @@ -4,7 +4,11 @@ LOAD CSV FROM inline with encoding 'LATIN1' + HAVING FIELDS ("Some-Field", c2, c3) INTO postgresql:///pgloader?tab_csv + ( + c1 text using "Some-Field", c2, c3 + ) WITH truncate, skip header = 0, fields terminated by ',',