driver.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. "bufio"
  11. "database/sql"
  12. "database/sql/driver"
  13. "net"
  14. )
  15. type mysqlDriver struct{}
  16. // Open new Connection.
  17. // See https://github.com/Go-SQL-Driver/MySQL#dsn-data-source-name for how
  18. // the DSN string is formated
  19. func (d *mysqlDriver) Open(dsn string) (driver.Conn, error) {
  20. var err error
  21. // New mysqlConn
  22. mc := new(mysqlConn)
  23. mc.cfg = parseDSN(dsn)
  24. // Connect to Server
  25. mc.netConn, err = net.Dial(mc.cfg.net, mc.cfg.addr)
  26. if err != nil {
  27. return nil, err
  28. }
  29. mc.bufReader = bufio.NewReader(mc.netConn)
  30. // Reading Handshake Initialization Packet
  31. err = mc.readInitPacket()
  32. if err != nil {
  33. return nil, err
  34. }
  35. // Send Client Authentication Packet
  36. err = mc.writeAuthPacket()
  37. if err != nil {
  38. return nil, err
  39. }
  40. // Read Result Packet
  41. err = mc.readResultOK()
  42. if err != nil {
  43. return nil, err
  44. }
  45. // Handle DSN Params
  46. err = mc.handleParams()
  47. if err != nil {
  48. return nil, err
  49. }
  50. return mc, err
  51. }
  52. func init() {
  53. sql.Register("mysql", &mysqlDriver{})
  54. }