1package pgx 2 3import ( 4 "io" 5 6 "github.com/jackc/pgx/pgproto3" 7) 8 9func (c *Conn) readUntilCopyOutResponse() error { 10 for { 11 msg, err := c.rxMsg() 12 if err != nil { 13 return err 14 } 15 16 switch msg := msg.(type) { 17 case *pgproto3.CopyOutResponse: 18 return nil 19 default: 20 err = c.processContextFreeMsg(msg) 21 if err != nil { 22 return err 23 } 24 } 25 } 26} 27 28func (c *Conn) CopyToWriter(w io.Writer, sql string, args ...interface{}) error { 29 if err := c.sendSimpleQuery(sql, args...); err != nil { 30 return err 31 } 32 33 if err := c.readUntilCopyOutResponse(); err != nil { 34 return err 35 } 36 37 for { 38 msg, err := c.rxMsg() 39 if err != nil { 40 return err 41 } 42 43 switch msg := msg.(type) { 44 case *pgproto3.CopyDone: 45 break 46 case *pgproto3.CopyData: 47 _, err := w.Write(msg.Data) 48 if err != nil { 49 c.die(err) 50 return err 51 } 52 case *pgproto3.ReadyForQuery: 53 c.rxReadyForQuery(msg) 54 return nil 55 case *pgproto3.CommandComplete: 56 case *pgproto3.ErrorResponse: 57 return c.rxErrorResponse(msg) 58 default: 59 return c.processContextFreeMsg(msg) 60 } 61 } 62 63 return nil 64} 65