from .oids import builtins, TypeInfo
if TYPE_CHECKING:
- from ..connection import Connection
+ from ..connection import Connection, AsyncConnection
TEXT_OID = builtins["text"].oid
cur = conn.cursor(binary=True)
cur.execute(_type_info_query, (name,))
rec = cur.fetchone()
- if rec is not None:
- return CompositeTypeInfo(*rec)
- else:
- return None
+ return CompositeTypeInfo(*rec) if rec is not None else None
+
+
+async def fetch_info_async(
+ conn: "AsyncConnection", name: str
+) -> Optional[CompositeTypeInfo]:
+ cur = conn.cursor(binary=True)
+ await cur.execute(_type_info_query, (name,))
+ rec = await cur.fetchone()
+ return CompositeTypeInfo(*rec) if rec is not None else None
def register(
assert info.fields[i].type_oid == builtins[t].oid
+def test_fetch_info_async(aconn, loop, testcomp):
+ info = loop.run_until_complete(
+ composite.fetch_info_async(aconn, "testcomp")
+ )
+ assert info.name == "testcomp"
+ assert info.oid > 0
+ assert info.oid != info.array_oid > 0
+ assert len(info.fields) == 3
+ for i, (name, t) in enumerate(
+ [("foo", "text"), ("bar", "int8"), ("baz", "float8")]
+ ):
+ assert info.fields[i].name == name
+ assert info.fields[i].type_oid == builtins[t].oid
+
+
@pytest.mark.parametrize("fmt_out", [Format.TEXT, Format.BINARY])
def test_cast_composite(conn, testcomp, fmt_out):
cur = conn.cursor(binary=fmt_out == Format.BINARY)