package pgx
import (
"errors"
"github.com/jackc/pgx/v5/internal/anynil"
"github.com/jackc/pgx/v5/internal/pgio"
"github.com/jackc/pgx/v5/pgtype"
)
const (
TextFormatCode = 0
BinaryFormatCode = 1
)
func convertSimpleArgument(m *pgtype .Map , arg any ) (any , error ) {
if anynil .Is (arg ) {
return nil , nil
}
buf , err := m .Encode (0 , TextFormatCode , arg , []byte {})
if err != nil {
return nil , err
}
if buf == nil {
return nil , nil
}
return string (buf ), nil
}
func encodeCopyValue(m *pgtype .Map , buf []byte , oid uint32 , arg any ) ([]byte , error ) {
if anynil .Is (arg ) {
return pgio .AppendInt32 (buf , -1 ), nil
}
sp := len (buf )
buf = pgio .AppendInt32 (buf , -1 )
argBuf , err := m .Encode (oid , BinaryFormatCode , arg , buf )
if err != nil {
if argBuf2 , err2 := tryScanStringCopyValueThenEncode (m , buf , oid , arg ); err2 == nil {
argBuf = argBuf2
} else {
return nil , err
}
}
if argBuf != nil {
buf = argBuf
pgio .SetInt32 (buf [sp :], int32 (len (buf [sp :])-4 ))
}
return buf , nil
}
func tryScanStringCopyValueThenEncode(m *pgtype .Map , buf []byte , oid uint32 , arg any ) ([]byte , error ) {
s , ok := arg .(string )
if !ok {
return nil , errors .New ("not a string" )
}
var v any
err := m .Scan (oid , TextFormatCode , []byte (s ), &v )
if err != nil {
return nil , err
}
return m .Encode (oid , BinaryFormatCode , v , buf )
}
The pages are generated with Golds v0.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 .