Upgrade xorm to v1.0.3 (#12210)
Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: techknowlogick <techknowlogick@gitea.io>tokarchuk/v1.17
parent
3973a4609e
commit
d08996c7b9
@ -1,6 +1,8 @@ |
||||
module github.com/PuerkitoBio/goquery |
||||
|
||||
require ( |
||||
github.com/andybalholm/cascadia v1.0.0 |
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a |
||||
github.com/andybalholm/cascadia v1.1.0 |
||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 |
||||
) |
||||
|
||||
go 1.13 |
||||
|
@ -1,5 +1,8 @@ |
||||
github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= |
||||
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= |
||||
github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo= |
||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= |
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= |
||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4rx037g3fmfhe5SasG3U= |
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= |
||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= |
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= |
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,26 @@ |
||||
package cascadia |
||||
|
||||
// Specificity is the CSS specificity as defined in
|
||||
// https://www.w3.org/TR/selectors/#specificity-rules
|
||||
// with the convention Specificity = [A,B,C].
|
||||
type Specificity [3]int |
||||
|
||||
// returns `true` if s < other (strictly), false otherwise
|
||||
func (s Specificity) Less(other Specificity) bool { |
||||
for i := range s { |
||||
if s[i] < other[i] { |
||||
return true |
||||
} |
||||
if s[i] > other[i] { |
||||
return false |
||||
} |
||||
} |
||||
return false |
||||
} |
||||
|
||||
func (s Specificity) Add(other Specificity) Specificity { |
||||
for i, sp := range other { |
||||
s[i] += sp |
||||
} |
||||
return s |
||||
} |
@ -1,23 +0,0 @@ |
||||
# Contributing Guidelines |
||||
|
||||
## Reporting Issues |
||||
|
||||
Before creating a new Issue, please check first if a similar Issue [already exists](https://github.com/go-sql-driver/mysql/issues?state=open) or was [recently closed](https://github.com/go-sql-driver/mysql/issues?direction=desc&page=1&sort=updated&state=closed). |
||||
|
||||
## Contributing Code |
||||
|
||||
By contributing to this project, you share your code under the Mozilla Public License 2, as specified in the LICENSE file. |
||||
Don't forget to add yourself to the AUTHORS file. |
||||
|
||||
### Code Review |
||||
|
||||
Everyone is invited to review and comment on pull requests. |
||||
If it looks fine to you, comment with "LGTM" (Looks good to me). |
||||
|
||||
If changes are required, notice the reviewers with "PTAL" (Please take another look) after committing the fixes. |
||||
|
||||
Before merging the Pull Request, at least one [team member](https://github.com/go-sql-driver?tab=members) must have commented with "LGTM". |
||||
|
||||
## Development Ideas |
||||
|
||||
If you are looking for ideas for code contributions, please check our [Development Ideas](https://github.com/go-sql-driver/mysql/wiki/Development-Ideas) Wiki page. |
@ -0,0 +1,54 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build linux darwin dragonfly freebsd netbsd openbsd solaris illumos
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"errors" |
||||
"io" |
||||
"net" |
||||
"syscall" |
||||
) |
||||
|
||||
var errUnexpectedRead = errors.New("unexpected read from socket") |
||||
|
||||
func connCheck(conn net.Conn) error { |
||||
var sysErr error |
||||
|
||||
sysConn, ok := conn.(syscall.Conn) |
||||
if !ok { |
||||
return nil |
||||
} |
||||
rawConn, err := sysConn.SyscallConn() |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
err = rawConn.Read(func(fd uintptr) bool { |
||||
var buf [1]byte |
||||
n, err := syscall.Read(int(fd), buf[:]) |
||||
switch { |
||||
case n == 0 && err == nil: |
||||
sysErr = io.EOF |
||||
case n > 0: |
||||
sysErr = errUnexpectedRead |
||||
case err == syscall.EAGAIN || err == syscall.EWOULDBLOCK: |
||||
sysErr = nil |
||||
default: |
||||
sysErr = err |
||||
} |
||||
return true |
||||
}) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
return sysErr |
||||
} |
@ -1,19 +1,17 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build appengine
|
||||
// +build !linux,!darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!illumos
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"google.golang.org/appengine/cloudsql" |
||||
) |
||||
import "net" |
||||
|
||||
func init() { |
||||
RegisterDial("cloudsql", cloudsql.Dial) |
||||
func connCheck(conn net.Conn) error { |
||||
return nil |
||||
} |
@ -1,207 +0,0 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build go1.8
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"context" |
||||
"database/sql" |
||||
"database/sql/driver" |
||||
) |
||||
|
||||
// Ping implements driver.Pinger interface
|
||||
func (mc *mysqlConn) Ping(ctx context.Context) (err error) { |
||||
if mc.closed.IsSet() { |
||||
errLog.Print(ErrInvalidConn) |
||||
return driver.ErrBadConn |
||||
} |
||||
|
||||
if err = mc.watchCancel(ctx); err != nil { |
||||
return |
||||
} |
||||
defer mc.finish() |
||||
|
||||
if err = mc.writeCommandPacket(comPing); err != nil { |
||||
return |
||||
} |
||||
|
||||
return mc.readResultOK() |
||||
} |
||||
|
||||
// BeginTx implements driver.ConnBeginTx interface
|
||||
func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { |
||||
if err := mc.watchCancel(ctx); err != nil { |
||||
return nil, err |
||||
} |
||||
defer mc.finish() |
||||
|
||||
if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { |
||||
level, err := mapIsolationLevel(opts.Isolation) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
} |
||||
|
||||
return mc.begin(opts.ReadOnly) |
||||
} |
||||
|
||||
func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { |
||||
dargs, err := namedValueToValue(args) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
if err := mc.watchCancel(ctx); err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
rows, err := mc.query(query, dargs) |
||||
if err != nil { |
||||
mc.finish() |
||||
return nil, err |
||||
} |
||||
rows.finish = mc.finish |
||||
return rows, err |
||||
} |
||||
|
||||
func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { |
||||
dargs, err := namedValueToValue(args) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
if err := mc.watchCancel(ctx); err != nil { |
||||
return nil, err |
||||
} |
||||
defer mc.finish() |
||||
|
||||
return mc.Exec(query, dargs) |
||||
} |
||||
|
||||
func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { |
||||
if err := mc.watchCancel(ctx); err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
stmt, err := mc.Prepare(query) |
||||
mc.finish() |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
select { |
||||
default: |
||||
case <-ctx.Done(): |
||||
stmt.Close() |
||||
return nil, ctx.Err() |
||||
} |
||||
return stmt, nil |
||||
} |
||||
|
||||
func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { |
||||
dargs, err := namedValueToValue(args) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
if err := stmt.mc.watchCancel(ctx); err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
rows, err := stmt.query(dargs) |
||||
if err != nil { |
||||
stmt.mc.finish() |
||||
return nil, err |
||||
} |
||||
rows.finish = stmt.mc.finish |
||||
return rows, err |
||||
} |
||||
|
||||
func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { |
||||
dargs, err := namedValueToValue(args) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
if err := stmt.mc.watchCancel(ctx); err != nil { |
||||
return nil, err |
||||
} |
||||
defer stmt.mc.finish() |
||||
|
||||
return stmt.Exec(dargs) |
||||
} |
||||
|
||||
func (mc *mysqlConn) watchCancel(ctx context.Context) error { |
||||
if mc.watching { |
||||
// Reach here if canceled,
|
||||
// so the connection is already invalid
|
||||
mc.cleanup() |
||||
return nil |
||||
} |
||||
// When ctx is already cancelled, don't watch it.
|
||||
if err := ctx.Err(); err != nil { |
||||
return err |
||||
} |
||||
// When ctx is not cancellable, don't watch it.
|
||||
if ctx.Done() == nil { |
||||
return nil |
||||
} |
||||
// When watcher is not alive, can't watch it.
|
||||
if mc.watcher == nil { |
||||
return nil |
||||
} |
||||
|
||||
mc.watching = true |
||||
mc.watcher <- ctx |
||||
return nil |
||||
} |
||||
|
||||
func (mc *mysqlConn) startWatcher() { |
||||
watcher := make(chan mysqlContext, 1) |
||||
mc.watcher = watcher |
||||
finished := make(chan struct{}) |
||||
mc.finished = finished |
||||
go func() { |
||||
for { |
||||
var ctx mysqlContext |
||||
select { |
||||
case ctx = <-watcher: |
||||
case <-mc.closech: |
||||
return |
||||
} |
||||
|
||||
select { |
||||
case <-ctx.Done(): |
||||
mc.cancel(ctx.Err()) |
||||
case <-finished: |
||||
case <-mc.closech: |
||||
return |
||||
} |
||||
} |
||||
}() |
||||
} |
||||
|
||||
func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { |
||||
nv.Value, err = converter{}.ConvertValue(nv.Value) |
||||
return |
||||
} |
||||
|
||||
// ResetSession implements driver.SessionResetter.
|
||||
// (From Go 1.10)
|
||||
func (mc *mysqlConn) ResetSession(ctx context.Context) error { |
||||
if mc.closed.IsSet() { |
||||
return driver.ErrBadConn |
||||
} |
||||
return nil |
||||
} |
@ -0,0 +1,146 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"context" |
||||
"database/sql/driver" |
||||
"net" |
||||
) |
||||
|
||||
type connector struct { |
||||
cfg *Config // immutable private copy.
|
||||
} |
||||
|
||||
// Connect implements driver.Connector interface.
|
||||
// Connect returns a connection to the database.
|
||||
func (c *connector) Connect(ctx context.Context) (driver.Conn, error) { |
||||
var err error |
||||
|
||||
// New mysqlConn
|
||||
mc := &mysqlConn{ |
||||
maxAllowedPacket: maxPacketSize, |
||||
maxWriteSize: maxPacketSize - 1, |
||||
closech: make(chan struct{}), |
||||
cfg: c.cfg, |
||||
} |
||||
mc.parseTime = mc.cfg.ParseTime |
||||
|
||||
// Connect to Server
|
||||
dialsLock.RLock() |
||||
dial, ok := dials[mc.cfg.Net] |
||||
dialsLock.RUnlock() |
||||
if ok { |
||||
dctx := ctx |
||||
if mc.cfg.Timeout > 0 { |
||||
var cancel context.CancelFunc |
||||
dctx, cancel = context.WithTimeout(ctx, c.cfg.Timeout) |
||||
defer cancel() |
||||
} |
||||
mc.netConn, err = dial(dctx, mc.cfg.Addr) |
||||
} else { |
||||
nd := net.Dialer{Timeout: mc.cfg.Timeout} |
||||
mc.netConn, err = nd.DialContext(ctx, mc.cfg.Net, mc.cfg.Addr) |
||||
} |
||||
|
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
// Enable TCP Keepalives on TCP connections
|
||||
if tc, ok := mc.netConn.(*net.TCPConn); ok { |
||||
if err := tc.SetKeepAlive(true); err != nil { |
||||
// Don't send COM_QUIT before handshake.
|
||||
mc.netConn.Close() |
||||
mc.netConn = nil |
||||
return nil, err |
||||
} |
||||
} |
||||
|
||||
// Call startWatcher for context support (From Go 1.8)
|
||||
mc.startWatcher() |
||||
if err := mc.watchCancel(ctx); err != nil { |
||||
mc.cleanup() |
||||
return nil, err |
||||
} |
||||
defer mc.finish() |
||||
|
||||
mc.buf = newBuffer(mc.netConn) |
||||
|
||||
// Set I/O timeouts
|
||||
mc.buf.timeout = mc.cfg.ReadTimeout |
||||
mc.writeTimeout = mc.cfg.WriteTimeout |
||||
|
||||
// Reading Handshake Initialization Packet
|
||||
authData, plugin, err := mc.readHandshakePacket() |
||||
if err != nil { |
||||
mc.cleanup() |
||||
return nil, err |
||||
} |
||||
|
||||
if plugin == "" { |
||||
plugin = defaultAuthPlugin |
||||
} |
||||
|
||||
// Send Client Authentication Packet
|
||||
authResp, err := mc.auth(authData, plugin) |
||||
if err != nil { |
||||
// try the default auth plugin, if using the requested plugin failed
|
||||
errLog.Print("could not use requested auth plugin '"+plugin+"': ", err.Error()) |
||||
plugin = defaultAuthPlugin |
||||
authResp, err = mc.auth(authData, plugin) |
||||
if err != nil { |
||||
mc.cleanup() |
||||
return nil, err |
||||
} |
||||
} |
||||
if err = mc.writeHandshakeResponsePacket(authResp, plugin); err != nil { |
||||
mc.cleanup() |
||||
return nil, err |
||||
} |
||||
|
||||
// Handle response to auth packet, switch methods if possible
|
||||
if err = mc.handleAuthResult(authData, plugin); err != nil { |
||||
// Authentication failed and MySQL has already closed the connection
|
||||
// (https://dev.mysql.com/doc/internals/en/authentication-fails.html).
|
||||
// Do not send COM_QUIT, just cleanup and return the error.
|
||||
mc.cleanup() |
||||
return nil, err |
||||
} |
||||
|
||||
if mc.cfg.MaxAllowedPacket > 0 { |
||||
mc.maxAllowedPacket = mc.cfg.MaxAllowedPacket |
||||
} else { |
||||
// Get max allowed packet size
|
||||
maxap, err := mc.getSystemVar("max_allowed_packet") |
||||
if err != nil { |
||||
mc.Close() |
||||
return nil, err |
||||
} |
||||
mc.maxAllowedPacket = stringToInt(maxap) - 1 |
||||
} |
||||
if mc.maxAllowedPacket < maxPacketSize { |
||||
mc.maxWriteSize = mc.maxAllowedPacket |
||||
} |
||||
|
||||
// Handle DSN Params
|
||||
err = mc.handleParams() |
||||
if err != nil { |
||||
mc.Close() |
||||
return nil, err |
||||
} |
||||
|
||||
return mc, nil |
||||
} |
||||
|
||||
// Driver implements driver.Connector interface.
|
||||
// Driver returns &MySQLDriver{}.
|
||||
func (c *connector) Driver() driver.Driver { |
||||
return &MySQLDriver{} |
||||
} |
@ -0,0 +1,3 @@ |
||||
module github.com/go-sql-driver/mysql |
||||
|
||||
go 1.10 |
@ -0,0 +1,50 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"database/sql/driver" |
||||
"fmt" |
||||
"time" |
||||
) |
||||
|
||||
// Scan implements the Scanner interface.
|
||||
// The value type must be time.Time or string / []byte (formatted time-string),
|
||||
// otherwise Scan fails.
|
||||
func (nt *NullTime) Scan(value interface{}) (err error) { |
||||
if value == nil { |
||||
nt.Time, nt.Valid = time.Time{}, false |
||||
return |
||||
} |
||||
|
||||
switch v := value.(type) { |
||||
case time.Time: |
||||
nt.Time, nt.Valid = v, true |
||||
return |
||||
case []byte: |
||||
nt.Time, err = parseDateTime(string(v), time.UTC) |
||||
nt.Valid = (err == nil) |
||||
return |
||||
case string: |
||||
nt.Time, err = parseDateTime(v, time.UTC) |
||||
nt.Valid = (err == nil) |
||||
return |
||||
} |
||||
|
||||
nt.Valid = false |
||||
return fmt.Errorf("Can't convert %T to time.Time", value) |
||||
} |
||||
|
||||
// Value implements the driver Valuer interface.
|
||||
func (nt NullTime) Value() (driver.Value, error) { |
||||
if !nt.Valid { |
||||
return nil, nil |
||||
} |
||||
return nt.Time, nil |
||||
} |
@ -0,0 +1,31 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build go1.13
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"database/sql" |
||||
) |
||||
|
||||
// NullTime represents a time.Time that may be NULL.
|
||||
// NullTime implements the Scanner interface so
|
||||
// it can be used as a scan destination:
|
||||
//
|
||||
// var nt NullTime
|
||||
// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt)
|
||||
// ...
|
||||
// if nt.Valid {
|
||||
// // use nt.Time
|
||||
// } else {
|
||||
// // NULL value
|
||||
// }
|
||||
//
|
||||
// This NullTime implementation is not driver-specific
|
||||
type NullTime sql.NullTime |
@ -0,0 +1,34 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build !go1.13
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"time" |
||||
) |
||||
|
||||
// NullTime represents a time.Time that may be NULL.
|
||||
// NullTime implements the Scanner interface so
|
||||
// it can be used as a scan destination:
|
||||
//
|
||||
// var nt NullTime
|
||||
// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt)
|
||||
// ...
|
||||
// if nt.Valid {
|
||||
// // use nt.Time
|
||||
// } else {
|
||||
// // NULL value
|
||||
// }
|
||||
//
|
||||
// This NullTime implementation is not driver-specific
|
||||
type NullTime struct { |
||||
Time time.Time |
||||
Valid bool // Valid is true if Time is not NULL
|
||||
} |
@ -1,40 +0,0 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build go1.7
|
||||
// +build !go1.8
|
||||
|
||||
package mysql |
||||
|
||||
import "crypto/tls" |
||||
|
||||
func cloneTLSConfig(c *tls.Config) *tls.Config { |
||||
return &tls.Config{ |
||||
Rand: c.Rand, |
||||
Time: c.Time, |
||||
Certificates: c.Certificates, |
||||
NameToCertificate: c.NameToCertificate, |
||||
GetCertificate: c.GetCertificate, |
||||
RootCAs: c.RootCAs, |
||||
NextProtos: c.NextProtos, |
||||
ServerName: c.ServerName, |
||||
ClientAuth: c.ClientAuth, |
||||
ClientCAs: c.ClientCAs, |
||||
InsecureSkipVerify: c.InsecureSkipVerify, |
||||
CipherSuites: c.CipherSuites, |
||||
PreferServerCipherSuites: c.PreferServerCipherSuites, |
||||
SessionTicketsDisabled: c.SessionTicketsDisabled, |
||||
SessionTicketKey: c.SessionTicketKey, |
||||
ClientSessionCache: c.ClientSessionCache, |
||||
MinVersion: c.MinVersion, |
||||
MaxVersion: c.MaxVersion, |
||||
CurvePreferences: c.CurvePreferences, |
||||
DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, |
||||
Renegotiation: c.Renegotiation, |
||||
} |
||||
} |
@ -1,50 +0,0 @@ |
||||
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
|
||||
//
|
||||
// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
// +build go1.8
|
||||
|
||||
package mysql |
||||
|
||||
import ( |
||||
"crypto/tls" |
||||
"database/sql" |
||||
"database/sql/driver" |
||||
"errors" |
||||
"fmt" |
||||
) |
||||
|
||||
func cloneTLSConfig(c *tls.Config) *tls.Config { |
||||
return c.Clone() |
||||
} |
||||
|
||||
func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { |
||||
dargs := make([]driver.Value, len(named)) |
||||
for n, param := range named { |
||||
if len(param.Name) > 0 { |
||||
// TODO: support the use of Named Parameters #561
|
||||
return nil, errors.New("mysql: driver does not support the use of Named Parameters") |
||||
} |
||||
dargs[n] = param.Value |
||||
} |
||||
return dargs, nil |
||||
} |
||||
|
||||
func mapIsolationLevel(level driver.IsolationLevel) (string, error) { |
||||
switch sql.IsolationLevel(level) { |
||||
case sql.LevelRepeatableRead: |
||||
return "REPEATABLE READ", nil |
||||
case sql.LevelReadCommitted: |
||||
return "READ COMMITTED", nil |
||||
case sql.LevelReadUncommitted: |
||||
return "READ UNCOMMITTED", nil |
||||
case sql.LevelSerializable: |
||||
return "SERIALIZABLE", nil |
||||
default: |
||||
return "", fmt.Errorf("mysql: unsupported isolation level: %v", level) |
||||
} |
||||
} |
@ -1,62 +0,0 @@ |
||||
// Copyright 2013 Google Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Apache 2.0
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
/* |
||||
Package cloudsql exposes access to Google Cloud SQL databases. |
||||
|
||||
This package does not work in App Engine "flexible environment". |
||||
|
||||
This package is intended for MySQL drivers to make App Engine-specific |
||||
connections. Applications should use this package through database/sql: |
||||
Select a pure Go MySQL driver that supports this package, and use sql.Open |
||||
with protocol "cloudsql" and an address of the Cloud SQL instance. |
||||
|
||||
A Go MySQL driver that has been tested to work well with Cloud SQL |
||||
is the go-sql-driver: |
||||
import "database/sql" |
||||
import _ "github.com/go-sql-driver/mysql" |
||||
|
||||
db, err := sql.Open("mysql", "user@cloudsql(project-id:instance-name)/dbname") |
||||
|
||||
|
||||
Another driver that works well with Cloud SQL is the mymysql driver: |
||||
import "database/sql" |
||||
import _ "github.com/ziutek/mymysql/godrv" |
||||
|
||||
db, err := sql.Open("mymysql", "cloudsql:instance-name*dbname/user/password") |
||||
|
||||
|
||||
Using either of these drivers, you can perform a standard SQL query. |
||||
This example assumes there is a table named 'users' with |
||||
columns 'first_name' and 'last_name': |
||||
|
||||
rows, err := db.Query("SELECT first_name, last_name FROM users") |
||||
if err != nil { |
||||
log.Errorf(ctx, "db.Query: %v", err) |
||||
} |
||||
defer rows.Close() |
||||
|
||||
for rows.Next() { |
||||
var firstName string |
||||
var lastName string |
||||
if err := rows.Scan(&firstName, &lastName); err != nil { |
||||
log.Errorf(ctx, "rows.Scan: %v", err) |
||||
continue |
||||
} |
||||
log.Infof(ctx, "First: %v - Last: %v", firstName, lastName) |
||||
} |
||||
if err := rows.Err(); err != nil { |
||||
log.Errorf(ctx, "Row error: %v", err) |
||||
} |
||||
*/ |
||||
package cloudsql |
||||
|
||||
import ( |
||||
"net" |
||||
) |
||||
|
||||
// Dial connects to the named Cloud SQL instance.
|
||||
func Dial(instance string) (net.Conn, error) { |
||||
return connect(instance) |
||||
} |
@ -1,17 +0,0 @@ |
||||
// Copyright 2013 Google Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Apache 2.0
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build appengine
|
||||
|
||||
package cloudsql |
||||
|
||||
import ( |
||||
"net" |
||||
|
||||
"appengine/cloudsql" |
||||
) |
||||
|
||||
func connect(instance string) (net.Conn, error) { |
||||
return cloudsql.Dial(instance) |
||||
} |
@ -1,16 +0,0 @@ |
||||
// Copyright 2013 Google Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Apache 2.0
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build !appengine
|
||||
|
||||
package cloudsql |
||||
|
||||
import ( |
||||
"errors" |
||||
"net" |
||||
) |
||||
|
||||
func connect(instance string) (net.Conn, error) { |
||||
return nil, errors.New(`cloudsql: not supported in App Engine "flexible environment"`) |
||||
} |
Loading…
Reference in new issue