This PR updates the lib/pq driver to the current master head to pick up the deadlock fix in lib/pq#993 Hopefully this will resolve our CI issues. Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Lauris BH <lauris@nix.lv>tags/v1.13.0-rc1
@@ -60,7 +60,7 @@ require ( | |||
github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4 | |||
github.com/klauspost/compress v1.10.11 | |||
github.com/lafriks/xormstore v1.3.2 | |||
github.com/lib/pq v1.7.0 | |||
github.com/lib/pq v1.8.1-0.20200908161135-083382b7e6fc | |||
github.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96 | |||
github.com/markbates/goth v1.61.2 | |||
github.com/mattn/go-isatty v0.0.12 |
@@ -618,6 +618,8 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | |||
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | |||
github.com/lib/pq v1.7.0 h1:h93mCPfUSkaul3Ka/VG8uZdmW1uMHDGxzu0NWHuJmHY= | |||
github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= | |||
github.com/lib/pq v1.8.1-0.20200908161135-083382b7e6fc h1:ERSU1OvZ6MdWhHieo2oT7xwR/HCksqKdgK6iYPU5pHI= | |||
github.com/lib/pq v1.8.1-0.20200908161135-083382b7e6fc/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= | |||
github.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96 h1:uNwtsDp7ci48vBTTxDuwcoTXz4lwtDTe7TjCQ0noaWY= | |||
github.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96/go.mod h1:mmIfjCSQlGYXmJ95jFN84AkQFnVABtKuJL8IrzwvUKQ= | |||
github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de h1:nyxwRdWHAVxpFcDThedEgQ07DbcRc5xgNObtbTp76fk= |
@@ -3,6 +3,7 @@ language: go | |||
go: | |||
- 1.13.x | |||
- 1.14.x | |||
- 1.15.x | |||
- master | |||
sudo: true | |||
@@ -13,6 +14,7 @@ env: | |||
- PQGOSSLTESTS=1 | |||
- PQSSLCERTTEST_PATH=$PWD/certs | |||
- PGHOST=127.0.0.1 | |||
- GODEBUG=x509ignoreCN=0 | |||
matrix: | |||
- PGVERSION=10 | |||
- PGVERSION=9.6 |
@@ -19,10 +19,7 @@ | |||
* Unix socket support | |||
* Notifications: `LISTEN`/`NOTIFY` | |||
* pgpass support | |||
## Optional Features | |||
* GSS (Kerberos) auth (to use, see GoDoc) | |||
* GSS (Kerberos) auth | |||
## Tests | |||
@@ -1074,9 +1074,9 @@ func isDriverSetting(key string) bool { | |||
return true | |||
case "binary_parameters": | |||
return true | |||
case "service": | |||
case "krbsrvname": | |||
return true | |||
case "spn": | |||
case "krbspn": | |||
return true | |||
default: | |||
return false | |||
@@ -1168,13 +1168,13 @@ func (cn *conn) auth(r *readBuf, o values) { | |||
var token []byte | |||
if spn, ok := o["spn"]; ok { | |||
if spn, ok := o["krbspn"]; ok { | |||
// Use the supplied SPN if provided.. | |||
token, err = cli.GetInitTokenFromSpn(spn) | |||
} else { | |||
// Allow the kerberos service name to be overridden | |||
service := "postgres" | |||
if val, ok := o["service"]; ok { | |||
if val, ok := o["krbsrvname"]; ok { | |||
service = val | |||
} | |||
@@ -27,7 +27,7 @@ func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) { | |||
return c.open(ctx) | |||
} | |||
// Driver returnst the underlying driver of this Connector. | |||
// Driver returns the underlying driver of this Connector. | |||
func (c *Connector) Driver() driver.Driver { | |||
return &Driver{} | |||
} |
@@ -49,6 +49,7 @@ type copyin struct { | |||
buffer []byte | |||
rowData chan []byte | |||
done chan bool | |||
driver.Result | |||
closed bool | |||
@@ -151,6 +152,8 @@ func (ci *copyin) resploop() { | |||
switch t { | |||
case 'C': | |||
// complete | |||
res, _ := ci.cn.parseComplete(r.string()) | |||
ci.setResult(res) | |||
case 'N': | |||
if n := ci.cn.noticeHandler; n != nil { | |||
n(parseError(&r)) | |||
@@ -201,6 +204,22 @@ func (ci *copyin) setError(err error) { | |||
ci.Unlock() | |||
} | |||
func (ci *copyin) setResult(result driver.Result) { | |||
ci.Lock() | |||
ci.Result = result | |||
ci.Unlock() | |||
} | |||
func (ci *copyin) getResult() driver.Result { | |||
ci.Lock() | |||
result := ci.Result | |||
ci.Unlock() | |||
if result == nil { | |||
return driver.RowsAffected(0) | |||
} | |||
return result | |||
} | |||
func (ci *copyin) NumInput() int { | |||
return -1 | |||
} | |||
@@ -231,7 +250,11 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) { | |||
} | |||
if len(v) == 0 { | |||
return driver.RowsAffected(0), ci.Close() | |||
if err := ci.Close(); err != nil { | |||
return driver.RowsAffected(0), err | |||
} | |||
return ci.getResult(), nil | |||
} | |||
numValues := len(v) |
@@ -57,8 +57,6 @@ supported: | |||
* sslkey - Key file location. The file must contain PEM encoded data. | |||
* sslrootcert - The location of the root certificate file. The file | |||
must contain PEM encoded data. | |||
* spn - Configures GSS (Kerberos) SPN. | |||
* service - GSS (Kerberos) service name to use when constructing the SPN (default is `postgres`). | |||
Valid values for sslmode are: | |||
@@ -259,5 +257,12 @@ package: | |||
This package is in a separate module so that users who don't need Kerberos | |||
don't have to download unnecessary dependencies. | |||
When imported, additional connection string parameters are supported: | |||
* krbsrvname - GSS (Kerberos) service name when constructing the | |||
SPN (default is `postgres`). This will be combined with the host | |||
to form the full SPN: `krbsrvname/host`. | |||
* krbspn - GSS (Kerberos) SPN. This takes priority over | |||
`krbsrvname` if present. | |||
*/ | |||
package pq |
@@ -502,7 +502,7 @@ github.com/kr/text | |||
## explicit | |||
github.com/lafriks/xormstore | |||
github.com/lafriks/xormstore/util | |||
# github.com/lib/pq v1.7.0 | |||
# github.com/lib/pq v1.8.1-0.20200908161135-083382b7e6fc | |||
## explicit | |||
github.com/lib/pq | |||
github.com/lib/pq/oid |