@@ -138,12 +138,12 @@ default_estimate_num_groups(PlannerInfo *root, List *groupExprs,
138
138
void
139
139
aqo_set_baserel_rows_estimate (PlannerInfo * root , RelOptInfo * rel )
140
140
{
141
- double predicted ;
142
- RangeTblEntry * rte ;
143
- List * relnames = NIL ;
144
- List * selectivities = NULL ;
145
- List * clauses ;
146
- int fss = 0 ;
141
+ double predicted ;
142
+ RangeTblEntry * rte ;
143
+ RelSortOut rels = { NIL , NIL } ;
144
+ List * selectivities = NULL ;
145
+ List * clauses ;
146
+ int fss = 0 ;
147
147
148
148
if (IsQueryDisabled ())
149
149
/* Fast path. */
@@ -166,16 +166,18 @@ aqo_set_baserel_rows_estimate(PlannerInfo *root, RelOptInfo *rel)
166
166
{
167
167
/* Predict for a plane table. */
168
168
Assert (rte -> eref && rte -> eref -> aliasname );
169
- relnames = list_make1 ( makeString ( pstrdup ( rte -> eref -> aliasname )) );
169
+ get_list_of_relids ( root , rel -> relids , & rels );
170
170
}
171
171
172
172
clauses = aqo_get_clauses (root , rel -> baserestrictinfo );
173
- predicted = predict_for_relation (clauses , selectivities , relnames , & fss );
173
+ predicted = predict_for_relation (clauses , selectivities , rels .signatures ,
174
+ & fss );
174
175
rel -> fss_hash = fss ;
175
176
177
+ list_free (rels .hrels );
178
+ list_free (rels .signatures );
176
179
list_free_deep (selectivities );
177
180
list_free (clauses );
178
- list_free (relnames );
179
181
180
182
if (predicted >= 0 )
181
183
{
@@ -212,7 +214,7 @@ aqo_get_parameterized_baserel_size(PlannerInfo *root,
212
214
{
213
215
double predicted ;
214
216
RangeTblEntry * rte = NULL ;
215
- List * relnames = NIL ;
217
+ RelSortOut rels = { NIL , NIL } ;
216
218
List * allclauses = NULL ;
217
219
List * selectivities = NULL ;
218
220
ListCell * l ;
@@ -268,10 +270,12 @@ aqo_get_parameterized_baserel_size(PlannerInfo *root,
268
270
{
269
271
/* Predict for a plane table. */
270
272
Assert (rte -> eref && rte -> eref -> aliasname );
271
- relnames = list_make1 ( makeString ( pstrdup ( rte -> eref -> aliasname )) );
273
+ get_list_of_relids ( root , rel -> relids , & rels );
272
274
}
273
275
274
- predicted = predict_for_relation (allclauses , selectivities , relnames , & fss );
276
+ predicted = predict_for_relation (allclauses , selectivities , rels .signatures , & fss );
277
+ list_free (rels .hrels );
278
+ list_free (rels .signatures );
275
279
276
280
predicted_ppi_rows = predicted ;
277
281
fss_ppi_hash = fss ;
@@ -296,7 +300,7 @@ aqo_set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
296
300
List * restrictlist )
297
301
{
298
302
double predicted ;
299
- List * relnames ;
303
+ RelSortOut rels = { NIL , NIL } ;
300
304
List * outer_clauses ;
301
305
List * inner_clauses ;
302
306
List * allclauses ;
@@ -322,7 +326,7 @@ aqo_set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
322
326
goto default_estimator ;
323
327
}
324
328
325
- relnames = get_relnames (root , rel -> relids );
329
+ get_list_of_relids (root , rel -> relids , & rels );
326
330
outer_clauses = get_path_clauses (outer_rel -> cheapest_total_path , root ,
327
331
& outer_selectivities );
328
332
inner_clauses = get_path_clauses (inner_rel -> cheapest_total_path , root ,
@@ -333,7 +337,11 @@ aqo_set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
333
337
list_concat (outer_selectivities ,
334
338
inner_selectivities ));
335
339
336
- predicted = predict_for_relation (allclauses , selectivities , relnames , & fss );
340
+ predicted = predict_for_relation (allclauses , selectivities , rels .signatures ,
341
+ & fss );
342
+ list_free (rels .hrels );
343
+ list_free (rels .signatures );
344
+
337
345
rel -> fss_hash = fss ;
338
346
339
347
if (predicted >= 0 )
@@ -364,7 +372,7 @@ aqo_get_parameterized_joinrel_size(PlannerInfo *root,
364
372
List * clauses )
365
373
{
366
374
double predicted ;
367
- List * relnames ;
375
+ RelSortOut rels = { NIL , NIL } ;
368
376
List * outer_clauses ;
369
377
List * inner_clauses ;
370
378
List * allclauses ;
@@ -390,7 +398,7 @@ aqo_get_parameterized_joinrel_size(PlannerInfo *root,
390
398
goto default_estimator ;
391
399
}
392
400
393
- relnames = get_relnames (root , rel -> relids );
401
+ get_list_of_relids (root , rel -> relids , & rels );
394
402
outer_clauses = get_path_clauses (outer_path , root , & outer_selectivities );
395
403
inner_clauses = get_path_clauses (inner_path , root , & inner_selectivities );
396
404
allclauses = list_concat (aqo_get_clauses (root , clauses ),
@@ -399,7 +407,10 @@ aqo_get_parameterized_joinrel_size(PlannerInfo *root,
399
407
list_concat (outer_selectivities ,
400
408
inner_selectivities ));
401
409
402
- predicted = predict_for_relation (allclauses , selectivities , relnames , & fss );
410
+ predicted = predict_for_relation (allclauses , selectivities , rels .signatures ,
411
+ & fss );
412
+ list_free (rels .hrels );
413
+ list_free (rels .signatures );
403
414
404
415
predicted_ppi_rows = predicted ;
405
416
fss_ppi_hash = fss ;
@@ -426,13 +437,16 @@ predict_num_groups(PlannerInfo *root, Path *subpath, List *group_exprs,
426
437
child_fss = subpath -> parent -> fss_hash ;
427
438
else
428
439
{
429
- List * relnames ;
430
- List * clauses ;
431
- List * selectivities = NIL ;
440
+ RelSortOut rels = { NIL , NIL } ;
441
+ List * clauses ;
442
+ List * selectivities = NIL ;
432
443
433
- relnames = get_relnames (root , subpath -> parent -> relids );
444
+ get_list_of_relids (root , subpath -> parent -> relids , & rels );
434
445
clauses = get_path_clauses (subpath , root , & selectivities );
435
- (void ) predict_for_relation (clauses , selectivities , relnames , & child_fss );
446
+ (void ) predict_for_relation (clauses , selectivities , rels .signatures ,
447
+ & child_fss );
448
+ list_free (rels .hrels );
449
+ list_free (rels .signatures );
436
450
}
437
451
438
452
* fss = get_grouped_exprs_hash (child_fss , group_exprs );
0 commit comments