]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Add "char" data type loading
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 24 Aug 2021 19:11:20 +0000 (21:11 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 25 Aug 2021 01:05:17 +0000 (03:05 +0200)
Not very used so won't implement it in C, but useful to read catalog
data.

psycopg/psycopg/types/string.py
tests/types/test_string.py

index b99cf4c198229348e39b526856177d579cec568d..b3bac6b0c9aa2b884fff0575621b51cd3060dcce 100644 (file)
@@ -191,15 +191,18 @@ def register_default_adapters(context: AdaptContext) -> None:
     # the role of unknown, so it can be cast automatically to other types).
     adapters.register_dumper(str, StrBinaryDumper)
     adapters.register_dumper(str, StrDumperUnknown)
+
     adapters.register_loader(postgres.INVALID_OID, TextLoader)
     adapters.register_loader("bpchar", TextLoader)
     adapters.register_loader("name", TextLoader)
     adapters.register_loader("text", TextLoader)
     adapters.register_loader("varchar", TextLoader)
+    adapters.register_loader('"char"', TextLoader)
     adapters.register_loader("bpchar", TextBinaryLoader)
     adapters.register_loader("name", TextBinaryLoader)
     adapters.register_loader("text", TextBinaryLoader)
     adapters.register_loader("varchar", TextBinaryLoader)
+    adapters.register_loader('"char"', TextBinaryLoader)
 
     adapters.register_dumper(bytes, BytesDumper)
     adapters.register_dumper(bytearray, BytesDumper)
@@ -207,6 +210,7 @@ def register_default_adapters(context: AdaptContext) -> None:
     adapters.register_dumper(bytes, BytesBinaryDumper)
     adapters.register_dumper(bytearray, BytesBinaryDumper)
     adapters.register_dumper(memoryview, BytesBinaryDumper)
+
     adapters.register_loader("bytea", ByteaLoader)
     adapters.register_loader(postgres.INVALID_OID, ByteaBinaryLoader)
     adapters.register_loader("bytea", ByteaBinaryLoader)
index 0fa7a6bd503ef8f9e855e3762dff0ff730e5e6e1..1633090d062e6c6cb14263ae52cc05cf9b2f919a 100644 (file)
@@ -73,11 +73,17 @@ def test_quote_percent(conn):
     assert cur.fetchone()[0] is True
 
 
-@pytest.mark.parametrize("typename", ["text", "varchar", "name", "bpchar"])
+@pytest.mark.parametrize(
+    "typename", ["text", "varchar", "name", "bpchar", '"char"']
+)
 @pytest.mark.parametrize("fmt_out", [pq.Format.TEXT, pq.Format.BINARY])
 def test_load_1char(conn, typename, fmt_out):
     cur = conn.cursor(binary=fmt_out)
     for i in range(1, 256):
+        if typename == '"char"' and i > 127:
+            # for char > 128 the client receives only 194 or 195.
+            continue
+
         cur.execute(f"select chr(%s)::{typename}", (i,))
         res = cur.fetchone()[0]
         assert res == chr(i)