mirror of https://github.com/jackc/pgx.git
Fixes #11 -- support initializing Array types from a slice of the value
parent
f711de3591
commit
0079108e29
|
@ -40,6 +40,18 @@ func (dst *ACLItemArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []ACLItem:
|
||||
if value == nil {
|
||||
*dst = ACLItemArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = ACLItemArray{Status: Present}
|
||||
} else {
|
||||
*dst = ACLItemArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -124,7 +136,7 @@ func (dst *ACLItemArray) DecodeText(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src ACLItemArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *ACLItemArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -200,7 +212,7 @@ func (dst *ACLItemArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src ACLItemArray) Value() (driver.Value, error) {
|
||||
func (src *ACLItemArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *BoolArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Bool:
|
||||
if value == nil {
|
||||
*dst = BoolArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = BoolArray{Status: Present}
|
||||
} else {
|
||||
*dst = BoolArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *BoolArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src BoolArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *BoolArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src BoolArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src BoolArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *BoolArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *BoolArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src BoolArray) Value() (driver.Value, error) {
|
||||
func (src *BoolArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *BPCharArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []BPChar:
|
||||
if value == nil {
|
||||
*dst = BPCharArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = BPCharArray{Status: Present}
|
||||
} else {
|
||||
*dst = BPCharArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *BPCharArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src BPCharArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *BPCharArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src BPCharArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src BPCharArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *BPCharArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *BPCharArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src BPCharArray) Value() (driver.Value, error) {
|
||||
func (src *BPCharArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *ByteaArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Bytea:
|
||||
if value == nil {
|
||||
*dst = ByteaArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = ByteaArray{Status: Present}
|
||||
} else {
|
||||
*dst = ByteaArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *ByteaArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src ByteaArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *ByteaArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src ByteaArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src ByteaArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *ByteaArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *ByteaArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src ByteaArray) Value() (driver.Value, error) {
|
||||
func (src *ByteaArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -62,6 +62,18 @@ func (dst *CIDRArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []CIDR:
|
||||
if value == nil {
|
||||
*dst = CIDRArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = CIDRArray{Status: Present}
|
||||
} else {
|
||||
*dst = CIDRArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -197,7 +209,7 @@ func (dst *CIDRArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src CIDRArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *CIDRArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -254,7 +266,7 @@ func (src CIDRArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src CIDRArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *CIDRArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -317,7 +329,7 @@ func (dst *CIDRArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src CIDRArray) Value() (driver.Value, error) {
|
||||
func (src *CIDRArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -43,6 +43,18 @@ func (dst *DateArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Date:
|
||||
if value == nil {
|
||||
*dst = DateArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = DateArray{Status: Present}
|
||||
} else {
|
||||
*dst = DateArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -169,7 +181,7 @@ func (dst *DateArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src DateArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *DateArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -226,7 +238,7 @@ func (src DateArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src DateArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *DateArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -289,7 +301,7 @@ func (dst *DateArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src DateArray) Value() (driver.Value, error) {
|
||||
func (src *DateArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -40,6 +40,18 @@ func (dst *EnumArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []GenericText:
|
||||
if value == nil {
|
||||
*dst = EnumArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = EnumArray{Status: Present}
|
||||
} else {
|
||||
*dst = EnumArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -124,7 +136,7 @@ func (dst *EnumArray) DecodeText(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src EnumArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *EnumArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -200,7 +212,7 @@ func (dst *EnumArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src EnumArray) Value() (driver.Value, error) {
|
||||
func (src *EnumArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *Float4Array) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Float4:
|
||||
if value == nil {
|
||||
*dst = Float4Array{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = Float4Array{Status: Present}
|
||||
} else {
|
||||
*dst = Float4Array{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *Float4Array) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src Float4Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Float4Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src Float4Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src Float4Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Float4Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *Float4Array) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src Float4Array) Value() (driver.Value, error) {
|
||||
func (src *Float4Array) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *Float8Array) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Float8:
|
||||
if value == nil {
|
||||
*dst = Float8Array{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = Float8Array{Status: Present}
|
||||
} else {
|
||||
*dst = Float8Array{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *Float8Array) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src Float8Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Float8Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src Float8Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src Float8Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Float8Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *Float8Array) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src Float8Array) Value() (driver.Value, error) {
|
||||
func (src *Float8Array) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *HstoreArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Hstore:
|
||||
if value == nil {
|
||||
*dst = HstoreArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = HstoreArray{Status: Present}
|
||||
} else {
|
||||
*dst = HstoreArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *HstoreArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src HstoreArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *HstoreArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src HstoreArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src HstoreArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *HstoreArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *HstoreArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src HstoreArray) Value() (driver.Value, error) {
|
||||
func (src *HstoreArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -62,6 +62,18 @@ func (dst *InetArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Inet:
|
||||
if value == nil {
|
||||
*dst = InetArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = InetArray{Status: Present}
|
||||
} else {
|
||||
*dst = InetArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -197,7 +209,7 @@ func (dst *InetArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src InetArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *InetArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -254,7 +266,7 @@ func (src InetArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src InetArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *InetArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -317,7 +329,7 @@ func (dst *InetArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src InetArray) Value() (driver.Value, error) {
|
||||
func (src *InetArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -61,6 +61,18 @@ func (dst *Int2Array) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Int2:
|
||||
if value == nil {
|
||||
*dst = Int2Array{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = Int2Array{Status: Present}
|
||||
} else {
|
||||
*dst = Int2Array{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -196,7 +208,7 @@ func (dst *Int2Array) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src Int2Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Int2Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -253,7 +265,7 @@ func (src Int2Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src Int2Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Int2Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -316,7 +328,7 @@ func (dst *Int2Array) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src Int2Array) Value() (driver.Value, error) {
|
||||
func (src *Int2Array) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -23,25 +23,6 @@ func (dst *Int4Array) Set(src interface{}) error {
|
|||
|
||||
switch value := src.(type) {
|
||||
|
||||
case []int:
|
||||
if value == nil {
|
||||
*dst = Int4Array{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = Int4Array{Status: Present}
|
||||
} else {
|
||||
elements := make([]Int4, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
*dst = Int4Array{
|
||||
Elements: elements,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
|
||||
case []int32:
|
||||
if value == nil {
|
||||
*dst = Int4Array{Status: Null}
|
||||
|
@ -80,6 +61,18 @@ func (dst *Int4Array) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Int4:
|
||||
if value == nil {
|
||||
*dst = Int4Array{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = Int4Array{Status: Present}
|
||||
} else {
|
||||
*dst = Int4Array{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -215,7 +208,7 @@ func (dst *Int4Array) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src Int4Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Int4Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -272,7 +265,7 @@ func (src Int4Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src Int4Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Int4Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -335,7 +328,7 @@ func (dst *Int4Array) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src Int4Array) Value() (driver.Value, error) {
|
||||
func (src *Int4Array) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -61,6 +61,18 @@ func (dst *Int8Array) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Int8:
|
||||
if value == nil {
|
||||
*dst = Int8Array{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = Int8Array{Status: Present}
|
||||
} else {
|
||||
*dst = Int8Array{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -196,7 +208,7 @@ func (dst *Int8Array) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src Int8Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Int8Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -253,7 +265,7 @@ func (src Int8Array) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src Int8Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *Int8Array) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -316,7 +328,7 @@ func (dst *Int8Array) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src Int8Array) Value() (driver.Value, error) {
|
||||
func (src *Int8Array) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -43,6 +43,18 @@ func (dst *MacaddrArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Macaddr:
|
||||
if value == nil {
|
||||
*dst = MacaddrArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = MacaddrArray{Status: Present}
|
||||
} else {
|
||||
*dst = MacaddrArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -169,7 +181,7 @@ func (dst *MacaddrArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src MacaddrArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *MacaddrArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -226,7 +238,7 @@ func (src MacaddrArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src MacaddrArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *MacaddrArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -289,7 +301,7 @@ func (dst *MacaddrArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src MacaddrArray) Value() (driver.Value, error) {
|
||||
func (src *MacaddrArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -99,6 +99,18 @@ func (dst *NumericArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Numeric:
|
||||
if value == nil {
|
||||
*dst = NumericArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = NumericArray{Status: Present}
|
||||
} else {
|
||||
*dst = NumericArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -252,7 +264,7 @@ func (dst *NumericArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src NumericArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *NumericArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -309,7 +321,7 @@ func (src NumericArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src NumericArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *NumericArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -372,7 +384,7 @@ func (dst *NumericArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src NumericArray) Value() (driver.Value, error) {
|
||||
func (src *NumericArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *TextArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Text:
|
||||
if value == nil {
|
||||
*dst = TextArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = TextArray{Status: Present}
|
||||
} else {
|
||||
*dst = TextArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *TextArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src TextArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *TextArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src TextArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src TextArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *TextArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *TextArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src TextArray) Value() (driver.Value, error) {
|
||||
func (src *TextArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -43,6 +43,18 @@ func (dst *TimestampArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Timestamp:
|
||||
if value == nil {
|
||||
*dst = TimestampArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = TimestampArray{Status: Present}
|
||||
} else {
|
||||
*dst = TimestampArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -169,7 +181,7 @@ func (dst *TimestampArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src TimestampArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *TimestampArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -226,7 +238,7 @@ func (src TimestampArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src TimestampArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *TimestampArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -289,7 +301,7 @@ func (dst *TimestampArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src TimestampArray) Value() (driver.Value, error) {
|
||||
func (src *TimestampArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -43,6 +43,18 @@ func (dst *TimestamptzArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Timestamptz:
|
||||
if value == nil {
|
||||
*dst = TimestamptzArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = TimestamptzArray{Status: Present}
|
||||
} else {
|
||||
*dst = TimestamptzArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -169,7 +181,7 @@ func (dst *TimestamptzArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src TimestamptzArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *TimestamptzArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -226,7 +238,7 @@ func (src TimestamptzArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error)
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src TimestamptzArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *TimestamptzArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -289,7 +301,7 @@ func (dst *TimestamptzArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src TimestamptzArray) Value() (driver.Value, error) {
|
||||
func (src *TimestamptzArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -23,6 +23,7 @@ func (dst *<%= pgtype_array_type %>) Set(src interface{}) error {
|
|||
|
||||
switch value := src.(type) {
|
||||
<% go_array_types.split(",").each do |t| %>
|
||||
<% if t != pgtype_element_type %>
|
||||
case <%= t %>:
|
||||
if value == nil {
|
||||
*dst = <%= pgtype_array_type %>{Status: Null}
|
||||
|
@ -42,6 +43,19 @@ func (dst *<%= pgtype_array_type %>) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
<% end %>
|
||||
<% end %>
|
||||
case []<%= pgtype_element_type %>:
|
||||
if value == nil {
|
||||
*dst = <%= pgtype_array_type %>{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = <%= pgtype_array_type %>{Status: Present}
|
||||
} else {
|
||||
*dst = <%= pgtype_array_type %>{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status : Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
|
|
@ -80,6 +80,18 @@ func (dst *UUIDArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []UUID:
|
||||
if value == nil {
|
||||
*dst = UUIDArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = UUIDArray{Status: Present}
|
||||
} else {
|
||||
*dst = UUIDArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -224,7 +236,7 @@ func (dst *UUIDArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src UUIDArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *UUIDArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -281,7 +293,7 @@ func (src UUIDArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src UUIDArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *UUIDArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -344,7 +356,7 @@ func (dst *UUIDArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src UUIDArray) Value() (driver.Value, error) {
|
||||
func (src *UUIDArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -42,6 +42,18 @@ func (dst *VarcharArray) Set(src interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
case []Varchar:
|
||||
if value == nil {
|
||||
*dst = VarcharArray{Status: Null}
|
||||
} else if len(value) == 0 {
|
||||
*dst = VarcharArray{Status: Present}
|
||||
} else {
|
||||
*dst = VarcharArray{
|
||||
Elements: value,
|
||||
Dimensions: []ArrayDimension{{Length: int32(len(value)), LowerBound: 1}},
|
||||
Status: Present,
|
||||
}
|
||||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.Set(originalSrc)
|
||||
|
@ -168,7 +180,7 @@ func (dst *VarcharArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (src VarcharArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *VarcharArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -225,7 +237,7 @@ func (src VarcharArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||
return buf, nil
|
||||
}
|
||||
|
||||
func (src VarcharArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
func (src *VarcharArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||
switch src.Status {
|
||||
case Null:
|
||||
return nil, nil
|
||||
|
@ -288,7 +300,7 @@ func (dst *VarcharArray) Scan(src interface{}) error {
|
|||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
func (src VarcharArray) Value() (driver.Value, error) {
|
||||
func (src *VarcharArray) Value() (driver.Value, error) {
|
||||
buf, err := src.EncodeText(nil, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
Loading…
Reference in New Issue