@@ -87,7 +87,6 @@ def create_indexes(cr):
8787
8888def 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):
119117SQL_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
294292def 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
329326def 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
346358if __name__ == '__main__' :
0 commit comments