github.com/jackc/pgx/v5@v5.5.5/pgtype/multirange_test.go (about) 1 package pgtype_test 2 3 import ( 4 "context" 5 "reflect" 6 "testing" 7 8 pgx "github.com/jackc/pgx/v5" 9 "github.com/jackc/pgx/v5/pgtype" 10 "github.com/jackc/pgx/v5/pgxtest" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestMultirangeCodecTranscode(t *testing.T) { 15 skipPostgreSQLVersionLessThan(t, 14) 16 skipCockroachDB(t, "Server does not support range types (see https://github.com/cockroachdb/cockroach/issues/27791)") 17 18 pgxtest.RunValueRoundTripTests(context.Background(), t, defaultConnTestRunner, nil, "int4multirange", []pgxtest.ValueRoundTripTest{ 19 { 20 pgtype.Multirange[pgtype.Range[pgtype.Int4]](nil), 21 new(pgtype.Multirange[pgtype.Range[pgtype.Int4]]), 22 func(a any) bool { return reflect.DeepEqual(pgtype.Multirange[pgtype.Range[pgtype.Int4]](nil), a) }, 23 }, 24 { 25 pgtype.Multirange[pgtype.Range[pgtype.Int4]]{}, 26 new(pgtype.Multirange[pgtype.Range[pgtype.Int4]]), 27 func(a any) bool { return reflect.DeepEqual(pgtype.Multirange[pgtype.Range[pgtype.Int4]]{}, a) }, 28 }, 29 { 30 pgtype.Multirange[pgtype.Range[pgtype.Int4]]{ 31 { 32 Lower: pgtype.Int4{Int32: 1, Valid: true}, 33 Upper: pgtype.Int4{Int32: 5, Valid: true}, 34 LowerType: pgtype.Inclusive, 35 UpperType: pgtype.Exclusive, 36 Valid: true, 37 }, 38 { 39 Lower: pgtype.Int4{Int32: 7, Valid: true}, 40 Upper: pgtype.Int4{Int32: 9, Valid: true}, 41 LowerType: pgtype.Inclusive, 42 UpperType: pgtype.Exclusive, 43 Valid: true, 44 }, 45 }, 46 new(pgtype.Multirange[pgtype.Range[pgtype.Int4]]), 47 func(a any) bool { 48 return reflect.DeepEqual(pgtype.Multirange[pgtype.Range[pgtype.Int4]]{ 49 { 50 Lower: pgtype.Int4{Int32: 1, Valid: true}, 51 Upper: pgtype.Int4{Int32: 5, Valid: true}, 52 LowerType: pgtype.Inclusive, 53 UpperType: pgtype.Exclusive, 54 Valid: true, 55 }, 56 { 57 Lower: pgtype.Int4{Int32: 7, Valid: true}, 58 Upper: pgtype.Int4{Int32: 9, Valid: true}, 59 LowerType: pgtype.Inclusive, 60 UpperType: pgtype.Exclusive, 61 Valid: true, 62 }, 63 }, a) 64 }, 65 }, 66 }) 67 } 68 69 func TestMultirangeCodecDecodeValue(t *testing.T) { 70 skipPostgreSQLVersionLessThan(t, 14) 71 skipCockroachDB(t, "Server does not support range types (see https://github.com/cockroachdb/cockroach/issues/27791)") 72 73 defaultConnTestRunner.RunTest(context.Background(), t, func(ctx context.Context, _ testing.TB, conn *pgx.Conn) { 74 75 for _, tt := range []struct { 76 sql string 77 expected any 78 }{ 79 { 80 sql: `select int4multirange(int4range(1, 5), int4range(7,9))`, 81 expected: pgtype.Multirange[pgtype.Range[any]]{ 82 { 83 Lower: int32(1), 84 Upper: int32(5), 85 LowerType: pgtype.Inclusive, 86 UpperType: pgtype.Exclusive, 87 Valid: true, 88 }, 89 { 90 Lower: int32(7), 91 Upper: int32(9), 92 LowerType: pgtype.Inclusive, 93 UpperType: pgtype.Exclusive, 94 Valid: true, 95 }, 96 }, 97 }, 98 } { 99 t.Run(tt.sql, func(t *testing.T) { 100 rows, err := conn.Query(ctx, tt.sql) 101 require.NoError(t, err) 102 103 for rows.Next() { 104 values, err := rows.Values() 105 require.NoError(t, err) 106 require.Len(t, values, 1) 107 require.Equal(t, tt.expected, values[0]) 108 } 109 110 require.NoError(t, rows.Err()) 111 }) 112 } 113 }) 114 }