2
0

Treat unknown oid's as text type

This commit is contained in:
Jack Christensen
2013-07-01 16:50:16 -05:00
parent 732534b944
commit 52c26ba14c
3 changed files with 11 additions and 1 deletions
+4 -1
View File
@@ -352,7 +352,7 @@ func (c *Connection) sendPreparedQuery(ps *PreparedStatement, arguments ...inter
for _, oid := range ps.ParameterOids { for _, oid := range ps.ParameterOids {
transcoder := valueTranscoders[oid] transcoder := valueTranscoders[oid]
if transcoder == nil { if transcoder == nil {
panic(fmt.Sprintf("can't encode %#v", oid)) transcoder = defaultTranscoder
} }
binary.Write(buf, binary.BigEndian, transcoder.EncodeFormat) binary.Write(buf, binary.BigEndian, transcoder.EncodeFormat)
} }
@@ -360,6 +360,9 @@ func (c *Connection) sendPreparedQuery(ps *PreparedStatement, arguments ...inter
binary.Write(buf, binary.BigEndian, int16(len(arguments))) binary.Write(buf, binary.BigEndian, int16(len(arguments)))
for i, oid := range ps.ParameterOids { for i, oid := range ps.ParameterOids {
transcoder := valueTranscoders[oid] transcoder := valueTranscoders[oid]
if transcoder == nil {
transcoder = defaultTranscoder
}
transcoder.EncodeTo(buf, arguments[i]) transcoder.EncodeTo(buf, arguments[i])
} }
binary.Write(buf, binary.BigEndian, int16(0)) binary.Write(buf, binary.BigEndian, int16(0))
+3
View File
@@ -326,6 +326,9 @@ func TestPrepare(t *testing.T) {
testTranscode("select $1::float8", float64(1.23)) testTranscode("select $1::float8", float64(1.23))
testTranscode("select $1::boolean", true) testTranscode("select $1::boolean", true)
// Ensure that unknown types are just treated as strings
testTranscode("select $1::point", "(0,0)")
// case []byte: // case []byte:
// s = `E'\\x` + hex.EncodeToString(arg) + `'` // s = `E'\\x` + hex.EncodeToString(arg) + `'`
+4
View File
@@ -15,6 +15,7 @@ type valueTranscoder struct {
} }
var valueTranscoders map[oid]*valueTranscoder var valueTranscoders map[oid]*valueTranscoder
var defaultTranscoder *valueTranscoder
func init() { func init() {
valueTranscoders = make(map[oid]*valueTranscoder) valueTranscoders = make(map[oid]*valueTranscoder)
@@ -56,6 +57,9 @@ func init() {
// varchar -- same as text // varchar -- same as text
valueTranscoders[oid(1043)] = valueTranscoders[oid(25)] valueTranscoders[oid(1043)] = valueTranscoders[oid(25)]
// use text transcoder for anything we don't understand
defaultTranscoder = valueTranscoders[oid(25)]
} }
func decodeBoolFromText(mr *MessageReader, size int32) interface{} { func decodeBoolFromText(mr *MessageReader, size int32) interface{} {