Skip to content

Commit e2c511f

Browse files
committed
test improve exists
1 parent 3f3fa28 commit e2c511f

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

exists_in_join_compare.py

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ def create_indexes(cr):
8787

8888
def fill_database(data_case):
8989

90-
print("create sale_order")
9190
with psycopg2.connect(CONNECTION_PARAMS) as conn, conn.cursor() as cr:
9291
states = []
9392
for state, proportion in data_case['sale_order_state_proportion'].items():
@@ -101,7 +100,6 @@ def fill_database(data_case):
101100
INSERT INTO sale_order (state, partner) VALUES {','.join(['%s'] * len(values_sale_order))}
102101
""", values_sale_order)
103102

104-
print("create sale_order_line")
105103
with psycopg2.connect(CONNECTION_PARAMS) as conn, conn.cursor() as cr:
106104
values_sale_order_line = tuple(
107105
(
@@ -119,7 +117,7 @@ def fill_database(data_case):
119117
SQL_alternative = {
120118
"sale.order.line - search - [order_id.state = 'draft']": {
121119
'in': """
122-
SELECT "sale_order_line"."id"
120+
SELECT "sale_order_line"."id"
123121
FROM "sale_order_line"
124122
WHERE (
125123
"sale_order_line"."sale_id" IN (
@@ -154,8 +152,8 @@ def fill_database(data_case):
154152
"""
155153
WITH subquery AS (
156154
SELECT "sale_order"."id" FROM "sale_order" WHERE "sale_order"."state" = 'draft'
157-
)
158-
SELECT "sale_order_line"."id"
155+
)
156+
SELECT "sale_order_line"."id"
159157
FROM "sale_order_line"
160158
WHERE "sale_order_line"."sale_id" IN (SELECT "id" FROM "subquery")
161159
ORDER BY "sale_order_line"."id"
@@ -165,8 +163,8 @@ def fill_database(data_case):
165163
# """
166164
# WITH subquery AS (
167165
# SELECT * FROM "sale_order" WHERE "sale_order"."state" = 'draft'
168-
# )
169-
# SELECT "sale_order_line"."id"
166+
# )
167+
# SELECT "sale_order_line"."id"
170168
# FROM "sale_order_line"
171169
# LEFT JOIN "subquery" ON "subquery"."id" = "sale_order_line"."sale_id"
172170
# WHERE "subquery"."id" IS NOT NULL
@@ -175,7 +173,7 @@ def fill_database(data_case):
175173
},
176174
"sale.order.line - search - [order_id.state = 'draft' OR qty > 50000]": {
177175
'in': """
178-
SELECT "sale_order_line"."id"
176+
SELECT "sale_order_line"."id"
179177
FROM "sale_order_line"
180178
WHERE (
181179
"sale_order_line"."sale_id" IN (
@@ -201,7 +199,7 @@ def fill_database(data_case):
201199

202200
'join':
203201
"""
204-
SELECT "sale_order_line"."id"
202+
SELECT "sale_order_line"."id"
205203
FROM "sale_order_line"
206204
LEFT JOIN "sale_order" ON "sale_order"."id" = "sale_order_line"."sale_id"
207205
WHERE "sale_order"."state" = 'draft' OR "sale_order_line"."qty" > 50000
@@ -212,8 +210,8 @@ def fill_database(data_case):
212210
"""
213211
WITH subquery AS (
214212
SELECT "sale_order"."id" FROM "sale_order" WHERE "sale_order"."state" = 'draft'
215-
)
216-
SELECT "sale_order_line"."id"
213+
)
214+
SELECT "sale_order_line"."id"
217215
FROM "sale_order_line"
218216
WHERE "sale_order_line"."sale_id" IN (SELECT "id" FROM "subquery") OR "sale_order_line"."qty" > 50000
219217
ORDER BY "sale_order_line"."id"
@@ -233,7 +231,7 @@ def fill_database(data_case):
233231
},
234232
"sale.order.line - search - [order_id.state = 'draft' AND qty > 50000]": {
235233
'in': """
236-
SELECT "sale_order_line"."id"
234+
SELECT "sale_order_line"."id"
237235
FROM "sale_order_line"
238236
WHERE (
239237
"sale_order_line"."sale_id" IN (
@@ -259,7 +257,7 @@ def fill_database(data_case):
259257

260258
'join':
261259
"""
262-
SELECT "sale_order_line"."id"
260+
SELECT "sale_order_line"."id"
263261
FROM "sale_order_line"
264262
LEFT JOIN "sale_order" ON "sale_order"."id" = "sale_order_line"."sale_id"
265263
WHERE "sale_order"."state" = 'draft' AND "sale_order_line"."qty" > 50000
@@ -270,8 +268,8 @@ def fill_database(data_case):
270268
"""
271269
WITH subquery AS (
272270
SELECT "sale_order"."id" FROM "sale_order" WHERE "sale_order"."state" = 'draft'
273-
)
274-
SELECT "sale_order_line"."id"
271+
)
272+
SELECT "sale_order_line"."id"
275273
FROM "sale_order_line"
276274
WHERE "sale_order_line"."sale_id" IN (SELECT "id" FROM "subquery") AND "sale_order_line"."qty" > 50000
277275
ORDER BY "sale_order_line"."id"
@@ -293,7 +291,6 @@ def fill_database(data_case):
293291

294292
def one_data_case_test():
295293

296-
print("Launch test")
297294
result_explain = defaultdict(dict)
298295
for alternative, sql_requests in SQL_alternative.items():
299296
with psycopg2.connect(CONNECTION_PARAMS) as conn, conn.cursor() as cr:
@@ -314,7 +311,7 @@ def one_data_case_test():
314311
for alternative, case_plans in result_explain.items():
315312
list_plan = list(case_plans.values())
316313
if len(set(list_plan)) != 1:
317-
print(f"Some queries has a different plan for {alternative} ({len(set(list_plan))}):")
314+
print(f"\n-> Some queries has a different plan for {alternative} ({len(set(list_plan))}):")
318315
case_by_plan = defaultdict(list)
319316
for case, plan in case_plans.items():
320317
case_by_plan[plan].append(case)
@@ -323,24 +320,39 @@ def one_data_case_test():
323320
print(f"These cases {cases} has this plan:\n{plan}")
324321
print(" ------------------------")
325322
else:
326-
print(f"{alternative} all plan is equals")
323+
print(f"\n-> {alternative} all plan is equals")
327324

328325

329326
def main():
330327
psql_set_timeout(CONNECTION_PARAMS, 30)
328+
with psycopg2.connect(CONNECTION_PARAMS) as conn, conn.cursor() as cur:
329+
cur.execute("SET jit_above_cost = 100000;")
331330

332331
for str_case, data_case in data_cases.items():
333332
print(" ################# ", str_case, ' #####################')
334333
with psycopg2.connect(CONNECTION_PARAMS) as conn, conn.cursor() as cr:
335334
drop_tables(cr)
336335
create_tables(cr)
337-
338336

337+
print('> Fill Database')
339338
fill_database(data_case)
339+
print('> Analyze Vaccum')
340340
psql_vacuum_analyse(CONNECTION_PARAMS, None)
341-
341+
print('> Launch Test\n')
342342
one_data_case_test()
343343

344+
with psycopg2.connect(CONNECTION_PARAMS) as conn, conn.cursor() as cur:
345+
cur.execute("SET jit_above_cost = -1;")
346+
347+
348+
# Issue with the EXISTS:
349+
350+
# the AlternativesSubPlan cost is "badly" compute
351+
# And since In psql v14 this commit has been added:
352+
# https://github.com/postgres/postgres/commit/41efb8340877e8ffd0023bb6b2ef22ffd1ca014d
353+
354+
355+
344356

345357

346358
if __name__ == '__main__':

0 commit comments

Comments
 (0)