From e08a188515546234166a30756f05cedd04019ac4 Mon Sep 17 00:00:00 2001 From: Robert Lin Date: Sun, 10 Mar 2019 23:38:11 -0700 Subject: [PATCH 1/3] Fix enum handling --- values.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/values.go b/values.go index 0c571d74..e7e6c1f7 100644 --- a/values.go +++ b/values.go @@ -189,7 +189,15 @@ func encodePreparedStatementArgument(ci *pgtype.ConnInfo, buf []byte, oid pgtype sp := len(buf) buf = pgio.AppendInt32(buf, -1) - argBuf, err := value.(pgtype.BinaryEncoder).EncodeBinary(ci, buf) + var argBuf []byte + switch valueEncoder := value.(type) { + case pgtype.BinaryEncoder: + argBuf, err = valueEncoder.EncodeBinary(ci, buf) + case pgtype.TextEncoder: + argBuf, err = valueEncoder.EncodeText(ci, buf) + default: + return nil, fmt.Errorf("invalid encode type %v", valueEncoder) + } if err != nil { return nil, err } From 9a3e403bdf10b1c850c0fc6bccad52415741d0b5 Mon Sep 17 00:00:00 2001 From: Robert Lin Date: Sun, 10 Mar 2019 23:38:34 -0700 Subject: [PATCH 2/3] Add rudementary enum transcode test --- values_test.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/values_test.go b/values_test.go index ddaf5468..e05dab37 100644 --- a/values_test.go +++ b/values_test.go @@ -50,6 +50,29 @@ func TestDateTranscode(t *testing.T) { } } +func TestEnumTranscode(t *testing.T) { + t.Parallel() + + conn := mustConnect(t, *defaultConnConfig) + defer closeConn(t, conn) + + _, err := conn.Exec("create type some_type as enum ('hello-world', 'goodbye-world')") + if err != nil { + t.Fatalf("Unexpected failure in test setup: %v", err) + } + defer conn.Exec("drop type some_type") + + var out string + var actual = "hello-world" + err = conn.QueryRow("select $1::some_type", actual).Scan(&out) + if err != nil { + t.Fatalf("Unexpected failure on QueryRow Scan: %v", err) + } + if actual != out { + t.Errorf("Did not transcode enum successfully: %s is not %s", out, actual) + } +} + func TestTimestampTzTranscode(t *testing.T) { t.Parallel() From 0a8645df197181e4d424e090c9c7f42175b035cd Mon Sep 17 00:00:00 2001 From: Robert Lin Date: Mon, 11 Mar 2019 00:14:06 -0700 Subject: [PATCH 3/3] Remove test --- values_test.go | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/values_test.go b/values_test.go index e05dab37..ddaf5468 100644 --- a/values_test.go +++ b/values_test.go @@ -50,29 +50,6 @@ func TestDateTranscode(t *testing.T) { } } -func TestEnumTranscode(t *testing.T) { - t.Parallel() - - conn := mustConnect(t, *defaultConnConfig) - defer closeConn(t, conn) - - _, err := conn.Exec("create type some_type as enum ('hello-world', 'goodbye-world')") - if err != nil { - t.Fatalf("Unexpected failure in test setup: %v", err) - } - defer conn.Exec("drop type some_type") - - var out string - var actual = "hello-world" - err = conn.QueryRow("select $1::some_type", actual).Scan(&out) - if err != nil { - t.Fatalf("Unexpected failure on QueryRow Scan: %v", err) - } - if actual != out { - t.Errorf("Did not transcode enum successfully: %s is not %s", out, actual) - } -} - func TestTimestampTzTranscode(t *testing.T) { t.Parallel()