@@ -14,15 +14,33 @@ type Printer interface {
14
14
print (statementResult StatementResult , outF io.Writer ) error
15
15
}
16
16
17
+ type ExplainQueryPrinter struct {}
18
+
19
+ func (eqp ExplainQueryPrinter ) print (statementResult StatementResult , outF io.Writer ) error {
20
+ data := [][]string {}
21
+
22
+ tableData , err := appendData (statementResult , data , TABLE )
23
+ if err != nil {
24
+ return err
25
+ }
26
+
27
+ root , err := BuildQueryPlanTree (tableData )
28
+ if err != nil {
29
+ return err
30
+ }
31
+ PrintQueryPlanTree (root , "" )
32
+
33
+ return nil
34
+ }
35
+
17
36
type TablePrinter struct {
18
37
withoutHeader bool
19
38
}
20
39
21
40
func (t TablePrinter ) print (statementResult StatementResult , outF io.Writer ) error {
22
41
data := [][]string {}
23
42
table := createTable (outF )
24
- showHeader := ! IsResultComingFromExplainQueryPlan (statementResult ) && ! t .withoutHeader
25
- if showHeader {
43
+ if ! t .withoutHeader {
26
44
table .SetHeader (statementResult .ColumnNames )
27
45
}
28
46
@@ -33,6 +51,7 @@ func (t TablePrinter) print(statementResult StatementResult, outF io.Writer) err
33
51
34
52
table .AppendBulk (tableData )
35
53
table .Render ()
54
+
36
55
return nil
37
56
}
38
57
@@ -102,14 +121,13 @@ func appendData(statementResult StatementResult, data [][]string, mode FormatTyp
102
121
data = append (data , formattedRow )
103
122
}
104
123
105
- if IsResultComingFromExplainQueryPlan (statementResult ) {
106
- data = [][]string {{"Tree goes here!" }}
107
- }
108
-
109
124
return data , nil
110
125
}
111
126
112
- func getPrinter (mode enums.PrintMode , withoutHeader bool ) (Printer , error ) {
127
+ func getPrinter (mode enums.PrintMode , withoutHeader bool , isExplainQueryPlan bool ) (Printer , error ) {
128
+ if isExplainQueryPlan {
129
+ return & ExplainQueryPrinter {}, nil
130
+ }
113
131
switch mode {
114
132
case enums .TABLE_MODE :
115
133
return & TablePrinter {
@@ -149,7 +167,8 @@ func PrintStatementResult(statementResult StatementResult, outF io.Writer, witho
149
167
return & UnableToPrintStatementResult {}
150
168
}
151
169
152
- printer , err := getPrinter (mode , withoutHeader )
170
+ isExplainQueryPlan := IsResultComingFromExplainQueryPlan (statementResult )
171
+ printer , err := getPrinter (mode , withoutHeader , isExplainQueryPlan )
153
172
if err != nil {
154
173
return err
155
174
}
0 commit comments