From 9b2ad7abb5a67921cc2cc9e18e37eb6f9aeee4b4 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Thu, 20 Sep 2012 00:36:53 +0100 Subject: [PATCH] Fixed json typecaster with NULL input --- lib/_json.py | 2 ++ tests/test_types_extras.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/_json.py b/lib/_json.py index c21d6c86..9142c57f 100644 --- a/lib/_json.py +++ b/lib/_json.py @@ -197,6 +197,8 @@ def _create_json_typecasters(oid, array_oid, loads=None): loads = json.loads def typecast_json(s, cur): + if s is None: + return None return loads(s) JSON = new_type((oid, ), 'JSON', typecast_json) diff --git a/tests/test_types_extras.py b/tests/test_types_extras.py index 4588718e..6af3c4c5 100755 --- a/tests/test_types_extras.py +++ b/tests/test_types_extras.py @@ -1005,6 +1005,16 @@ class JsonTestCase(unittest.TestCase): self.assert_(isinstance(data[0]['a'], Decimal)) self.assertEqual(data[0]['a'], Decimal('100.0')) + @skip_if_no_json_module + @skip_if_no_json_type + def test_null(self): + psycopg2.extras.register_json(self.conn) + curs = self.conn.cursor() + curs.execute("""select NULL::json""") + self.assertEqual(curs.fetchone()[0], None) + curs.execute("""select NULL::json[]""") + self.assertEqual(curs.fetchone()[0], None) + def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__)