diff --git a/AUTHORS b/AUTHORS index fb1478c3b..dea9f4e5c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -52,6 +52,7 @@ Jeffrey Charles Jerome Meyer Jiajia Zhong Jian Zhen +Jille Timmermans Joshua Prunier Julien Lefevre Julien Schmidt diff --git a/infile.go b/infile.go index 3279dcffd..e2378ae8e 100644 --- a/infile.go +++ b/infile.go @@ -19,7 +19,7 @@ import ( var ( fileRegister map[string]bool fileRegisterLock sync.RWMutex - readerRegister map[string]func() io.Reader + readerRegister map[string]func(*Config) io.Reader readerRegisterLock sync.RWMutex ) @@ -66,10 +66,21 @@ func DeregisterLocalFile(filePath string) { // if err != nil { // ... func RegisterReaderHandler(name string, handler func() io.Reader) { + RegisterReaderHandlerWithConfig(name, func(*Config) io.Reader { + return handler() + }) +} + +// RegisterReaderHandlerWithConfig is like RegisterReaderHandler but the +// callback receives a copy of the configuration. +// The configuration should not be modified. +// This allows the caller to receive information about the connection, like the +// timezone. +func RegisterReaderHandlerWithConfig(name string, handler func(*Config) io.Reader) { readerRegisterLock.Lock() // lazy map init if readerRegister == nil { - readerRegister = make(map[string]func() io.Reader) + readerRegister = make(map[string]func(*Config) io.Reader) } readerRegister[name] = handler @@ -110,7 +121,7 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) { readerRegisterLock.RUnlock() if inMap { - rdr = handler() + rdr = handler(mc.cfg.Clone()) if rdr != nil { if cl, ok := rdr.(io.Closer); ok { defer deferredClose(&err, cl)