@@ -34,7 +34,132 @@ void testPostgresQueryPlan() throws Exception {
34
34
q = new SQLQueryAdapter ("CREATE TABLE t2(c INT);" , true );
35
35
q .execute (state );
36
36
String queryPlan = provider .getQueryPlan ("SELECT * FROM t1 RIGHT JOIN t2 ON a<>0;" , state );
37
- assertEquals ("NestedLoopLeftJoin;->SeqScanont2;->Materialize;->SeqScanont1;Filter:;" , queryPlan );
37
+ assertEquals ("Nested Loop Seq Scan Materialize Seq Scan" , queryPlan );
38
+ }
39
+
40
+ @ Test
41
+ void testFormatQueryPlan () throws Exception {
42
+
43
+ PostgresProvider provider = new PostgresProvider ();
44
+
45
+ String queryPlan = "[\n " + " {\n " + " \" Plan\" : {\n " + " \" Node Type\" : \" Aggregate\" ,\n "
46
+ + " \" Strategy\" : \" Hashed\" ,\n " + " \" Partial Mode\" : \" Simple\" ,\n "
47
+ + " \" Parallel Aware\" : false,\n " + " \" Async Capable\" : false,\n "
48
+ + " \" Startup Cost\" : 62998.82,\n " + " \" Total Cost\" : 63009.32,\n "
49
+ + " \" Plan Rows\" : 1050,\n " + " \" Plan Width\" : 4,\n " + " \" Output\" : [\" t1.c0\" ],\n "
50
+ + " \" Group Key\" : [\" t1.c0\" ],\n " + " \" Planned Partitions\" : 0,\n " + " \" Plans\" : [\n "
51
+ + " {\n " + " \" Node Type\" : \" Append\" ,\n "
52
+ + " \" Parent Relationship\" : \" Outer\" ,\n " + " \" Parallel Aware\" : false,\n "
53
+ + " \" Async Capable\" : false,\n " + " \" Startup Cost\" : 27150.40,\n "
54
+ + " \" Total Cost\" : 62996.20,\n " + " \" Plan Rows\" : 1050,\n "
55
+ + " \" Plan Width\" : 4,\n " + " \" Subplans Removed\" : 0,\n " + " \" Plans\" : [\n "
56
+ + " {\n " + " \" Node Type\" : \" Group\" ,\n "
57
+ + " \" Parent Relationship\" : \" Member\" ,\n " + " \" Parallel Aware\" : false,\n "
58
+ + " \" Async Capable\" : false,\n " + " \" Startup Cost\" : 27150.40,\n "
59
+ + " \" Total Cost\" : 62949.08,\n " + " \" Plan Rows\" : 200,\n "
60
+ + " \" Plan Width\" : 4,\n " + " \" Output\" : [\" t1.c0\" ],\n "
61
+ + " \" Group Key\" : [\" t1.c0\" ],\n " + " \" Plans\" : [\n " + " {\n "
62
+ + " \" Node Type\" : \" Gather Merge\" ,\n "
63
+ + " \" Parent Relationship\" : \" Outer\" ,\n "
64
+ + " \" Parallel Aware\" : false,\n " + " \" Async Capable\" : false,\n "
65
+ + " \" Startup Cost\" : 27150.40,\n " + " \" Total Cost\" : 62948.08,\n "
66
+ + " \" Plan Rows\" : 400,\n " + " \" Plan Width\" : 4,\n "
67
+ + " \" Output\" : [\" t1.c0\" ],\n " + " \" Workers Planned\" : 2,\n "
68
+ + " \" Plans\" : [\n " + " {\n "
69
+ + " \" Node Type\" : \" Group\" ,\n "
70
+ + " \" Parent Relationship\" : \" Outer\" ,\n "
71
+ + " \" Parallel Aware\" : false,\n "
72
+ + " \" Async Capable\" : false,\n "
73
+ + " \" Startup Cost\" : 26150.38,\n "
74
+ + " \" Total Cost\" : 61901.89,\n " + " \" Plan Rows\" : 200,\n "
75
+ + " \" Plan Width\" : 4,\n " + " \" Output\" : [\" t1.c0\" ],\n "
76
+ + " \" Group Key\" : [\" t1.c0\" ],\n " + " \" Plans\" : [\n "
77
+ + " {\n " + " \" Node Type\" : \" Merge Join\" ,\n "
78
+ + " \" Parent Relationship\" : \" Outer\" ,\n "
79
+ + " \" Parallel Aware\" : false,\n "
80
+ + " \" Async Capable\" : false,\n "
81
+ + " \" Join Type\" : \" Inner\" ,\n "
82
+ + " \" Startup Cost\" : 26150.38,\n "
83
+ + " \" Total Cost\" : 56906.48,\n "
84
+ + " \" Plan Rows\" : 1998164,\n "
85
+ + " \" Plan Width\" : 4,\n "
86
+ + " \" Output\" : [\" t1.c0\" ],\n "
87
+ + " \" Inner Unique\" : false,\n "
88
+ + " \" Merge Cond\" : \" (t0.c0 = t1.c0)\" ,\n "
89
+ + " \" Plans\" : [\n " + " {\n "
90
+ + " \" Node Type\" : \" Sort\" ,\n "
91
+ + " \" Parent Relationship\" : \" Outer\" ,\n "
92
+ + " \" Parallel Aware\" : false,\n "
93
+ + " \" Async Capable\" : false,\n "
94
+ + " \" Startup Cost\" : 25970.60,\n "
95
+ + " \" Total Cost\" : 26362.39,\n "
96
+ + " \" Plan Rows\" : 156719,\n "
97
+ + " \" Plan Width\" : 4,\n "
98
+ + " \" Output\" : [\" t0.c0\" ],\n "
99
+ + " \" Sort Key\" : [\" t0.c0\" ],\n "
100
+ + " \" Plans\" : [\n " + " {\n "
101
+ + " \" Node Type\" : \" Seq Scan\" ,\n "
102
+ + " \" Parent Relationship\" : \" Outer\" ,\n "
103
+ + " \" Parallel Aware\" : true,\n "
104
+ + " \" Async Capable\" : false,\n "
105
+ + " \" Relation Name\" : \" t0\" ,\n "
106
+ + " \" Schema\" : \" public\" ,\n "
107
+ + " \" Alias\" : \" t0\" ,\n "
108
+ + " \" Startup Cost\" : 0.00,\n "
109
+ + " \" Total Cost\" : 10301.95,\n "
110
+ + " \" Plan Rows\" : 156719,\n "
111
+ + " \" Plan Width\" : 4,\n "
112
+ + " \" Output\" : [\" t0.c0\" ],\n "
113
+ + " \" Filter\" : \" (t0.c0 < 100)\" \n "
114
+ + " }\n " + " ]\n "
115
+ + " },\n " + " {\n "
116
+ + " \" Node Type\" : \" Sort\" ,\n "
117
+ + " \" Parent Relationship\" : \" Inner\" ,\n "
118
+ + " \" Parallel Aware\" : false,\n "
119
+ + " \" Async Capable\" : false,\n "
120
+ + " \" Startup Cost\" : 179.78,\n "
121
+ + " \" Total Cost\" : 186.16,\n "
122
+ + " \" Plan Rows\" : 2550,\n "
123
+ + " \" Plan Width\" : 4,\n "
124
+ + " \" Output\" : [\" t1.c0\" ],\n "
125
+ + " \" Sort Key\" : [\" t1.c0\" ],\n "
126
+ + " \" Plans\" : [\n " + " {\n "
127
+ + " \" Node Type\" : \" Seq Scan\" ,\n "
128
+ + " \" Parent Relationship\" : \" Outer\" ,\n "
129
+ + " \" Parallel Aware\" : false,\n "
130
+ + " \" Async Capable\" : false,\n "
131
+ + " \" Relation Name\" : \" t1\" ,\n "
132
+ + " \" Schema\" : \" public\" ,\n "
133
+ + " \" Alias\" : \" t1\" ,\n "
134
+ + " \" Startup Cost\" : 0.00,\n "
135
+ + " \" Total Cost\" : 35.50,\n "
136
+ + " \" Plan Rows\" : 2550,\n "
137
+ + " \" Plan Width\" : 4,\n "
138
+ + " \" Output\" : [\" t1.c0\" ]\n " + " }\n "
139
+ + " ]\n " + " }\n "
140
+ + " ]\n " + " }\n " + " ]\n "
141
+ + " }\n " + " ]\n " + " }\n " + " ]\n "
142
+ + " },\n " + " {\n " + " \" Node Type\" : \" Bitmap Heap Scan\" ,\n "
143
+ + " \" Parent Relationship\" : \" Member\" ,\n " + " \" Parallel Aware\" : false,\n "
144
+ + " \" Async Capable\" : false,\n " + " \" Relation Name\" : \" t2\" ,\n "
145
+ + " \" Schema\" : \" public\" ,\n " + " \" Alias\" : \" t2\" ,\n "
146
+ + " \" Startup Cost\" : 10.74,\n " + " \" Total Cost\" : 31.37,\n "
147
+ + " \" Plan Rows\" : 850,\n " + " \" Plan Width\" : 4,\n "
148
+ + " \" Output\" : [\" t2.c0\" ],\n " + " \" Recheck Cond\" : \" (t2.c0 < 10)\" ,\n "
149
+ + " \" Plans\" : [\n " + " {\n "
150
+ + " \" Node Type\" : \" Bitmap Index Scan\" ,\n "
151
+ + " \" Parent Relationship\" : \" Outer\" ,\n "
152
+ + " \" Parallel Aware\" : false,\n " + " \" Async Capable\" : false,\n "
153
+ + " \" Index Name\" : \" t2_pkey\" ,\n " + " \" Startup Cost\" : 0.00,\n "
154
+ + " \" Total Cost\" : 10.53,\n " + " \" Plan Rows\" : 850,\n "
155
+ + " \" Plan Width\" : 0,\n " + " \" Index Cond\" : \" (t2.c0 < 10)\" \n "
156
+ + " }\n " + " ]\n " + " }\n " + " ]\n " + " }\n "
157
+ + " ]\n " + " },\n " + " \" Planning Time\" : 1.954\n " + " }\n " + "]\n " ;
158
+
159
+ String formatedQueryPlan = provider .formatQueryPlan (queryPlan );
160
+ assertEquals (
161
+ "Aggregate Append Group Bitmap Heap Scan Gather Merge Bitmap Index Scan Group Merge Join Sort Sort Seq Scan Seq Scan" ,
162
+ formatedQueryPlan );
38
163
}
39
164
40
165
}
0 commit comments