mirror of https://github.com/jackc/pgx.git
115 lines
3.2 KiB
Go
115 lines
3.2 KiB
Go
package pgtype_test
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"testing"
|
|
|
|
pgx "github.com/jackc/pgx/v5"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
"github.com/jackc/pgx/v5/pgxtest"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMultirangeCodecTranscode(t *testing.T) {
|
|
skipPostgreSQLVersionLessThan(t, 14)
|
|
skipCockroachDB(t, "Server does not support range types (see https://github.com/cockroachdb/cockroach/issues/27791)")
|
|
|
|
pgxtest.RunValueRoundTripTests(context.Background(), t, defaultConnTestRunner, nil, "int4multirange", []pgxtest.ValueRoundTripTest{
|
|
{
|
|
pgtype.Multirange[pgtype.Range[pgtype.Int4]](nil),
|
|
new(pgtype.Multirange[pgtype.Range[pgtype.Int4]]),
|
|
func(a any) bool { return reflect.DeepEqual(pgtype.Multirange[pgtype.Range[pgtype.Int4]](nil), a) },
|
|
},
|
|
{
|
|
pgtype.Multirange[pgtype.Range[pgtype.Int4]]{},
|
|
new(pgtype.Multirange[pgtype.Range[pgtype.Int4]]),
|
|
func(a any) bool { return reflect.DeepEqual(pgtype.Multirange[pgtype.Range[pgtype.Int4]]{}, a) },
|
|
},
|
|
{
|
|
pgtype.Multirange[pgtype.Range[pgtype.Int4]]{
|
|
{
|
|
Lower: pgtype.Int4{Int32: 1, Valid: true},
|
|
Upper: pgtype.Int4{Int32: 5, Valid: true},
|
|
LowerType: pgtype.Inclusive,
|
|
UpperType: pgtype.Exclusive,
|
|
Valid: true,
|
|
},
|
|
{
|
|
Lower: pgtype.Int4{Int32: 7, Valid: true},
|
|
Upper: pgtype.Int4{Int32: 9, Valid: true},
|
|
LowerType: pgtype.Inclusive,
|
|
UpperType: pgtype.Exclusive,
|
|
Valid: true,
|
|
},
|
|
},
|
|
new(pgtype.Multirange[pgtype.Range[pgtype.Int4]]),
|
|
func(a any) bool {
|
|
return reflect.DeepEqual(pgtype.Multirange[pgtype.Range[pgtype.Int4]]{
|
|
{
|
|
Lower: pgtype.Int4{Int32: 1, Valid: true},
|
|
Upper: pgtype.Int4{Int32: 5, Valid: true},
|
|
LowerType: pgtype.Inclusive,
|
|
UpperType: pgtype.Exclusive,
|
|
Valid: true,
|
|
},
|
|
{
|
|
Lower: pgtype.Int4{Int32: 7, Valid: true},
|
|
Upper: pgtype.Int4{Int32: 9, Valid: true},
|
|
LowerType: pgtype.Inclusive,
|
|
UpperType: pgtype.Exclusive,
|
|
Valid: true,
|
|
},
|
|
}, a)
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func TestMultirangeCodecDecodeValue(t *testing.T) {
|
|
skipPostgreSQLVersionLessThan(t, 14)
|
|
skipCockroachDB(t, "Server does not support range types (see https://github.com/cockroachdb/cockroach/issues/27791)")
|
|
|
|
defaultConnTestRunner.RunTest(context.Background(), t, func(ctx context.Context, _ testing.TB, conn *pgx.Conn) {
|
|
|
|
for _, tt := range []struct {
|
|
sql string
|
|
expected any
|
|
}{
|
|
{
|
|
sql: `select int4multirange(int4range(1, 5), int4range(7,9))`,
|
|
expected: pgtype.Multirange[pgtype.Range[any]]{
|
|
{
|
|
Lower: int32(1),
|
|
Upper: int32(5),
|
|
LowerType: pgtype.Inclusive,
|
|
UpperType: pgtype.Exclusive,
|
|
Valid: true,
|
|
},
|
|
{
|
|
Lower: int32(7),
|
|
Upper: int32(9),
|
|
LowerType: pgtype.Inclusive,
|
|
UpperType: pgtype.Exclusive,
|
|
Valid: true,
|
|
},
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tt.sql, func(t *testing.T) {
|
|
rows, err := conn.Query(ctx, tt.sql)
|
|
require.NoError(t, err)
|
|
|
|
for rows.Next() {
|
|
values, err := rows.Values()
|
|
require.NoError(t, err)
|
|
require.Len(t, values, 1)
|
|
require.Equal(t, tt.expected, values[0])
|
|
}
|
|
|
|
require.NoError(t, rows.Err())
|
|
})
|
|
}
|
|
})
|
|
}
|