@@ -4343,17 +4343,64 @@ def testAdaptQueryTypedList(self):
43434343 self .assertEqual (sql , 'select $1' )
43444344 self .assertEqual (params , ['(3,7.5,hello,t,{123},{abc})' ])
43454345
4346- def testAdaptQueryTypedListWithString (self ):
4346+ def testAdaptQueryTypedListWithTypesAsString (self ):
43474347 format_query = self .adapter .format_query
4348- self .assertRaises (TypeError , format_query , '%s,%s' , (1 , 2 ), ( 'int2' ,) )
4348+ self .assertRaises (TypeError , format_query , '%s,%s' , (1 , 2 ), 'int2' )
43494349 self .assertRaises (
4350- TypeError , format_query , '%s,%s' , (1 ,), ( 'int2' , ' int2') )
4350+ TypeError , format_query , '%s,%s' , (1 ,), 'int2 int2' )
43514351 values = (3 , 7.5 , 'hello' , True )
4352- types = 'int4 float4 text bool' # pass types as list
4352+ types = 'int4 float4 text bool' # pass types as string
43534353 sql , params = format_query ("select %s,%s,%s,%s" , values , types )
43544354 self .assertEqual (sql , 'select $1,$2,$3,$4' )
43554355 self .assertEqual (params , [3 , 7.5 , 'hello' , 't' ])
43564356
4357+ def testAdaptQueryTypedListWithTypesAsClasses (self ):
4358+ format_query = self .adapter .format_query
4359+ self .assertRaises (TypeError , format_query , '%s,%s' , (1 , 2 ), (int ,))
4360+ self .assertRaises (
4361+ TypeError , format_query , '%s,%s' , (1 ,), (int , int ))
4362+ values = (3 , 7.5 , 'hello' , True )
4363+ types = (int , float , str , bool ) # pass types as classes
4364+ sql , params = format_query ("select %s,%s,%s,%s" , values , types )
4365+ self .assertEqual (sql , 'select $1,$2,$3,$4' )
4366+ self .assertEqual (params , [3 , 7.5 , 'hello' , 't' ])
4367+
4368+ def testAdaptQueryTypedListWithJson (self ):
4369+ format_query = self .adapter .format_query
4370+ value = {'test' : [1 , "it's fine" , 3 ]}
4371+ sql , params = format_query ("select %s" , (value ,), 'json' )
4372+ self .assertEqual (sql , 'select $1' )
4373+ self .assertEqual (params , ['{"test": [1, "it\' s fine", 3]}' ])
4374+ value = pg .Json ({'test' : [1 , "it's fine" , 3 ]})
4375+ sql , params = format_query ("select %s" , (value ,), 'json' )
4376+ self .assertEqual (sql , 'select $1' )
4377+ self .assertEqual (params , ['{"test": [1, "it\' s fine", 3]}' ])
4378+ value = {'test' : [1 , "it's fine" , 3 ]}
4379+ sql , params = format_query ("select %s" , [value ], [pg .Json ])
4380+ self .assertEqual (sql , 'select $1' )
4381+ self .assertEqual (params , ['{"test": [1, "it\' s fine", 3]}' ])
4382+
4383+ def testAdaptQueryTypedWithHstore (self ):
4384+ format_query = self .adapter .format_query
4385+ value = {'one' : "it's fine" , 'two' : 2 }
4386+ sql , params = format_query ("select %s" , (value ,), 'hstore' )
4387+ self .assertEqual (sql , "select $1" )
4388+ if sys .version_info [:2 ] < (3 , 6 ): # Python < 3.6 has unsorted dict
4389+ params [0 ] = ',' .join (sorted (params [0 ].split (',' )))
4390+ self .assertEqual (params , ['one=>"it\' s fine\" ,two=>2' ])
4391+ value = pg .Hstore ({'one' : "it's fine" , 'two' : 2 })
4392+ sql , params = format_query ("select %s" , (value ,), 'hstore' )
4393+ self .assertEqual (sql , "select $1" )
4394+ if sys .version_info [:2 ] < (3 , 6 ): # Python < 3.6 has unsorted dict
4395+ params [0 ] = ',' .join (sorted (params [0 ].split (',' )))
4396+ self .assertEqual (params , ['one=>"it\' s fine\" ,two=>2' ])
4397+ value = pg .Hstore ({'one' : "it's fine" , 'two' : 2 })
4398+ sql , params = format_query ("select %s" , [value ], [pg .Hstore ])
4399+ self .assertEqual (sql , "select $1" )
4400+ if sys .version_info [:2 ] < (3 , 6 ): # Python < 3.6 has unsorted dict
4401+ params [0 ] = ',' .join (sorted (params [0 ].split (',' )))
4402+ self .assertEqual (params , ['one=>"it\' s fine\" ,two=>2' ])
4403+
43574404 def testAdaptQueryTypedDict (self ):
43584405 format_query = self .adapter .format_query
43594406 self .assertRaises (
@@ -4423,6 +4470,22 @@ def testAdaptQueryUntypedList(self):
44234470 self .assertEqual (sql , 'select $1' )
44244471 self .assertEqual (params , ['(3,7.5,hello,t,{123},{abc})' ])
44254472
4473+ def testAdaptQueryUntypedListWithJson (self ):
4474+ format_query = self .adapter .format_query
4475+ value = pg .Json ({'test' : [1 , "it's fine" , 3 ]})
4476+ sql , params = format_query ("select %s" , (value ,))
4477+ self .assertEqual (sql , 'select $1' )
4478+ self .assertEqual (params , ['{"test": [1, "it\' s fine", 3]}' ])
4479+
4480+ def testAdaptQueryUntypedWithHstore (self ):
4481+ format_query = self .adapter .format_query
4482+ value = pg .Hstore ({'one' : "it's fine" , 'two' : 2 })
4483+ sql , params = format_query ("select %s" , (value ,))
4484+ self .assertEqual (sql , "select $1" )
4485+ if sys .version_info [:2 ] < (3 , 6 ): # Python < 3.6 has unsorted dict
4486+ params [0 ] = ',' .join (sorted (params [0 ].split (',' )))
4487+ self .assertEqual (params , ['one=>"it\' s fine\" ,two=>2' ])
4488+
44264489 def testAdaptQueryUntypedDict (self ):
44274490 format_query = self .adapter .format_query
44284491 values = dict (i = 3 , f = 7.5 , t = 'hello' , b = True )
@@ -4478,6 +4541,24 @@ def testAdaptQueryInlineList(self):
44784541 sql , "select (3,7.5,'hello',true,ARRAY[123],ARRAY['abc'])" )
44794542 self .assertEqual (params , [])
44804543
4544+ def testAdaptQueryInlineListWithJson (self ):
4545+ format_query = self .adapter .format_query
4546+ value = pg .Json ({'test' : [1 , "it's fine" , 3 ]})
4547+ sql , params = format_query ("select %s" , (value ,), inline = True )
4548+ self .assertEqual (
4549+ sql , "select '{\" test\" : [1, \" it''s fine\" , 3]}'::json" )
4550+ self .assertEqual (params , [])
4551+
4552+ def testAdaptQueryInlineListWithHstore (self ):
4553+ format_query = self .adapter .format_query
4554+ value = pg .Hstore ({'one' : "it's fine" , 'two' : 2 })
4555+ sql , params = format_query ("select %s" , (value ,), inline = True )
4556+ if sys .version_info [:2 ] < (3 , 6 ): # Python < 3.6 has unsorted dict
4557+ sql = sql [:8 ] + ',' .join (sorted (sql [8 :- 9 ].split (',' ))) + sql [- 9 :]
4558+ self .assertEqual (
4559+ sql , "select 'one=>\" it''s fine\" ,two=>2'::hstore" )
4560+ self .assertEqual (params , [])
4561+
44814562 def testAdaptQueryInlineDict (self ):
44824563 format_query = self .adapter .format_query
44834564 values = dict (i = 3 , f = 7.5 , t = 'hello' , b = True )
0 commit comments