mirror of
https://github.com/dimitri/pgloader.git
synced 2025-08-10 16:26:58 +02:00
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.
176 lines
3.9 KiB
Common Lisp
176 lines
3.9 KiB
Common Lisp
;;;; 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*)
|