From ee498111bc96db83993d94642bf08168be23a6bb Mon Sep 17 00:00:00 2001 From: Dimitri Fontaine Date: Fri, 2 May 2014 22:39:50 +0200 Subject: [PATCH] Implement MySQL local (socket) connection. Fix #39. The parser was happily parsing such a connection string as the following, but the rest of the code didn't really know what to do about it: mysql://unix:/var/run/mysqld/mysqld.sock:/main In passing, fix bugs where the PostgreSQL unix domain socket connection was still shy of a brick load, omitting to consider the case where the connection host is actually a list of '(:unix . "path/to/socket"). --- src/parser.lisp | 14 +++++++------- src/sources/mysql-schema.lisp | 15 ++++++++++----- src/utils.lisp | 2 +- test/parse/hans.goeuro.load | 4 ++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/parser.lisp b/src/parser.lisp index d8e4609..c670923 100644 --- a/src/parser.lisp +++ b/src/parser.lisp @@ -924,12 +924,12 @@ (state-idx (pgloader.utils:make-pgstate)) (state-after (pgloader.utils:make-pgstate)) (pgloader.mysql:*cast-rules* ',casts) - (*myconn-host* ,myhost) + (*myconn-host* ',myhost) (*myconn-port* ,myport) (*myconn-user* ,myuser) (*myconn-pass* ,mypass) (*my-dbname* ,mydb) - (*pgconn-host* ,pghost) + (*pgconn-host* ',pghost) (*pgconn-port* ,pgport) (*pgconn-user* ,pguser) (*pgconn-pass* ,pgpass) @@ -1032,7 +1032,7 @@ load database `(lambda () (let* ((state-before (pgloader.utils:make-pgstate)) (*state* (pgloader.utils:make-pgstate)) - (*pgconn-host* ,host) + (*pgconn-host* ',host) (*pgconn-port* ,port) (*pgconn-user* ,user) (*pgconn-pass* ,password) @@ -1263,7 +1263,7 @@ load database `(lambda () (let* ((state-before (pgloader.utils:make-pgstate)) (*state* (pgloader.utils:make-pgstate)) - (*pgconn-host* ,host) + (*pgconn-host* ',host) (*pgconn-port* ,port) (*pgconn-user* ,user) (*pgconn-pass* ,password) @@ -1808,7 +1808,7 @@ load database (summary (null *state*)) (*state* (or *state* (pgloader.utils:make-pgstate))) (state-after ,(when after `(pgloader.utils:make-pgstate))) - (*pgconn-host* ,host) + (*pgconn-host* ',host) (*pgconn-port* ,port) (*pgconn-user* ,user) (*pgconn-pass* ,password) @@ -1880,7 +1880,7 @@ load database `(lambda () (let* ((state-before (pgloader.utils:make-pgstate)) (*state* (pgloader.utils:make-pgstate)) - (*pgconn-host* ,host) + (*pgconn-host* ',host) (*pgconn-port* ,port) (*pgconn-user* ,user) (*pgconn-pass* ,password) @@ -2051,7 +2051,7 @@ load database (parse 'db-connection-uri database-uri) (ecase type (:mysql - `(let* ((*myconn-host* ,host) + `(let* ((*myconn-host* ,(if (consp host) (list 'quote host) host)) (*myconn-port* ,port) (*myconn-user* ,user) (*myconn-pass* ,password) diff --git a/src/sources/mysql-schema.lisp b/src/sources/mysql-schema.lisp index 1a8ec82..cd39f4d 100644 --- a/src/sources/mysql-schema.lisp +++ b/src/sources/mysql-schema.lisp @@ -67,11 +67,16 @@ *myconn-pass*." `(let* ((dbname (or ,dbname *my-dbname*)) (*connection* - (qmynd:mysql-connect :host *myconn-host* - :port *myconn-port* - :username *myconn-user* - :password *myconn-pass* - :database dbname))) + (if (and (consp *myconn-host*) (eq :unix (car *myconn-host*))) + (qmynd:mysql-local-connect :path (cdr *myconn-host*) + :username *myconn-user* + :password *myconn-pass* + :database dbname) + (qmynd:mysql-connect :host *myconn-host* + :port *myconn-port* + :username *myconn-user* + :password *myconn-pass* + :database dbname)))) (unwind-protect (progn ,@forms) (qmynd:mysql-disconnect *connection*)))) diff --git a/src/utils.lisp b/src/utils.lisp index 427bcfe..878b4f4 100644 --- a/src/utils.lisp +++ b/src/utils.lisp @@ -328,7 +328,7 @@ (*pgconn-user* . ,*pgconn-user*) (*pgconn-pass* . ,*pgconn-pass*) (*pg-settings* . ',*pg-settings*) - (*myconn-host* . ,*myconn-host*) + (*myconn-host* . ',*myconn-host*) (*myconn-port* . ,*myconn-port*) (*myconn-user* . ,*myconn-user*) (*myconn-pass* . ,*myconn-pass*) diff --git a/test/parse/hans.goeuro.load b/test/parse/hans.goeuro.load index 6f85fb4..5f4992c 100644 --- a/test/parse/hans.goeuro.load +++ b/test/parse/hans.goeuro.load @@ -1,6 +1,6 @@ LOAD DATABASE - FROM mysql://root@localhost:3306/goeuro - INTO postgresql://dim@localhost:54393/godollar + FROM mysql://root@unix:/tmp/mysql.sock:/goeuro + INTO postgresql://dim@unix:/tmp:/godollar WITH include drop, create tables, create indexes, reset sequences