aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/lib/pq/copy.go
diff options
context:
space:
mode:
authorGibheer <gibheer+git@zero-knowledge.org>2022-11-11 11:22:50 +0100
committerGibheer <gibheer+git@zero-knowledge.org>2022-11-11 11:22:50 +0100
commitfe6bd04947e26a962fab3cf7a354abd44333bda6 (patch)
treede4714364747c05d391ab665176413eb24938545 /vendor/github.com/lib/pq/copy.go
parentdc9dfb76ff9375e6368e9e05a40e6dc07b325a8d (diff)
update dependencies
Diffstat (limited to 'vendor/github.com/lib/pq/copy.go')
-rw-r--r--vendor/github.com/lib/pq/copy.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/vendor/github.com/lib/pq/copy.go b/vendor/github.com/lib/pq/copy.go
index c072bc3..2f5c1ec 100644
--- a/vendor/github.com/lib/pq/copy.go
+++ b/vendor/github.com/lib/pq/copy.go
@@ -1,6 +1,7 @@
package pq
import (
+ "context"
"database/sql/driver"
"encoding/binary"
"errors"
@@ -273,6 +274,43 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) {
return driver.RowsAffected(0), nil
}
+// CopyData inserts a raw string into the COPY stream. The insert is
+// asynchronous and CopyData can return errors from previous CopyData calls to
+// the same COPY stmt.
+//
+// You need to call Exec(nil) to sync the COPY stream and to get any
+// errors from pending data, since Stmt.Close() doesn't return errors
+// to the user.
+func (ci *copyin) CopyData(ctx context.Context, line string) (r driver.Result, err error) {
+ if ci.closed {
+ return nil, errCopyInClosed
+ }
+
+ if finish := ci.cn.watchCancel(ctx); finish != nil {
+ defer finish()
+ }
+
+ if err := ci.getBad(); err != nil {
+ return nil, err
+ }
+ defer ci.cn.errRecover(&err)
+
+ if err := ci.err(); err != nil {
+ return nil, err
+ }
+
+ ci.buffer = append(ci.buffer, []byte(line)...)
+ ci.buffer = append(ci.buffer, '\n')
+
+ if len(ci.buffer) > ciBufferFlushSize {
+ ci.flush(ci.buffer)
+ // reset buffer, keep bytes for message identifier and length
+ ci.buffer = ci.buffer[:5]
+ }
+
+ return driver.RowsAffected(0), nil
+}
+
func (ci *copyin) Close() (err error) {
if ci.closed { // Don't do anything, we're already closed
return nil