mirror of
https://github.com/dimitri/pgloader.git
synced 2025-08-08 07:16:58 +02:00
Split its content into separate files, so that each is easier to maintain, and to make it easier also to add support for new sources.
129 lines
3.7 KiB
Common Lisp
129 lines
3.7 KiB
Common Lisp
;;;
|
|
;;; Parse the pgloader commands grammar
|
|
;;;
|
|
|
|
(in-package :pgloader.parser)
|
|
|
|
;;;
|
|
;;; Keywords
|
|
;;;
|
|
(defmacro def-keyword-rule (keyword)
|
|
(let ((rule-name (read-from-string (format nil "kw-~a" keyword)))
|
|
(constant (read-from-string (format nil ":~a" keyword))))
|
|
`(defrule ,rule-name (and ignore-whitespace (~ ,keyword) ignore-whitespace)
|
|
(:constant ',constant))))
|
|
|
|
(eval-when (:load-toplevel :compile-toplevel :execute)
|
|
(def-keyword-rule "load")
|
|
(def-keyword-rule "data")
|
|
(def-keyword-rule "from")
|
|
(def-keyword-rule "csv")
|
|
(def-keyword-rule "dbf")
|
|
(def-keyword-rule "ixf")
|
|
(def-keyword-rule "fixed")
|
|
(def-keyword-rule "into")
|
|
(def-keyword-rule "with")
|
|
(def-keyword-rule "when")
|
|
(def-keyword-rule "set")
|
|
(def-keyword-rule "database")
|
|
(def-keyword-rule "messages")
|
|
(def-keyword-rule "matches")
|
|
(def-keyword-rule "in")
|
|
(def-keyword-rule "directory")
|
|
(def-keyword-rule "registering")
|
|
(def-keyword-rule "cast")
|
|
(def-keyword-rule "column")
|
|
(def-keyword-rule "target")
|
|
(def-keyword-rule "columns")
|
|
(def-keyword-rule "type")
|
|
(def-keyword-rule "extra")
|
|
(def-keyword-rule "include")
|
|
(def-keyword-rule "drop")
|
|
(def-keyword-rule "not")
|
|
(def-keyword-rule "to")
|
|
(def-keyword-rule "no")
|
|
(def-keyword-rule "null")
|
|
(def-keyword-rule "default")
|
|
(def-keyword-rule "typemod")
|
|
(def-keyword-rule "using")
|
|
(def-keyword-rule "getenv")
|
|
;; option for loading from a file
|
|
(def-keyword-rule "workers")
|
|
(def-keyword-rule "batch")
|
|
(def-keyword-rule "rows")
|
|
(def-keyword-rule "size")
|
|
(def-keyword-rule "concurrency")
|
|
(def-keyword-rule "reject")
|
|
(def-keyword-rule "file")
|
|
(def-keyword-rule "log")
|
|
(def-keyword-rule "level")
|
|
(def-keyword-rule "encoding")
|
|
(def-keyword-rule "decoding")
|
|
(def-keyword-rule "truncate")
|
|
(def-keyword-rule "lines")
|
|
(def-keyword-rule "having")
|
|
(def-keyword-rule "fields")
|
|
(def-keyword-rule "optionally")
|
|
(def-keyword-rule "enclosed")
|
|
(def-keyword-rule "by")
|
|
(def-keyword-rule "escaped")
|
|
(def-keyword-rule "terminated")
|
|
(def-keyword-rule "nullif")
|
|
(def-keyword-rule "blank")
|
|
(def-keyword-rule "trim")
|
|
(def-keyword-rule "both")
|
|
(def-keyword-rule "left")
|
|
(def-keyword-rule "right")
|
|
(def-keyword-rule "whitespace")
|
|
(def-keyword-rule "from")
|
|
(def-keyword-rule "for")
|
|
(def-keyword-rule "skip")
|
|
(def-keyword-rule "header")
|
|
(def-keyword-rule "null")
|
|
(def-keyword-rule "if")
|
|
(def-keyword-rule "as")
|
|
(def-keyword-rule "blanks")
|
|
(def-keyword-rule "date")
|
|
(def-keyword-rule "format")
|
|
(def-keyword-rule "keep")
|
|
(def-keyword-rule "trim")
|
|
(def-keyword-rule "unquoted")
|
|
;; option for MySQL imports
|
|
(def-keyword-rule "schema")
|
|
(def-keyword-rule "only")
|
|
(def-keyword-rule "drop")
|
|
(def-keyword-rule "create")
|
|
(def-keyword-rule "materialize")
|
|
(def-keyword-rule "reset")
|
|
(def-keyword-rule "table")
|
|
(def-keyword-rule "name")
|
|
(def-keyword-rule "names")
|
|
(def-keyword-rule "tables")
|
|
(def-keyword-rule "views")
|
|
(def-keyword-rule "indexes")
|
|
(def-keyword-rule "sequences")
|
|
(def-keyword-rule "foreign")
|
|
(def-keyword-rule "keys")
|
|
(def-keyword-rule "downcase")
|
|
(def-keyword-rule "quote")
|
|
(def-keyword-rule "identifiers")
|
|
(def-keyword-rule "including")
|
|
(def-keyword-rule "excluding")
|
|
;; option for loading from an archive
|
|
(def-keyword-rule "archive")
|
|
(def-keyword-rule "before")
|
|
(def-keyword-rule "after")
|
|
(def-keyword-rule "finally")
|
|
(def-keyword-rule "and")
|
|
(def-keyword-rule "do")
|
|
(def-keyword-rule "execute")
|
|
(def-keyword-rule "filename")
|
|
(def-keyword-rule "filenames")
|
|
(def-keyword-rule "matching")
|
|
(def-keyword-rule "first")
|
|
(def-keyword-rule "all"))
|
|
|
|
(defrule kw-auto-increment (and "auto_increment" (* (or #\Tab #\Space)))
|
|
(:constant :auto-increment))
|
|
|