driver.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright 2012 Julien Schmidt. All rights reserved.
  2. // http://www.julienschmidt.com
  3. //
  4. // This Source Code Form is subject to the terms of the Mozilla Public
  5. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  6. // You can obtain one at http://mozilla.org/MPL/2.0/.
  7. // Go MySQL Driver - A MySQL-Driver for Go's database/sql package
  8. package mysql
  9. import (
  10. "database/sql"
  11. "database/sql/driver"
  12. "net"
  13. )
  14. type mysqlDriver struct{}
  15. // Open new Connection.
  16. // See https://github.com/Go-SQL-Driver/MySQL#dsn-data-source-name for how
  17. // the DSN string is formated
  18. func (d *mysqlDriver) Open(dsn string) (driver.Conn, error) {
  19. var err error
  20. // New mysqlConn
  21. mc := new(mysqlConn)
  22. mc.cfg = parseDSN(dsn)
  23. // Connect to Server
  24. mc.netConn, err = net.Dial(mc.cfg.net, mc.cfg.addr)
  25. if err != nil {
  26. return nil, err
  27. }
  28. mc.buf = newBuffer(mc.netConn)
  29. // Reading Handshake Initialization Packet
  30. err = mc.readInitPacket()
  31. if err != nil {
  32. return nil, err
  33. }
  34. // Send Client Authentication Packet
  35. err = mc.writeAuthPacket()
  36. if err != nil {
  37. return nil, err
  38. }
  39. // Read Result Packet
  40. err = mc.readResultOK()
  41. if err != nil {
  42. return nil, err
  43. }
  44. // Handle DSN Params
  45. err = mc.handleParams()
  46. if err != nil {
  47. return nil, err
  48. }
  49. return mc, err
  50. }
  51. func init() {
  52. sql.Register("mysql", &mysqlDriver{})
  53. }