@@ -14,15 +14,33 @@ type Printer interface {
1414 print (statementResult StatementResult , outF io.Writer ) error
1515}
1616
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+
1736type TablePrinter struct {
1837 withoutHeader bool
1938}
2039
2140func (t TablePrinter ) print (statementResult StatementResult , outF io.Writer ) error {
2241 data := [][]string {}
2342 table := createTable (outF )
24- showHeader := ! IsResultComingFromExplainQueryPlan (statementResult ) && ! t .withoutHeader
25- if showHeader {
43+ if ! t .withoutHeader {
2644 table .SetHeader (statementResult .ColumnNames )
2745 }
2846
@@ -33,6 +51,7 @@ func (t TablePrinter) print(statementResult StatementResult, outF io.Writer) err
3351
3452 table .AppendBulk (tableData )
3553 table .Render ()
54+
3655 return nil
3756}
3857
@@ -102,14 +121,13 @@ func appendData(statementResult StatementResult, data [][]string, mode FormatTyp
102121 data = append (data , formattedRow )
103122 }
104123
105- if IsResultComingFromExplainQueryPlan (statementResult ) {
106- data = [][]string {{"Tree goes here!" }}
107- }
108-
109124 return data , nil
110125}
111126
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+ }
113131 switch mode {
114132 case enums .TABLE_MODE :
115133 return & TablePrinter {
@@ -149,7 +167,8 @@ func PrintStatementResult(statementResult StatementResult, outF io.Writer, witho
149167 return & UnableToPrintStatementResult {}
150168 }
151169
152- printer , err := getPrinter (mode , withoutHeader )
170+ isExplainQueryPlan := IsResultComingFromExplainQueryPlan (statementResult )
171+ printer , err := getPrinter (mode , withoutHeader , isExplainQueryPlan )
153172 if err != nil {
154173 return err
155174 }
0 commit comments