def test_dump_custom_empty(conn, testrange): info = RangeInfo.fetch(conn, "testrange") register_range(info, conn) r = Range[str](empty=True) cur = conn.execute("select 'empty'::testrange = %s", (r, )) assert cur.fetchone()[0] is True
def test_load_custom_empty(conn, testrange, fmt_out): info = RangeInfo.fetch(conn, "testrange") register_range(info, conn) cur = conn.cursor(binary=fmt_out) (got, ) = cur.execute("select 'empty'::testrange").fetchone() assert isinstance(got, Range) assert got.isempty
def test_load_quoting(conn, testrange, fmt_out): info = RangeInfo.fetch(conn, "testrange") register_range(info, conn) cur = conn.cursor(binary=fmt_out) for i in range(1, 254): cur.execute( "select testrange(chr(%(low)s::int), chr(%(up)s::int))", {"low": i, "up": i + 1}, ) got = cur.fetchone()[0] assert isinstance(got, Range) assert ord(got.lower) == i assert ord(got.upper) == i + 1
def test_dump_quoting(conn, testrange): info = RangeInfo.fetch(conn, "testrange") register_range(info, conn) cur = conn.cursor() for i in range(1, 254): cur.execute( """ select ascii(lower(%(r)s)) = %(low)s and ascii(upper(%(r)s)) = %(up)s """, {"r": Range(chr(i), chr(i + 1)), "low": i, "up": i + 1}, ) assert cur.fetchone()[0] is True
def test_no_info_error(conn): with pytest.raises(TypeError, match="range"): register_range(None, conn) # type: ignore[arg-type]