pgloader/package.lisp
Dimitri Fontaine 6e3767bb37 Implement generic field to columns projection with support for user code.
And use that new facility in the Archive mode of operations, which is a
practical unit of testing and milestone to reach. We have enough code to
actually compile and try running the parser's output.
2013-09-25 00:01:46 +02:00

176 lines
3.9 KiB
Common Lisp
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;;; package.lisp
;;;
;;; To avoid circular files dependencies, define all the packages here
;;;
(defpackage #:pgloader.utils
(:use #:cl #:pgloader.params)
(:import-from #:cl-log
#:defcategory
#:log-manager
#:start-messenger
#:log-message
#:ring-messenger
#:text-file-messenger
#:text-stream-messenger
#:formatted-message)
(:export #:log-message
#:report-header
#:report-table-name
#:report-results
#:report-footer
#:format-interval
#:timing
#:make-pgstate
#:pgstate-get-table
#:pgstate-add-table
#:pgstate-setf
#:pgstate-incf
#:pgstate-decf
#:pgtable-reject-data
#:pgtable-reject-logs
#:report-pgtable-stats
#:report-pgstate-stats
#:report-summary
#:with-stats-collection
#:slurp-file-into-string
#:camelCase-to-colname
#:make-kernel))
(defpackage #:pgloader.queue
(:use #:cl)
(:export #:map-pop-queue
#:map-push-queue))
(defpackage #:pgloader.pgsql
(:use #:cl #:pgloader.params #:pgloader.utils)
(:export #:with-pgsql-transaction
#:pgsql-execute
#:truncate-table
#:copy-from-file
#:copy-from-queue
#:list-databases
#:list-tables
#:list-tables-cols
#:reset-all-sequences
#:execute
#:get-date-columns
#:format-row))
(defpackage #:pgloader.parser
(:use #:cl #:esrap #:pgloader.params)
(:import-from #:pgloader.pgsql
#:with-pgsql-transaction
#:pgsql-execute)
(:export #:parse-command
#:run-command))
;;
;; Specific source handling
;;
(defpackage #:pgloader.csv
(:use #:cl #:pgloader.params #:pgloader.utils)
(:export #:*csv-path-root*
#:get-pathname
#:copy-to-queue
#:copy-from-file
#:import-database
#:guess-csv-params
#:guess-all-csv-params))
(defpackage #:pgloader.db3
(:use #:cl #:pgloader.params #:pgloader.utils)
(:import-from #:pgloader.pgsql
#:with-pgsql-transaction
#:pgsql-execute)
(:export #:map-rows
#:copy-to
#:copy-to-queue
#:stream-file))
(defpackage #:pgloader.archive
(:use #:cl #:pgloader.params #:pgloader.utils #:pgloader.csv)
(:import-from #:pgloader.pgsql
#:with-pgsql-transaction
#:pgsql-execute)
(:export #:*default-tmpdir*
#:http-fetch-file
#:expand-archive
#:get-matching-filenames
#:import-csv-from-zip))
(defpackage #:pgloader.syslog
(:use #:cl #:pgloader.params #:pgloader.utils)
(:import-from #:pgloader.pgsql
#:with-pgsql-transaction
#:pgsql-execute)
(:export #:stream-messages
#:start-syslog-server
#:send-message))
(defpackage #:pgloader.mysql
(:use #:cl #:pgloader.params #:pgloader.utils)
(:import-from #:pgloader.pgsql
#:with-pgsql-transaction
#:pgsql-execute)
(:export #:*cast-rules*
#:*default-cast-rules*
#:map-rows
#:copy-to
#:list-databases
#:list-tables
#:export-database
#:export-import-database
#:stream-table
#:stream-database))
;;
;; Main package
;;
(defpackage #:pgloader
(:use #:cl #:pgloader.params #:pgloader.utils)
(:import-from #:pgloader.pgsql
#:copy-from-file
#:list-databases
#:list-tables)
(:import-from #:pgloader.parser
#:run-command
#:parse-command)
(:export #:*state*
#:*csv-path-root*
#:*reject-path-root*
#:*pgconn-host*
#:*pgconn-port*
#:*pgconn-user*
#:*pgconn-pass*
#:*pg-settings*
#:*myconn-host*
#:*myconn-port*
#:*myconn-user*
#:*myconn-pass*
#:copy-from-file
#:list-databases
#:list-tables))
(in-package #:pgloader)
;;;
;;; Some package names are a little too long to my taste and don't ship with
;;; nicknames, so use `rename-package' here to give them some new nicknames.
;;;
(loop
for (package . nicknames)
in '((lparallel lp)
(lparallel.queue lq)
(simple-date date)
(split-sequence sq))
do (rename-package package package nicknames))
;;;
;;; and recompile. Now you can pre-allocate the queue by passing a size to
;;; MAKE-QUEUE. (You could pass a number before too, but it was ignored.)
;;;
(pushnew :lparallel.with-vector-queue *features*)