From: Denis Laxalde Date: Mon, 18 Oct 2021 09:31:33 +0000 (+0200) Subject: Add a check_results() method to PrepareManager X-Git-Tag: pool-3.1~98^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=076d69533d83caddf172759efcef9da23582745f;p=thirdparty%2Fpsycopg.git Add a check_results() method to PrepareManager --- diff --git a/psycopg/psycopg/_preparing.py b/psycopg/psycopg/_preparing.py index c90512e32..63b84e62a 100644 --- a/psycopg/psycopg/_preparing.py +++ b/psycopg/psycopg/_preparing.py @@ -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