2
0

Switches oid to uint32

This commit is contained in:
Manni Wood
2016-09-01 22:55:18 -04:00
parent c187a779c0
commit 7dbfd4bf4b
4 changed files with 77 additions and 2 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ func (s *startupMessage) Bytes() (buf []byte) {
return buf
}
type Oid int32
type Oid uint32
type FieldDescription struct {
Name string
+28
View File
@@ -137,6 +137,34 @@ func (r *msgReader) readInt32() int32 {
return n
}
func (r *msgReader) readUint32() uint32 {
if r.err != nil {
return 0
}
r.msgBytesRemaining -= 4
if r.msgBytesRemaining < 0 {
r.fatal(errors.New("read past end of message"))
return 0
}
b, err := r.reader.Peek(4)
if err != nil {
r.fatal(err)
return 0
}
n := uint32(binary.BigEndian.Uint32(b))
r.reader.Discard(4)
if r.shouldLog(LogLevelTrace) {
r.log(LogLevelTrace, "msgReader.readUint32", "value", n, "msgBytesRemaining", r.msgBytesRemaining)
}
return n
}
func (r *msgReader) readInt64() int64 {
if r.err != nil {
return 0
+15 -1
View File
@@ -74,6 +74,20 @@ func (r *ValueReader) ReadInt32() int32 {
return r.mr.readInt32()
}
func (r *ValueReader) ReadUint32() uint32 {
if r.err != nil {
return 0
}
r.valueBytesRemaining -= 4
if r.valueBytesRemaining < 0 {
r.Fatal(errors.New("read past end of value"))
return 0
}
return r.mr.readUint32()
}
func (r *ValueReader) ReadInt64() int64 {
if r.err != nil {
return 0
@@ -89,7 +103,7 @@ func (r *ValueReader) ReadInt64() int64 {
}
func (r *ValueReader) ReadOid() Oid {
return Oid(r.ReadInt32())
return Oid(r.ReadUint32())
}
// ReadString reads count bytes and returns as string
+33
View File
@@ -551,6 +551,39 @@ func TestInetCidrTranscodeWithJustIP(t *testing.T) {
}
}
func TestOid(t *testing.T) {
t.Parallel()
conn := mustConnect(t, *defaultConnConfig)
defer closeConn(t, conn)
tests := []struct {
sql string
value pgx.Oid
}{
{"select $1::oid", 0},
{"select $1::oid", 1},
{"select $1::oid", 4294967295},
}
for i, tt := range tests {
expected := tt.value
var actual pgx.Oid
err := conn.QueryRow(tt.sql, expected).Scan(&actual)
if err != nil {
t.Errorf("%d. Unexpected failure: %v (sql -> %v, value -> %v)", i, err, tt.sql, expected)
continue
}
if actual != expected {
t.Errorf("%d. Expected %v, got %v (sql -> %v)", i, expected, actual, tt.sql)
}
ensureConnValid(t, conn)
}
}
func TestNullX(t *testing.T) {
t.Parallel()