Title: [956] trunk: Make name in query_prepared a keyword-only parameter
Revision
956
Author
cito
Date
2019-01-04 06:29:11 -0500 (Fri, 04 Jan 2019)

Log Message

Make name in query_prepared a keyword-only parameter

Modified Paths


Diff

Modified: trunk/pg.py (955 => 956)


--- trunk/pg.py	2019-01-03 22:52:19 UTC (rev 955)
+++ trunk/pg.py	2019-01-04 11:29:11 UTC (rev 956)
@@ -1869,16 +1869,18 @@
         return self.query(*self.adapter.format_query(
             command, parameters, types, inline))
 
-    def query_prepared(self, name=None, *args):
+    def query_prepared(self, *args, **kwargs):
         """Execute a prepared SQL statement.
 
-        This works like the query() method, but you need to pass the name of
-        a prepared statement that you have already created with prepare().
-        If you pass no parameters or pass an empty name, then the unnamed
-        statement will be executed if you created one before.
+        This works like the query() method, except that instead of passing
+        the SQL command, you pass the name of a prepared statement via
+        the keyword-only argument `name`.  If you don't pass a name, the
+        unnamed statement will be executed, if you created one before.
         """
         if not self.db:
             raise _int_error('Connection is not valid')
+        # use kwargs because Python 2 does not support keyword-only arguments
+        name = kwargs.get('name')
         if name is None:
             name = ''
         if args:
@@ -1911,8 +1913,8 @@
         """Describe a prepared SQL statement.
 
         This method returns a Query object describing the result columns of
-        the prepared statement with the given name. If you do not specify a
-        name, then the unnamed statement will be described if you created one.
+        the prepared statement with the given name. If you omit the name,
+        the unnamed statement will be described if you created one before.
         """
         if name is None:
             name = ''

Modified: trunk/tests/test_classic_dbwrapper.py (955 => 956)


--- trunk/tests/test_classic_dbwrapper.py	2019-01-03 22:52:19 UTC (rev 955)
+++ trunk/tests/test_classic_dbwrapper.py	2019-01-04 11:29:11 UTC (rev 956)
@@ -985,34 +985,36 @@
         self.assertIsNone(p("select null", name=''))
 
     def testQueryPreparedWithoutParams(self):
+        f = self.db.query_prepared
+        self.assertRaises(pg.OperationalError, f, 'q')
         p = self.db.prepare
-        p("select 17", 'q1')
-        p("select 42", 'q2')
-        f = self.db.query_prepared
-        r = f('q1').getresult()[0][0]
+        p("select 17", name='q1')
+        p("select 42", name='q2')
+        r = f(name='q1').getresult()[0][0]
         self.assertEqual(r, 17)
-        r = f('q2').getresult()[0][0]
+        r = f(name='q2').getresult()[0][0]
         self.assertEqual(r, 42)
 
     def testQueryPreparedWithParams(self):
         p = self.db.prepare
-        p("select 1 + $1 + $2 + $3", 'sum')
-        p("select initcap($1) || ', ' || $2 || '!'", 'cat')
+        p("select 1 + $1 + $2 + $3", name='sum')
+        p("select initcap($1) || ', ' || $2 || '!'", name='cat')
         f = self.db.query_prepared
-        r = f('sum', 2, 3, 5).getresult()[0][0]
+        r = f(2, 3, 5, name='sum').getresult()[0][0]
         self.assertEqual(r, 11)
-        r = f('cat', 'hello', 'world').getresult()[0][0]
+        r = f('hello', 'world', name='cat').getresult()[0][0]
         self.assertEqual(r, 'Hello, world!')
 
     def testQueryPreparedUnnamedWithOutParams(self):
+        f = self.db.query_prepared
+        self.assertRaises(pg.OperationalError, f)
         p = self.db.prepare
         p("select 'no name'")
-        f = self.db.query_prepared
         r = f().getresult()[0][0]
         self.assertEqual(r, 'no name')
-        r = f(None).getresult()[0][0]
+        r = f(name=None).getresult()[0][0]
         self.assertEqual(r, 'no name')
-        r = f('').getresult()[0][0]
+        r = f(name='').getresult()[0][0]
         self.assertEqual(r, 'no name')
 
     def testQueryPreparedUnnamedWithParams(self):
@@ -1019,10 +1021,12 @@
         p = self.db.prepare
         p("select 1 + $1 + $2")
         f = self.db.query_prepared
-        r = f(None, 2, 3).getresult()[0][0]
+        r = f(2, 3).getresult()[0][0]
         self.assertEqual(r, 6)
-        r = f('', 2, 3).getresult()[0][0]
+        r = f(2, 3, name=None).getresult()[0][0]
         self.assertEqual(r, 6)
+        r = f(2, 3, name='').getresult()[0][0]
+        self.assertEqual(r, 6)
 
     def testDescribePrepared(self):
         self.db.prepare("select 1 as first, 2 as second", 'count')
_______________________________________________
PyGreSQL mailing list
PyGreSQL@Vex.Net
https://mail.vex.net/mailman/listinfo/pygresql

Reply via email to