@@ -1774,6 +1774,43 @@ async def test_no_result(self):
17741774 st = await self .con .prepare ('rollback' )
17751775 self .assertTupleEqual (st .get_attributes (), ())
17761776
1777+ async def test_array_with_custom_json_text_codec (self ):
1778+ import json
1779+
1780+ await self .con .execute ('CREATE TABLE tab (id serial, val json[]);' )
1781+ insert_sql = 'INSERT INTO tab (val) VALUES (cast($1 AS json[]));'
1782+ query_sql = 'SELECT val FROM tab ORDER BY id DESC;'
1783+ try :
1784+ for custom_codec in [False , True ]:
1785+ if custom_codec :
1786+ await self .con .set_type_codec (
1787+ 'json' ,
1788+ encoder = lambda v : v ,
1789+ decoder = json .loads ,
1790+ schema = "pg_catalog" ,
1791+ )
1792+
1793+ for val in ['"null"' , '22' , 'null' , '[2]' , '{"a": null}' ]:
1794+ await self .con .execute (insert_sql , [val ])
1795+ result = await self .con .fetchval (query_sql )
1796+ if custom_codec :
1797+ self .assertEqual (result , [json .loads (val )])
1798+ else :
1799+ self .assertEqual (result , [val ])
1800+
1801+ await self .con .execute (insert_sql , [None ])
1802+ result = await self .con .fetchval (query_sql )
1803+ self .assertEqual (result , [None ])
1804+
1805+ await self .con .execute (insert_sql , None )
1806+ result = await self .con .fetchval (query_sql )
1807+ self .assertEqual (result , None )
1808+
1809+ finally :
1810+ await self .con .execute ('''
1811+ DROP TABLE tab;
1812+ ''' )
1813+
17771814
17781815@unittest .skipIf (os .environ .get ('PGHOST' ), 'using remote cluster for testing' )
17791816class TestCodecsLargeOIDs (tb .ConnectedTestCase ):
0 commit comments