;;;; package.lisp ;;; ;;; To avoid circular files dependencies, define all the packages here ;;; (defpackage #:pgloader.logs (:use #:cl #:pgloader.params) (:import-from #:cl-log #:defcategory #:log-manager #:start-messenger #:ring-messenger #:text-file-messenger #:text-stream-messenger #:formatted-message) (:export #:*log-messengers* #:start-logger #:stop-logger)) (defpackage #:pgloader.monitor (:use #:cl #:pgloader.params) (:export #:with-monitor #:*monitoring-queue* #:log-message #:send-event #:start-monitor #:stop-monitor)) (defpackage #:pgloader.utils (:use #:cl #:pgloader.params) (:import-from #:pgloader.monitor #:with-monitor #:*monitoring-queue* #:log-message) (:export #:with-monitor #: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 #:report-full-summary #:with-stats-collection #:slurp-file-into-string #:camelCase-to-colname #:make-kernel #:list-encodings-and-aliases #:show-encodings #:make-external-format)) ;;; ;;; PostgreSQL COPY support, and generic sources API. ;;; (defpackage #:pgloader.pgsql (:use #:cl #:pgloader.params #:pgloader.utils) (:export #:with-pgsql-transaction #:with-pgsql-connection #:pgsql-execute #:pgsql-execute-with-timing #:truncate-table #:copy-from-file #:copy-from-queue #:list-databases #:list-tables #:list-columns #:list-tables-cols #:list-tables-and-fkeys #:list-reserved-keywords #:list-table-oids #:reset-all-sequences #:get-date-columns #:format-vector-row #:apply-identifier-case #:create-tables #:format-pgsql-column #:format-extra-type #:make-pgsql-fkey #:format-pgsql-create-fkey #:format-pgsql-drop-fkey #:make-pgsql-index #:index-table-name #:format-pgsql-create-index #:create-indexes-in-kernel)) (defpackage #:pgloader.sources (:use #:cl #:pgloader.params #:pgloader.utils) (:export #:copy #:source-db #:target-db #:source #:target #:fields #:columns #:transforms #:map-rows #:copy-from #:copy-to-queue #:copy-to #:copy-database #:filter-column-list #:with-open-file-or-stream #:get-pathname #:get-absolute-pathname #:project-fields #:reformat-then-process)) (defpackage #:pgloader.queue (:use #:cl #:pgloader.params) (:import-from #:pgloader.monitor #:log-message) (:import-from #:pgloader.pgsql #:format-vector-row) (:import-from #:pgloader.sources #:map-rows #:transforms) (:export #:map-push-queue)) ;;; ;;; Other utilities ;;; (defpackage #:pgloader.ini (:use #:cl #:pgloader.params #:pgloader.utils) (:import-from #:pgloader.pgsql #:list-columns #:with-pgsql-transaction #:pgsql-execute) (:export #:read-ini-file #:parse-ini-file #:write-command-to-string #:convert-ini-into-commands #:convert-ini-into-files)) (defpackage #:pgloader.parser (:use #:cl #:esrap #:pgloader.params #:pgloader.utils) (:import-from #:pgloader.pgsql #:with-pgsql-transaction #:pgsql-execute) (:export #:parse-commands #:run-commands #:with-database-uri)) ;; ;; Specific source handling ;; (defpackage #:pgloader.csv (:use #:cl #:pgloader.params #:pgloader.utils #:pgloader.sources #:pgloader.queue) (:export #:*csv-path-root* #:get-pathname #:copy-csv #:copy-to-queue #:copy-from #:import-database #:guess-csv-params #:guess-all-csv-params)) (defpackage #:pgloader.fixed (:use #:cl #:pgloader.params #:pgloader.utils #:pgloader.sources #:pgloader.queue) (:export #:copy-fixed #:copy-to-queue #:copy-from)) (defpackage #:pgloader.db3 (:use #:cl #:pgloader.params #:pgloader.utils #:pgloader.sources #:pgloader.queue) (:import-from #:pgloader.pgsql #:with-pgsql-transaction #:pgsql-execute #:pgsql-execute-with-timing #:apply-identifier-case #:create-tables #:format-pgsql-column #:format-vector-row) (:export #:copy-db3 #:map-rows #:copy-to #:copy-to-queue #:stream-file)) (defpackage #:pgloader.mysql (:use #:cl #:pgloader.params #:pgloader.utils #:pgloader.sources #:pgloader.queue) (:import-from #:pgloader.pgsql #:with-pgsql-transaction #:pgsql-execute #:pgsql-execute-with-timing #:apply-identifier-case #:list-tables-and-fkeys #:list-table-oids #:create-tables #:format-pgsql-column #:format-extra-type #:make-pgsql-fkey #:format-pgsql-create-fkey #:format-pgsql-drop-fkey #:make-pgsql-index #:format-pgsql-create-index #:create-indexes-in-kernel #:format-vector-row) (:export #:copy-mysql #:*cast-rules* #:*default-cast-rules* #:with-mysql-connection #:map-rows #:copy-to #:copy-from #:copy-database #:list-databases #:list-tables #:export-database #:export-import-database)) (defpackage #:pgloader.sqlite (:use #:cl #:pgloader.params #:pgloader.utils #:pgloader.sources #:pgloader.queue) (:import-from #:pgloader.pgsql #:with-pgsql-transaction #:pgsql-execute #:pgsql-execute-with-timing #:apply-identifier-case #:create-tables #:format-pgsql-column #:make-pgsql-index #:index-table-name #:format-pgsql-create-index #:create-indexes-in-kernel) (:export #:copy-sqlite #:map-rows #:copy-to #:copy-from #:copy-database #:list-tables)) (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)) ;; ;; Not really a source, more a util package to deal with http and zip ;; (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)) ;; ;; 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-commands #:parse-commands #:with-database-uri) (:export #:*version-string* #:*state* #:*csv-path-root* #:*root-dir* #:*pgconn-host* #:*pgconn-port* #:*pgconn-user* #:*pgconn-pass* #:*pg-dbname* #:*pg-settings* #:*myconn-host* #:*myconn-port* #:*myconn-user* #:*myconn-pass* #:*my-dbname* #:run-commands #:parse-commands #:with-database-uri #:slurp-file-into-string #: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) (py-configparser ini)) do (rename-package package package nicknames))