github.com/jackc/pgx/v5@v5.5.5/pgtype/enum_codec_test.go (about)

     1  package pgtype_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	pgx "github.com/jackc/pgx/v5"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestEnumCodec(t *testing.T) {
    12  	defaultConnTestRunner.RunTest(context.Background(), t, func(ctx context.Context, t testing.TB, conn *pgx.Conn) {
    13  
    14  		_, err := conn.Exec(ctx, `drop type if exists enum_test;
    15  
    16  create type enum_test as enum ('foo', 'bar', 'baz');`)
    17  		require.NoError(t, err)
    18  		defer conn.Exec(ctx, "drop type enum_test")
    19  
    20  		dt, err := conn.LoadType(ctx, "enum_test")
    21  		require.NoError(t, err)
    22  
    23  		conn.TypeMap().RegisterType(dt)
    24  
    25  		var s string
    26  		err = conn.QueryRow(ctx, `select 'foo'::enum_test`).Scan(&s)
    27  		require.NoError(t, err)
    28  		require.Equal(t, "foo", s)
    29  
    30  		err = conn.QueryRow(ctx, `select $1::enum_test`, "bar").Scan(&s)
    31  		require.NoError(t, err)
    32  		require.Equal(t, "bar", s)
    33  
    34  		err = conn.QueryRow(ctx, `select 'foo'::enum_test`).Scan(&s)
    35  		require.NoError(t, err)
    36  		require.Equal(t, "foo", s)
    37  
    38  		err = conn.QueryRow(ctx, `select $1::enum_test`, "bar").Scan(&s)
    39  		require.NoError(t, err)
    40  		require.Equal(t, "bar", s)
    41  
    42  		err = conn.QueryRow(ctx, `select 'baz'::enum_test`).Scan(&s)
    43  		require.NoError(t, err)
    44  		require.Equal(t, "baz", s)
    45  	})
    46  }
    47  
    48  func TestEnumCodecValues(t *testing.T) {
    49  	defaultConnTestRunner.RunTest(context.Background(), t, func(ctx context.Context, t testing.TB, conn *pgx.Conn) {
    50  
    51  		_, err := conn.Exec(ctx, `drop type if exists enum_test;
    52  
    53  create type enum_test as enum ('foo', 'bar', 'baz');`)
    54  		require.NoError(t, err)
    55  		defer conn.Exec(ctx, "drop type enum_test")
    56  
    57  		dt, err := conn.LoadType(ctx, "enum_test")
    58  		require.NoError(t, err)
    59  
    60  		conn.TypeMap().RegisterType(dt)
    61  
    62  		rows, err := conn.Query(ctx, `select 'foo'::enum_test`)
    63  		require.NoError(t, err)
    64  		require.True(t, rows.Next())
    65  		values, err := rows.Values()
    66  		require.NoError(t, err)
    67  		require.Equal(t, values, []any{"foo"})
    68  	})
    69  }