2
0

Add cidr support

This commit is contained in:
Jack Christensen
2015-09-03 09:42:01 -05:00
parent d494f83cd1
commit 9af068add0
4 changed files with 17 additions and 5 deletions
+1 -1
View File
@@ -751,7 +751,7 @@ func (c *Conn) sendPreparedQuery(ps *PreparedStatement, arguments ...interface{}
err = encodeTimestampTz(wbuf, arguments[i]) err = encodeTimestampTz(wbuf, arguments[i])
case TimestampOid: case TimestampOid:
err = encodeTimestamp(wbuf, arguments[i]) err = encodeTimestamp(wbuf, arguments[i])
case InetOid: case InetOid, CidrOid:
err = encodeInet(wbuf, arguments[i]) err = encodeInet(wbuf, arguments[i])
case BoolArrayOid: case BoolArrayOid:
err = encodeBoolArray(wbuf, arguments[i]) err = encodeBoolArray(wbuf, arguments[i])
+1 -1
View File
@@ -358,7 +358,7 @@ func (rows *Rows) Values() ([]interface{}, error) {
values = append(values, decodeTimestampTz(vr)) values = append(values, decodeTimestampTz(vr))
case TimestampOid: case TimestampOid:
values = append(values, decodeTimestamp(vr)) values = append(values, decodeTimestamp(vr))
case InetOid: case InetOid, CidrOid:
values = append(values, decodeInet(vr)) values = append(values, decodeInet(vr))
default: default:
rows.Fatal(errors.New("Values cannot handle binary format non-intrinsic types")) rows.Fatal(errors.New("Values cannot handle binary format non-intrinsic types"))
+4 -2
View File
@@ -19,6 +19,7 @@ const (
Int4Oid = 23 Int4Oid = 23
TextOid = 25 TextOid = 25
OidOid = 26 OidOid = 26
CidrOid = 650
Float4Oid = 700 Float4Oid = 700
Float8Oid = 701 Float8Oid = 701
InetOid = 869 InetOid = 869
@@ -1111,8 +1112,9 @@ func decodeInet(vr *ValueReader) net.IPNet {
return zero return zero
} }
if vr.Type().DataType != InetOid { pgType := vr.Type()
vr.Fatal(ProtocolError(fmt.Sprintf("Cannot decode oid %v into inet", vr.Type().DataType))) if pgType.DataType != InetOid && pgType.DataType != CidrOid {
vr.Fatal(ProtocolError(fmt.Sprintf("Cannot decode oid %v into %s", pgType.DataType, vr.Type().Name)))
return zero return zero
} }
+11 -1
View File
@@ -99,7 +99,7 @@ func mustParseCIDR(t *testing.T, s string) net.IPNet {
return *ipnet return *ipnet
} }
func TestInetTranscode(t *testing.T) { func TestInetCidrTranscode(t *testing.T) {
t.Parallel() t.Parallel()
conn := mustConnect(t, *defaultConnConfig) conn := mustConnect(t, *defaultConnConfig)
@@ -119,6 +119,16 @@ func TestInetTranscode(t *testing.T) {
{"select $1::inet", mustParseCIDR(t, "::/0")}, {"select $1::inet", mustParseCIDR(t, "::/0")},
{"select $1::inet", mustParseCIDR(t, "::1/128")}, {"select $1::inet", mustParseCIDR(t, "::1/128")},
{"select $1::inet", mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128")}, {"select $1::inet", mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128")},
{"select $1::cidr", mustParseCIDR(t, "0.0.0.0/32")},
{"select $1::cidr", mustParseCIDR(t, "127.0.0.1/32")},
{"select $1::cidr", mustParseCIDR(t, "12.34.56.0/32")},
{"select $1::cidr", mustParseCIDR(t, "192.168.1.0/24")},
{"select $1::cidr", mustParseCIDR(t, "255.0.0.0/8")},
{"select $1::cidr", mustParseCIDR(t, "255.255.255.255/32")},
{"select $1::cidr", mustParseCIDR(t, "::/128")},
{"select $1::cidr", mustParseCIDR(t, "::/0")},
{"select $1::cidr", mustParseCIDR(t, "::1/128")},
{"select $1::cidr", mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128")},
} }
for i, tt := range tests { for i, tt := range tests {