From 47eda78ea1cbd9f5fd9cfaef26bf3ee40a3045d9 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Thu, 16 Feb 2017 19:41:28 -0600 Subject: [PATCH] Refactor huge switch statement --- conn.go | 7 +------ values.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/conn.go b/conn.go index 4a0b6fda..7d70b9f8 100644 --- a/conn.go +++ b/conn.go @@ -964,12 +964,7 @@ func (c *Conn) sendPreparedQuery(ps *PreparedStatement, arguments ...interface{} case string, *string: wbuf.WriteInt16(TextFormatCode) default: - switch oid { - case BoolOID, ByteaOID, Int2OID, Int4OID, Int8OID, Float4OID, Float8OID, TimestampTzOID, TimestampTzArrayOID, TimestampOID, TimestampArrayOID, DateOID, BoolArrayOID, ByteaArrayOID, Int2ArrayOID, Int4ArrayOID, Int8ArrayOID, Float4ArrayOID, Float8ArrayOID, TextArrayOID, VarcharArrayOID, OIDOID, InetOID, CidrOID, InetArrayOID, CidrArrayOID, RecordOID, JSONOID, JSONBOID: - wbuf.WriteInt16(BinaryFormatCode) - default: - wbuf.WriteInt16(TextFormatCode) - } + wbuf.WriteInt16(internalNativeGoTypeFormats[oid]) } } diff --git a/values.go b/values.go index 4255f5ea..45ed914c 100644 --- a/values.go +++ b/values.go @@ -77,6 +77,9 @@ const minInt = -maxInt - 1 // set here. var DefaultTypeFormats map[string]int16 +// internalNativeGoTypeFormats lists the encoding type for native Go types (not handled with Encoder interface) +var internalNativeGoTypeFormats map[OID]int16 + func init() { DefaultTypeFormats = map[string]int16{ "_aclitem": TextFormatCode, // Pg's src/backend/utils/adt/acl.c has only in/out (text) not send/recv (bin) @@ -113,6 +116,38 @@ func init() { "timestamptz": BinaryFormatCode, "xid": BinaryFormatCode, } + + internalNativeGoTypeFormats = map[OID]int16{ + BoolArrayOID: BinaryFormatCode, + BoolOID: BinaryFormatCode, + ByteaArrayOID: BinaryFormatCode, + ByteaOID: BinaryFormatCode, + CidrArrayOID: BinaryFormatCode, + CidrOID: BinaryFormatCode, + DateOID: BinaryFormatCode, + Float4ArrayOID: BinaryFormatCode, + Float4OID: BinaryFormatCode, + Float8ArrayOID: BinaryFormatCode, + Float8OID: BinaryFormatCode, + InetArrayOID: BinaryFormatCode, + InetOID: BinaryFormatCode, + Int2ArrayOID: BinaryFormatCode, + Int2OID: BinaryFormatCode, + Int4ArrayOID: BinaryFormatCode, + Int4OID: BinaryFormatCode, + Int8ArrayOID: BinaryFormatCode, + Int8OID: BinaryFormatCode, + JSONBOID: BinaryFormatCode, + JSONOID: BinaryFormatCode, + OIDOID: BinaryFormatCode, + RecordOID: BinaryFormatCode, + TextArrayOID: BinaryFormatCode, + TimestampArrayOID: BinaryFormatCode, + TimestampOID: BinaryFormatCode, + TimestampTzArrayOID: BinaryFormatCode, + TimestampTzOID: BinaryFormatCode, + VarcharArrayOID: BinaryFormatCode, + } } // SerializationError occurs on failure to encode or decode a value