]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Add a check_results() method to PrepareManager
authorDenis Laxalde <denis.laxalde@dalibo.com>
Mon, 18 Oct 2021 09:31:33 +0000 (11:31 +0200)
committerDenis Laxalde <denis.laxalde@dalibo.com>
Mon, 29 Nov 2021 08:50:50 +0000 (09:50 +0100)
psycopg/psycopg/_preparing.py

index c90512e32b7935186aa5942117f5af472936f703..63b84e62af6936b4e828a2e00f35f301e7ca9c43 100644 (file)
@@ -113,6 +113,20 @@ class PrepareManager:
         value: Value = name if prep is Prepare.SHOULD else 1
         return key, value
 
+    @staticmethod
+    def check_results(results: Sequence["PGresult"]) -> bool:
+        """Return False if 'results' are invalid for prepared statement cache."""
+        if len(results) != 1:
+            # We cannot prepare a multiple statement
+            return False
+
+        status = results[0].status
+        if ExecStatus.COMMAND_OK != status != ExecStatus.TUPLES_OK:
+            # We don't prepare failed queries or other weird results
+            return False
+
+        return True
+
     def maintain(
         self,
         query: PostgresQuery,
@@ -134,13 +148,7 @@ class PrepareManager:
             return None
 
         # The query is not in cache. Let's see if we must add it
-        if len(results) != 1:
-            # We cannot prepare a multiple statement
-            return None
-
-        status = results[0].status
-        if ExecStatus.COMMAND_OK != status != ExecStatus.TUPLES_OK:
-            # We don't prepare failed queries or other weird results
+        if not self.check_results(results):
             return None
 
         # Ok, we got to the conclusion that this query is genuinely to prepare