...

Source file src/github.com/jackc/pgx/v5/pgtype/multirange_test.go

Documentation: github.com/jackc/pgx/v5/pgtype

     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  }
   115  

View as plain text