@@ -563,7 +563,7 @@ set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,
563
563
set_cheapest (rel );
564
564
565
565
#ifdef OPTIMIZER_DEBUG
566
- debug_print_rel ( root , rel );
566
+ pprint ( rel );
567
567
#endif
568
568
}
569
569
@@ -3504,7 +3504,7 @@ standard_join_search(PlannerInfo *root, int levels_needed, List *initial_rels)
3504
3504
set_cheapest (rel );
3505
3505
3506
3506
#ifdef OPTIMIZER_DEBUG
3507
- debug_print_rel ( root , rel );
3507
+ pprint ( rel );
3508
3508
#endif
3509
3509
}
3510
3510
}
@@ -4372,7 +4372,7 @@ generate_partitionwise_join_paths(PlannerInfo *root, RelOptInfo *rel)
4372
4372
continue ;
4373
4373
4374
4374
#ifdef OPTIMIZER_DEBUG
4375
- debug_print_rel ( root , child_rel );
4375
+ pprint ( child_rel );
4376
4376
#endif
4377
4377
4378
4378
live_children = lappend (live_children , child_rel );
@@ -4389,325 +4389,3 @@ generate_partitionwise_join_paths(PlannerInfo *root, RelOptInfo *rel)
4389
4389
add_paths_to_append_rel (root , rel , live_children );
4390
4390
list_free (live_children );
4391
4391
}
4392
-
4393
-
4394
- /*****************************************************************************
4395
- * DEBUG SUPPORT
4396
- *****************************************************************************/
4397
-
4398
- #ifdef OPTIMIZER_DEBUG
4399
-
4400
- static void
4401
- print_relids (PlannerInfo * root , Relids relids )
4402
- {
4403
- int x ;
4404
- bool first = true;
4405
-
4406
- x = -1 ;
4407
- while ((x = bms_next_member (relids , x )) >= 0 )
4408
- {
4409
- if (!first )
4410
- printf (" " );
4411
- if (x < root -> simple_rel_array_size &&
4412
- root -> simple_rte_array [x ])
4413
- printf ("%s" , root -> simple_rte_array [x ]-> eref -> aliasname );
4414
- else
4415
- printf ("%d" , x );
4416
- first = false;
4417
- }
4418
- }
4419
-
4420
- static void
4421
- print_restrictclauses (PlannerInfo * root , List * clauses )
4422
- {
4423
- ListCell * l ;
4424
-
4425
- foreach (l , clauses )
4426
- {
4427
- RestrictInfo * c = lfirst (l );
4428
-
4429
- print_expr ((Node * ) c -> clause , root -> parse -> rtable );
4430
- if (lnext (clauses , l ))
4431
- printf (", " );
4432
- }
4433
- }
4434
-
4435
- static void
4436
- print_path (PlannerInfo * root , Path * path , int indent )
4437
- {
4438
- const char * ptype ;
4439
- bool join = false;
4440
- Path * subpath = NULL ;
4441
- int i ;
4442
-
4443
- switch (nodeTag (path ))
4444
- {
4445
- case T_Path :
4446
- switch (path -> pathtype )
4447
- {
4448
- case T_SeqScan :
4449
- ptype = "SeqScan" ;
4450
- break ;
4451
- case T_SampleScan :
4452
- ptype = "SampleScan" ;
4453
- break ;
4454
- case T_FunctionScan :
4455
- ptype = "FunctionScan" ;
4456
- break ;
4457
- case T_TableFuncScan :
4458
- ptype = "TableFuncScan" ;
4459
- break ;
4460
- case T_ValuesScan :
4461
- ptype = "ValuesScan" ;
4462
- break ;
4463
- case T_CteScan :
4464
- ptype = "CteScan" ;
4465
- break ;
4466
- case T_NamedTuplestoreScan :
4467
- ptype = "NamedTuplestoreScan" ;
4468
- break ;
4469
- case T_Result :
4470
- ptype = "Result" ;
4471
- break ;
4472
- case T_WorkTableScan :
4473
- ptype = "WorkTableScan" ;
4474
- break ;
4475
- default :
4476
- ptype = "???Path" ;
4477
- break ;
4478
- }
4479
- break ;
4480
- case T_IndexPath :
4481
- ptype = "IdxScan" ;
4482
- break ;
4483
- case T_BitmapHeapPath :
4484
- ptype = "BitmapHeapScan" ;
4485
- break ;
4486
- case T_BitmapAndPath :
4487
- ptype = "BitmapAndPath" ;
4488
- break ;
4489
- case T_BitmapOrPath :
4490
- ptype = "BitmapOrPath" ;
4491
- break ;
4492
- case T_TidPath :
4493
- ptype = "TidScan" ;
4494
- break ;
4495
- case T_TidRangePath :
4496
- ptype = "TidRangePath" ;
4497
- break ;
4498
- case T_SubqueryScanPath :
4499
- ptype = "SubqueryScan" ;
4500
- break ;
4501
- case T_ForeignPath :
4502
- ptype = "ForeignScan" ;
4503
- break ;
4504
- case T_CustomPath :
4505
- ptype = "CustomScan" ;
4506
- break ;
4507
- case T_NestPath :
4508
- ptype = "NestLoop" ;
4509
- join = true;
4510
- break ;
4511
- case T_MergePath :
4512
- ptype = "MergeJoin" ;
4513
- join = true;
4514
- break ;
4515
- case T_HashPath :
4516
- ptype = "HashJoin" ;
4517
- join = true;
4518
- break ;
4519
- case T_AppendPath :
4520
- ptype = "Append" ;
4521
- break ;
4522
- case T_MergeAppendPath :
4523
- ptype = "MergeAppend" ;
4524
- break ;
4525
- case T_GroupResultPath :
4526
- ptype = "GroupResult" ;
4527
- break ;
4528
- case T_MaterialPath :
4529
- ptype = "Material" ;
4530
- subpath = ((MaterialPath * ) path )-> subpath ;
4531
- break ;
4532
- case T_MemoizePath :
4533
- ptype = "Memoize" ;
4534
- subpath = ((MemoizePath * ) path )-> subpath ;
4535
- break ;
4536
- case T_UniquePath :
4537
- ptype = "Unique" ;
4538
- subpath = ((UniquePath * ) path )-> subpath ;
4539
- break ;
4540
- case T_GatherPath :
4541
- ptype = "Gather" ;
4542
- subpath = ((GatherPath * ) path )-> subpath ;
4543
- break ;
4544
- case T_GatherMergePath :
4545
- ptype = "GatherMerge" ;
4546
- subpath = ((GatherMergePath * ) path )-> subpath ;
4547
- break ;
4548
- case T_ProjectionPath :
4549
- ptype = "Projection" ;
4550
- subpath = ((ProjectionPath * ) path )-> subpath ;
4551
- break ;
4552
- case T_ProjectSetPath :
4553
- ptype = "ProjectSet" ;
4554
- subpath = ((ProjectSetPath * ) path )-> subpath ;
4555
- break ;
4556
- case T_SortPath :
4557
- ptype = "Sort" ;
4558
- subpath = ((SortPath * ) path )-> subpath ;
4559
- break ;
4560
- case T_IncrementalSortPath :
4561
- ptype = "IncrementalSort" ;
4562
- subpath = ((SortPath * ) path )-> subpath ;
4563
- break ;
4564
- case T_GroupPath :
4565
- ptype = "Group" ;
4566
- subpath = ((GroupPath * ) path )-> subpath ;
4567
- break ;
4568
- case T_UpperUniquePath :
4569
- ptype = "UpperUnique" ;
4570
- subpath = ((UpperUniquePath * ) path )-> subpath ;
4571
- break ;
4572
- case T_AggPath :
4573
- ptype = "Agg" ;
4574
- subpath = ((AggPath * ) path )-> subpath ;
4575
- break ;
4576
- case T_GroupingSetsPath :
4577
- ptype = "GroupingSets" ;
4578
- subpath = ((GroupingSetsPath * ) path )-> subpath ;
4579
- break ;
4580
- case T_MinMaxAggPath :
4581
- ptype = "MinMaxAgg" ;
4582
- break ;
4583
- case T_WindowAggPath :
4584
- ptype = "WindowAgg" ;
4585
- subpath = ((WindowAggPath * ) path )-> subpath ;
4586
- break ;
4587
- case T_SetOpPath :
4588
- ptype = "SetOp" ;
4589
- subpath = ((SetOpPath * ) path )-> subpath ;
4590
- break ;
4591
- case T_RecursiveUnionPath :
4592
- ptype = "RecursiveUnion" ;
4593
- break ;
4594
- case T_LockRowsPath :
4595
- ptype = "LockRows" ;
4596
- subpath = ((LockRowsPath * ) path )-> subpath ;
4597
- break ;
4598
- case T_ModifyTablePath :
4599
- ptype = "ModifyTable" ;
4600
- break ;
4601
- case T_LimitPath :
4602
- ptype = "Limit" ;
4603
- subpath = ((LimitPath * ) path )-> subpath ;
4604
- break ;
4605
- default :
4606
- ptype = "???Path" ;
4607
- break ;
4608
- }
4609
-
4610
- for (i = 0 ; i < indent ; i ++ )
4611
- printf ("\t" );
4612
- printf ("%s" , ptype );
4613
-
4614
- if (path -> parent )
4615
- {
4616
- printf ("(" );
4617
- print_relids (root , path -> parent -> relids );
4618
- printf (")" );
4619
- }
4620
- if (path -> param_info )
4621
- {
4622
- printf (" required_outer (" );
4623
- print_relids (root , path -> param_info -> ppi_req_outer );
4624
- printf (")" );
4625
- }
4626
- printf (" rows=%.0f cost=%.2f..%.2f\n" ,
4627
- path -> rows , path -> startup_cost , path -> total_cost );
4628
-
4629
- if (path -> pathkeys )
4630
- {
4631
- for (i = 0 ; i < indent ; i ++ )
4632
- printf ("\t" );
4633
- printf (" pathkeys: " );
4634
- print_pathkeys (path -> pathkeys , root -> parse -> rtable );
4635
- }
4636
-
4637
- if (join )
4638
- {
4639
- JoinPath * jp = (JoinPath * ) path ;
4640
-
4641
- for (i = 0 ; i < indent ; i ++ )
4642
- printf ("\t" );
4643
- printf (" clauses: " );
4644
- print_restrictclauses (root , jp -> joinrestrictinfo );
4645
- printf ("\n" );
4646
-
4647
- if (IsA (path , MergePath ))
4648
- {
4649
- MergePath * mp = (MergePath * ) path ;
4650
-
4651
- for (i = 0 ; i < indent ; i ++ )
4652
- printf ("\t" );
4653
- printf (" sortouter=%d sortinner=%d materializeinner=%d\n" ,
4654
- ((mp -> outersortkeys ) ? 1 : 0 ),
4655
- ((mp -> innersortkeys ) ? 1 : 0 ),
4656
- ((mp -> materialize_inner ) ? 1 : 0 ));
4657
- }
4658
-
4659
- print_path (root , jp -> outerjoinpath , indent + 1 );
4660
- print_path (root , jp -> innerjoinpath , indent + 1 );
4661
- }
4662
-
4663
- if (subpath )
4664
- print_path (root , subpath , indent + 1 );
4665
- }
4666
-
4667
- void
4668
- debug_print_rel (PlannerInfo * root , RelOptInfo * rel )
4669
- {
4670
- ListCell * l ;
4671
-
4672
- printf ("RELOPTINFO (" );
4673
- print_relids (root , rel -> relids );
4674
- printf ("): rows=%.0f width=%d\n" , rel -> rows , rel -> reltarget -> width );
4675
-
4676
- if (rel -> baserestrictinfo )
4677
- {
4678
- printf ("\tbaserestrictinfo: " );
4679
- print_restrictclauses (root , rel -> baserestrictinfo );
4680
- printf ("\n" );
4681
- }
4682
-
4683
- if (rel -> joininfo )
4684
- {
4685
- printf ("\tjoininfo: " );
4686
- print_restrictclauses (root , rel -> joininfo );
4687
- printf ("\n" );
4688
- }
4689
-
4690
- printf ("\tpath list:\n" );
4691
- foreach (l , rel -> pathlist )
4692
- print_path (root , lfirst (l ), 1 );
4693
- if (rel -> cheapest_parameterized_paths )
4694
- {
4695
- printf ("\n\tcheapest parameterized paths:\n" );
4696
- foreach (l , rel -> cheapest_parameterized_paths )
4697
- print_path (root , lfirst (l ), 1 );
4698
- }
4699
- if (rel -> cheapest_startup_path )
4700
- {
4701
- printf ("\n\tcheapest startup path:\n" );
4702
- print_path (root , rel -> cheapest_startup_path , 1 );
4703
- }
4704
- if (rel -> cheapest_total_path )
4705
- {
4706
- printf ("\n\tcheapest total path:\n" );
4707
- print_path (root , rel -> cheapest_total_path , 1 );
4708
- }
4709
- printf ("\n" );
4710
- fflush (stdout );
4711
- }
4712
-
4713
- #endif /* OPTIMIZER_DEBUG */
0 commit comments