mirror of
https://github.com/neondatabase/neon.git
synced 2025-12-23 06:09:59 +00:00
## Problem `TYPE_CHECKING` is used inconsistently across Python tests. ## Summary of changes - Update `ruff`: 0.7.0 -> 0.11.2 - Enable TC (flake8-type-checking): https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc - (auto)fix all new issues
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from contextlib import closing
|
|
from typing import TYPE_CHECKING
|
|
|
|
import pytest
|
|
from pytest_lazyfixture import lazy_fixture
|
|
|
|
if TYPE_CHECKING:
|
|
from fixtures.compare_fixtures import PgCompare
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"env",
|
|
[
|
|
# The test is too slow to run in CI, but fast enough to run with remote tests
|
|
pytest.param(lazy_fixture("neon_compare"), id="neon", marks=pytest.mark.slow),
|
|
pytest.param(lazy_fixture("vanilla_compare"), id="vanilla", marks=pytest.mark.slow),
|
|
pytest.param(lazy_fixture("remote_compare"), id="remote", marks=pytest.mark.remote_cluster),
|
|
],
|
|
)
|
|
def test_dup_key(env: PgCompare):
|
|
# Update the same page many times, then measure read performance
|
|
|
|
with closing(env.pg.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
cur.execute("drop table if exists t, f;")
|
|
|
|
cur.execute("SET synchronous_commit=off")
|
|
cur.execute("SET statement_timeout=0")
|
|
|
|
# Write many updates to the same row
|
|
with env.record_duration("write"):
|
|
cur.execute("create table t (i integer, filler text);")
|
|
cur.execute("insert into t values (0);")
|
|
cur.execute(
|
|
"""
|
|
do $$
|
|
begin
|
|
for ivar in 1..5000000 loop
|
|
update t set i = ivar, filler = repeat('a', 50);
|
|
update t set i = ivar, filler = repeat('b', 50);
|
|
update t set i = ivar, filler = repeat('c', 50);
|
|
update t set i = ivar, filler = repeat('d', 50);
|
|
rollback;
|
|
end loop;
|
|
end;
|
|
$$;
|
|
"""
|
|
)
|
|
|
|
# Write 3-4 MB to evict t from compute cache
|
|
cur.execute("create table f (i integer);")
|
|
cur.execute("insert into f values (generate_series(1,100000));")
|
|
|
|
# Read
|
|
with env.record_duration("read"):
|
|
cur.execute("select * from t;")
|
|
cur.fetchall()
|