Skip to content

Commit

Permalink
fixed empty array issue mfenniak#10, thanks frankix
Browse files Browse the repository at this point in the history
  • Loading branch information
reingart committed Dec 31, 2011
1 parent 26614ba commit eb0daf3
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
15 changes: 8 additions & 7 deletions pg8000/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -441,13 +441,14 @@ def array_recv(data, **kwargs):
# Read all array values
array_values = []
for i in range(element_count):
element_len, = struct.unpack("!i", data[:4])
data = data[4:]
if element_len == -1:
array_values.append(None)
else:
array_values.append(conversion(data[:element_len], **kwargs))
data = data[element_len:]
if len(data):
element_len, = struct.unpack("!i", data[:4])
data = data[4:]
if element_len == -1:
array_values.append(None)
else:
array_values.append(conversion(data[:element_len], **kwargs))
data = data[element_len:]
if data != "":
raise ArrayDataParseError("unexpected data left over after array read")

Expand Down
13 changes: 13 additions & 0 deletions tests/dbapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,19 @@ def testIterator(self):
assert next_f1 > f1
f1 = next_f1

def testEmptyArray(self):
with closing(db2.cursor()) as c1:
c1.execute("SELECT ARRAY[1,2,3, NULL];")
retval = c1.fetchone()
self.assert_(len(retval[0]) == 4,
"%s is not a valid array" % repr(retval[0]))
for i, value in enumerate((1, 2, 3, None)):
self.assertEquals(value, retval[0][i])
c1.execute("SELECT '{}'::text[];")
retval = c1.fetchone()
self.assert_(len(retval[0] ) == 0,
"%s is not an empty array" % repr(retval))


if __name__ == "__main__":
unittest.main()
Expand Down

0 comments on commit eb0daf3

Please sign in to comment.