package pgximport ()// LargeObjects is a structure used to access the large objects API. It is only valid within the transaction where it// was created.//// For more details see: http://www.postgresql.org/docs/current/static/largeobjects.htmltypeLargeObjectsstruct { tx Tx}typeLargeObjectModeint32const (LargeObjectModeWriteLargeObjectMode = 0x20000LargeObjectModeReadLargeObjectMode = 0x40000)// Create creates a new large object. If oid is zero, the server assigns an unused OID.func ( *LargeObjects) ( context.Context, uint32) (uint32, error) { := .tx.QueryRow(, "select lo_create($1)", ).Scan(&)return , }// Open opens an existing large object with the given mode. ctx will also be used for all operations on the opened large// object.func ( *LargeObjects) ( context.Context, uint32, LargeObjectMode) (*LargeObject, error) {varint32 := .tx.QueryRow(, "select lo_open($1, $2)", , ).Scan(&)if != nil {returnnil, }return &LargeObject{fd: , tx: .tx, ctx: }, nil}// Unlink removes a large object from the database.func ( *LargeObjects) ( context.Context, uint32) error {varint32 := .tx.QueryRow(, "select lo_unlink($1)", ).Scan(&)if != nil {return }if != 1 {returnerrors.New("failed to remove large object") }returnnil}// A LargeObject is a large object stored on the server. It is only valid within the transaction that it was initialized// in. It uses the context it was initialized with for all operations. It implements these interfaces://// io.Writer// io.Reader// io.Seeker// io.ClosertypeLargeObjectstruct { ctx context.Context tx Tx fd int32}// Write writes p to the large object and returns the number of bytes written and an error if not all of p was written.func ( *LargeObject) ( []byte) (int, error) {varint := .tx.QueryRow(.ctx, "select lowrite($1, $2)", .fd, ).Scan(&)if != nil {return , }if < 0 {return0, errors.New("failed to write to large object") }return , nil}// Read reads up to len(p) bytes into p returning the number of bytes read.func ( *LargeObject) ( []byte) (int, error) {var []byte := .tx.QueryRow(.ctx, "select loread($1, $2)", .fd, len()).Scan(&)copy(, )if != nil {returnlen(), }iflen() < len() { = io.EOF }returnlen(), }// Seek moves the current location pointer to the new location specified by offset.func ( *LargeObject) ( int64, int) ( int64, error) { = .tx.QueryRow(.ctx, "select lo_lseek64($1, $2, $3)", .fd, , ).Scan(&)return , }// Tell returns the current read or write location of the large object descriptor.func ( *LargeObject) () ( int64, error) { = .tx.QueryRow(.ctx, "select lo_tell64($1)", .fd).Scan(&)return , }// Truncate the large object to size.func ( *LargeObject) ( int64) ( error) { _, = .tx.Exec(.ctx, "select lo_truncate64($1, $2)", .fd, )return}// Close the large object descriptor.func ( *LargeObject) () error { , := .tx.Exec(.ctx, "select lo_close($1)", .fd)return}
The pages are generated with Goldsv0.6.7. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds.