summaryrefslogtreecommitdiff
path: root/vendor/github.com/lib
diff options
context:
space:
mode:
authorShelley-BaoYue <baoyue2@huawei.com>2023-11-20 11:42:37 +0800
committerShelley-BaoYue <baoyue2@huawei.com>2023-11-20 11:42:37 +0800
commit3fa467e18e0cfb38f55d65f05e3f1641e5f84df1 (patch)
tree0eb5d24e2736ab24934bcfa718f56a143c8bd6d2 /vendor/github.com/lib
parentbump sigs.k8s.io/controller-runtime to 0.15.3 (diff)
downloadkubeedge-3fa467e18e0cfb38f55d65f05e3f1641e5f84df1.tar.gz
bump helm to v1.12.3
Signed-off-by: Shelley-BaoYue <baoyue2@huawei.com>
Diffstat (limited to 'vendor/github.com/lib')
-rw-r--r--vendor/github.com/lib/pq/conn.go136
-rw-r--r--vendor/github.com/lib/pq/conn_go115.go8
-rw-r--r--vendor/github.com/lib/pq/copy.go35
3 files changed, 121 insertions, 58 deletions
diff --git a/vendor/github.com/lib/pq/conn.go b/vendor/github.com/lib/pq/conn.go
index e70b386ff..da4ff9de6 100644
--- a/vendor/github.com/lib/pq/conn.go
+++ b/vendor/github.com/lib/pq/conn.go
@@ -2,6 +2,7 @@ package pq
import (
"bufio"
+ "bytes"
"context"
"crypto/md5"
"crypto/sha256"
@@ -112,7 +113,9 @@ type defaultDialer struct {
func (d defaultDialer) Dial(network, address string) (net.Conn, error) {
return d.d.Dial(network, address)
}
-func (d defaultDialer) DialTimeout(network, address string, timeout time.Duration) (net.Conn, error) {
+func (d defaultDialer) DialTimeout(
+ network, address string, timeout time.Duration,
+) (net.Conn, error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return d.DialContext(ctx, network, address)
@@ -260,47 +263,56 @@ func (cn *conn) handlePgpass(o values) {
}
defer file.Close()
scanner := bufio.NewScanner(io.Reader(file))
+ // From: https://github.com/tg/pgpass/blob/master/reader.go
+ for scanner.Scan() {
+ if scanText(scanner.Text(), o) {
+ break
+ }
+ }
+}
+
+// GetFields is a helper function for scanText.
+func getFields(s string) []string {
+ fs := make([]string, 0, 5)
+ f := make([]rune, 0, len(s))
+
+ var esc bool
+ for _, c := range s {
+ switch {
+ case esc:
+ f = append(f, c)
+ esc = false
+ case c == '\\':
+ esc = true
+ case c == ':':
+ fs = append(fs, string(f))
+ f = f[:0]
+ default:
+ f = append(f, c)
+ }
+ }
+ return append(fs, string(f))
+}
+
+// ScanText assists HandlePgpass in it's objective.
+func scanText(line string, o values) bool {
hostname := o["host"]
ntw, _ := network(o)
port := o["port"]
db := o["dbname"]
username := o["user"]
- // From: https://github.com/tg/pgpass/blob/master/reader.go
- getFields := func(s string) []string {
- fs := make([]string, 0, 5)
- f := make([]rune, 0, len(s))
-
- var esc bool
- for _, c := range s {
- switch {
- case esc:
- f = append(f, c)
- esc = false
- case c == '\\':
- esc = true
- case c == ':':
- fs = append(fs, string(f))
- f = f[:0]
- default:
- f = append(f, c)
- }
- }
- return append(fs, string(f))
+ if len(line) == 0 || line[0] == '#' {
+ return false
}
- for scanner.Scan() {
- line := scanner.Text()
- if len(line) == 0 || line[0] == '#' {
- continue
- }
- split := getFields(line)
- if len(split) != 5 {
- continue
- }
- if (split[0] == "*" || split[0] == hostname || (split[0] == "localhost" && (hostname == "" || ntw == "unix"))) && (split[1] == "*" || split[1] == port) && (split[2] == "*" || split[2] == db) && (split[3] == "*" || split[3] == username) {
- o["password"] = split[4]
- return
- }
+ split := getFields(line)
+ if len(split) != 5 {
+ return false
+ }
+ if (split[0] == "*" || split[0] == hostname || (split[0] == "localhost" && (hostname == "" || ntw == "unix"))) && (split[1] == "*" || split[1] == port) && (split[2] == "*" || split[2] == db) && (split[3] == "*" || split[3] == username) {
+ o["password"] = split[4]
+ return true
}
+ return false
}
func (cn *conn) writeBuf(b byte) *writeBuf {
@@ -765,7 +777,9 @@ func (noRows) RowsAffected() (int64, error) {
// Decides which column formats to use for a prepared statement. The input is
// an array of type oids, one element per result column.
-func decideColumnFormats(colTyps []fieldDesc, forceText bool) (colFmts []format, colFmtData []byte) {
+func decideColumnFormats(
+ colTyps []fieldDesc, forceText bool,
+) (colFmts []format, colFmtData []byte) {
if len(colTyps) == 0 {
return nil, colFmtDataAllText
}
@@ -1631,10 +1645,10 @@ func (rs *rows) NextResultSet() error {
// QuoteIdentifier quotes an "identifier" (e.g. a table or a column name) to be
// used as part of an SQL statement. For example:
//
-// tblname := "my_table"
-// data := "my_data"
-// quoted := pq.QuoteIdentifier(tblname)
-// err := db.Exec(fmt.Sprintf("INSERT INTO %s VALUES ($1)", quoted), data)
+// tblname := "my_table"
+// data := "my_data"
+// quoted := pq.QuoteIdentifier(tblname)
+// err := db.Exec(fmt.Sprintf("INSERT INTO %s VALUES ($1)", quoted), data)
//
// Any double quotes in name will be escaped. The quoted identifier will be
// case sensitive when used in a query. If the input string contains a zero
@@ -1647,12 +1661,24 @@ func QuoteIdentifier(name string) string {
return `"` + strings.Replace(name, `"`, `""`, -1) + `"`
}
+// BufferQuoteIdentifier satisfies the same purpose as QuoteIdentifier, but backed by a
+// byte buffer.
+func BufferQuoteIdentifier(name string, buffer *bytes.Buffer) {
+ end := strings.IndexRune(name, 0)
+ if end > -1 {
+ name = name[:end]
+ }
+ buffer.WriteRune('"')
+ buffer.WriteString(strings.Replace(name, `"`, `""`, -1))
+ buffer.WriteRune('"')
+}
+
// QuoteLiteral quotes a 'literal' (e.g. a parameter, often used to pass literal
// to DDL and other statements that do not accept parameters) to be used as part
// of an SQL statement. For example:
//
-// exp_date := pq.QuoteLiteral("2023-01-05 15:00:00Z")
-// err := db.Exec(fmt.Sprintf("CREATE ROLE my_user VALID UNTIL %s", exp_date))
+// exp_date := pq.QuoteLiteral("2023-01-05 15:00:00Z")
+// err := db.Exec(fmt.Sprintf("CREATE ROLE my_user VALID UNTIL %s", exp_date))
//
// Any single quotes in name will be escaped. Any backslashes (i.e. "\") will be
// replaced by two backslashes (i.e. "\\") and the C-style escape identifier
@@ -1808,7 +1834,11 @@ func (cn *conn) readParseResponse() {
}
}
-func (cn *conn) readStatementDescribeResponse() (paramTyps []oid.Oid, colNames []string, colTyps []fieldDesc) {
+func (cn *conn) readStatementDescribeResponse() (
+ paramTyps []oid.Oid,
+ colNames []string,
+ colTyps []fieldDesc,
+) {
for {
t, r := cn.recv1()
switch t {
@@ -1896,7 +1926,9 @@ func (cn *conn) postExecuteWorkaround() {
}
// Only for Exec(), since we ignore the returned data
-func (cn *conn) readExecuteResponse(protocolState string) (res driver.Result, commandTag string, err error) {
+func (cn *conn) readExecuteResponse(
+ protocolState string,
+) (res driver.Result, commandTag string, err error) {
for {
t, r := cn.recv1()
switch t {
@@ -2062,3 +2094,19 @@ func alnumLowerASCII(ch rune) rune {
}
return -1 // discard
}
+
+// The database/sql/driver package says:
+// All Conn implementations should implement the following interfaces: Pinger, SessionResetter, and Validator.
+var _ driver.Pinger = &conn{}
+var _ driver.SessionResetter = &conn{}
+
+func (cn *conn) ResetSession(ctx context.Context) error {
+ // Ensure bad connections are reported: From database/sql/driver:
+ // If a connection is never returned to the connection pool but immediately reused, then
+ // ResetSession is called prior to reuse but IsValid is not called.
+ return cn.err.get()
+}
+
+func (cn *conn) IsValid() bool {
+ return cn.err.get() == nil
+}
diff --git a/vendor/github.com/lib/pq/conn_go115.go b/vendor/github.com/lib/pq/conn_go115.go
new file mode 100644
index 000000000..f4ef030f9
--- /dev/null
+++ b/vendor/github.com/lib/pq/conn_go115.go
@@ -0,0 +1,8 @@
+//go:build go1.15
+// +build go1.15
+
+package pq
+
+import "database/sql/driver"
+
+var _ driver.Validator = &conn{}
diff --git a/vendor/github.com/lib/pq/copy.go b/vendor/github.com/lib/pq/copy.go
index 2f5c1ec8a..a8f16b2b2 100644
--- a/vendor/github.com/lib/pq/copy.go
+++ b/vendor/github.com/lib/pq/copy.go
@@ -1,6 +1,7 @@
package pq
import (
+ "bytes"
"context"
"database/sql/driver"
"encoding/binary"
@@ -20,29 +21,35 @@ var (
// CopyIn creates a COPY FROM statement which can be prepared with
// Tx.Prepare(). The target table should be visible in search_path.
func CopyIn(table string, columns ...string) string {
- stmt := "COPY " + QuoteIdentifier(table) + " ("
+ buffer := bytes.NewBufferString("COPY ")
+ BufferQuoteIdentifier(table, buffer)
+ buffer.WriteString(" (")
+ makeStmt(buffer, columns...)
+ return buffer.String()
+}
+
+// MakeStmt makes the stmt string for CopyIn and CopyInSchema.
+func makeStmt(buffer *bytes.Buffer, columns ...string) {
+ //s := bytes.NewBufferString()
for i, col := range columns {
if i != 0 {
- stmt += ", "
+ buffer.WriteString(", ")
}
- stmt += QuoteIdentifier(col)
+ BufferQuoteIdentifier(col, buffer)
}
- stmt += ") FROM STDIN"
- return stmt
+ buffer.WriteString(") FROM STDIN")
}
// CopyInSchema creates a COPY FROM statement which can be prepared with
// Tx.Prepare().
func CopyInSchema(schema, table string, columns ...string) string {
- stmt := "COPY " + QuoteIdentifier(schema) + "." + QuoteIdentifier(table) + " ("
- for i, col := range columns {
- if i != 0 {
- stmt += ", "
- }
- stmt += QuoteIdentifier(col)
- }
- stmt += ") FROM STDIN"
- return stmt
+ buffer := bytes.NewBufferString("COPY ")
+ BufferQuoteIdentifier(schema, buffer)
+ buffer.WriteRune('.')
+ BufferQuoteIdentifier(table, buffer)
+ buffer.WriteString(" (")
+ makeStmt(buffer, columns...)
+ return buffer.String()
}
type copyin struct {