conn.execute("select 1::bigint")
conn.execute("select 1::text")
- msgs = "\n".join(rec.message for rec in caplog.records)
+ msgs = "\n".join((rec.message for rec in caplog.records))
if psycopg.pq.__build_version__ >= 170000:
assert "PGconn.send_close_prepared" in msgs
assert "DEALLOCATE" not in msgs
Prepared statements tests
"""
+import sys
+import logging
import datetime as dt
from decimal import Decimal
import pytest
+import psycopg
from psycopg.rows import namedtuple_row
+from psycopg.pq._debug import PGconnDebug
@pytest.mark.parametrize("value", [None, 0, 3])
assert got == [f"select {i}" for i in ["'a'", 6, 7, 8, 9]]
+@pytest.mark.skipif("psycopg._cmodule._psycopg", reason="Python-only debug conn")
+async def test_deallocate_or_close(aconn, caplog):
+ aconn.pgconn = PGconnDebug(aconn.pgconn)
+ caplog.set_level(logging.INFO, logger="psycopg.debug")
+
+ await aconn.set_autocommit(True)
+ aconn.prepare_threshold = 0
+ aconn.prepared_max = 1
+
+ await aconn.execute("select 1::bigint")
+ await aconn.execute("select 1::text")
+
+ msgs = "\n".join(rec.message for rec in caplog.records)
+ if psycopg.pq.__build_version__ >= 170000:
+ assert "PGconn.send_close_prepared" in msgs
+ assert "DEALLOCATE" not in msgs
+ else:
+ assert "PGconn.send_close_prepared" not in msgs
+ assert "DEALLOCATE" in msgs
+
+
+def test_prepared_max_none(conn):
+ conn.prepared_max = 42
+ assert conn.prepared_max == 42
+ assert conn._prepared.prepared_max == 42
+
+ conn.prepared_max = None
+ assert conn._prepared.prepared_max == sys.maxsize
+ assert conn.prepared_max is None
+
+ conn.prepared_max = 0
+ assert conn._prepared.prepared_max == 0
+ assert conn.prepared_max == 0
+
+ conn.prepared_max = 24
+ assert conn.prepared_max == 24
+ assert conn._prepared.prepared_max == 24
+
+
async def test_different_types(aconn):
aconn.prepare_threshold = 0
await aconn.execute("select %s", [None])