Build / rewrite / port multirange support
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
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) {
|
||||
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) {
|
||||
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())
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user