diff --git a/api/alembic/versions/sql/0057_svod2_server_paging.sql b/api/alembic/versions/sql/0057_svod2_server_paging.sql index b9dfe6f..cc87c71 100644 --- a/api/alembic/versions/sql/0057_svod2_server_paging.sql +++ b/api/alembic/versions/sql/0057_svod2_server_paging.sql @@ -944,7 +944,8 @@ CREATE OR REPLACE FUNCTION v3.v_svod2_facets( p_org_name text ) RETURNS TABLE(kind varchar, value varchar, n bigint) -LANGUAGE sql STABLE +-- jit off: стоимость плана выше jit_above_cost, JIT добавлял ~1,4 с к вызову с буквальными параметрами. +LANGUAGE sql STABLE SET jit TO off AS $function$ WITH q AS MATERIALIZED ( SELECT NULLIF(v3.svod2_casefold(v3.svod2_js_trim(p_search)), '') AS s, diff --git a/api/tests/integration/test_svod2_sql.py b/api/tests/integration/test_svod2_sql.py index 5779e21..f2792c2 100644 --- a/api/tests/integration/test_svod2_sql.py +++ b/api/tests/integration/test_svod2_sql.py @@ -120,23 +120,14 @@ def test_facets_match_screen_oracle(svod2_sql, svod2_data, client, admin_tokens, assert {r.value: r.n for r in got if r.kind == col} == expected[col] -def test_facets_search_subplan_is_not_correlated(svod2_sql): - import re - - plan = "\n".join(r[0] for r in svod2_sql( - "EXPLAIN (VERBOSE, COSTS OFF) " - "SELECT * FROM v3.v_svod2_facets('GO', 2031, NULL, 'аренда', NULL, NULL, NULL)", None)) - # IN по svod2_lines должен быть hashed SubPlan (считается один раз); коррелированный - # считался бы на каждую строку. Не-hashed SubPlan в Filter внутри svod2_lines (EXISTS поиска) - # законен, поэтому смотрим только на выражения в Output. - outputs = [l for l in plan.splitlines() if "Output:" in l and "SubPlan" in l] - assert any("hashed SubPlan" in l for l in outputs), plan - assert not any(re.search(r"(?