@@ -14,15 +14,34 @@ 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+ println ("QUERY PLAN" )
32+ PrintQueryPlanTree (root , "" )
33+
34+ return nil
35+ }
36+
1737type TablePrinter struct {
1838 withoutHeader bool
1939}
2040
2141func (t TablePrinter ) print (statementResult StatementResult , outF io.Writer ) error {
2242 data := [][]string {}
2343 table := createTable (outF )
24- showHeader := ! IsResultComingFromExplainQueryPlan (statementResult ) && ! t .withoutHeader
25- if showHeader {
44+ if ! t .withoutHeader {
2645 table .SetHeader (statementResult .ColumnNames )
2746 }
2847
@@ -33,6 +52,7 @@ func (t TablePrinter) print(statementResult StatementResult, outF io.Writer) err
3352
3453 table .AppendBulk (tableData )
3554 table .Render ()
55+
3656 return nil
3757}
3858
@@ -102,14 +122,13 @@ func appendData(statementResult StatementResult, data [][]string, mode FormatTyp
102122 data = append (data , formattedRow )
103123 }
104124
105- if IsResultComingFromExplainQueryPlan (statementResult ) {
106- data = [][]string {{"Tree goes here!" }}
107- }
108-
109125 return data , nil
110126}
111127
112- func getPrinter (mode enums.PrintMode , withoutHeader bool ) (Printer , error ) {
128+ func getPrinter (mode enums.PrintMode , withoutHeader bool , isExplainQueryPlan bool ) (Printer , error ) {
129+ if isExplainQueryPlan {
130+ return & ExplainQueryPrinter {}, nil
131+ }
113132 switch mode {
114133 case enums .TABLE_MODE :
115134 return & TablePrinter {
@@ -149,7 +168,8 @@ func PrintStatementResult(statementResult StatementResult, outF io.Writer, witho
149168 return & UnableToPrintStatementResult {}
150169 }
151170
152- printer , err := getPrinter (mode , withoutHeader )
171+ isExplainQueryPlan := IsResultComingFromExplainQueryPlan (statementResult )
172+ printer , err := getPrinter (mode , withoutHeader , isExplainQueryPlan )
153173 if err != nil {
154174 return err
155175 }
0 commit comments