go-sql-driver / go-sql-driver/mysql
[api design] Encoding values for LOAD DATA LOCAL INFILE
- Dominant language
- Go
- Stars
- 15.3k
- Forks
- 2.3k
- Avg merge
- 2h 23m
- Merged PRs (30d)
- 10
Description
Hi. I'm working on a feature for [sqlc](https://github.com/kyleconroy/sqlc) to do a bulk insert. sqlc generates a struct with the columns of the table, and I want to do a bulk insert of those.
Now my challenge is how to encode those values into a TSV as supported by https://dev.mysql.com/doc/refman/8.0/en/load-data.html#load-data-field-line-handling.
I wrote a small library for this (https://github.com/hexon/mysqltsv/blob/main/mysqltsv.go) but to correctly encode time.Time I need to know the Location from https://pkg.go.dev/github.com/go-sql-driver/mysql#Config.
What would be the cleanest way to support this?
* Expose a Config() method on `mysqlConn` which people could access through https://pkg.go.dev/database/sql#Conn.Raw
* Expose a Config(v any) function that takes the value from https://pkg.go.dev/database/sql#Conn.Raw (same as the previous, but as a function that takes an argument rather than a method's receiver)
* RegisterStructsHandler that is responsible for converting structs to TSV and can be used instead of RegisterReaderHandler.
* Pass the Config to the callback of RegisterReaderHandler (in a backwards compatible way)
I'd love to hear it if you any other suggestions.
Contributor guide
Assessment
This issue has not been assessed yet.