Skip to content

Commit 22380cb

Browse files
committed
:ok_hanh: chore: customize base service #1
1 parent 7910a02 commit 22380cb

3 files changed

Lines changed: 36 additions & 2 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ go 1.20
44

55
require (
66
github.com/jmoiron/sqlx v1.3.5
7+
github.com/lib/pq v1.10.9
78
github.com/sivaosorg/govm v1.0.3
89
)
910

1011
require (
1112
github.com/BurntSushi/toml v1.3.2 // indirect
1213
github.com/fatih/color v1.15.0 // indirect
1314
github.com/json-iterator/go v1.1.12 // indirect
14-
github.com/lib/pq v1.10.9 // indirect
1515
github.com/mattn/go-colorable v0.1.13 // indirect
1616
github.com/mattn/go-isatty v0.0.17 // indirect
1717
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect

go.sum

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
1212
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
1313
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
1414
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
15-
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
1615
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
1716
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
1817
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=

postgresconn/postgresconn_service.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package postgresconn
22

33
import (
4+
"fmt"
5+
"io/ioutil"
6+
"path/filepath"
47
"strings"
58

69
"github.com/jmoiron/sqlx"
@@ -19,6 +22,8 @@ type PostgresService interface {
1922
BuildFunction(function string) (string, error)
2023
ShowFunctionContent(function string) (string, error)
2124
ShowProcedureContent(procedure string) (string, error)
25+
ExplainAnalysis(query string) (string, error)
26+
ExplainAnalysisFromFile(filename string) (string, error)
2227
}
2328

2429
type postgresServiceImpl struct {
@@ -151,3 +156,33 @@ func (p *postgresServiceImpl) ShowProcedureContent(procedure string) (string, er
151156
}
152157
return procedureContent, nil
153158
}
159+
160+
func (p *postgresServiceImpl) ExplainAnalysis(query string) (string, error) {
161+
rows, err := p.dbConn.Query(fmt.Sprintf("EXPLAIN ANALYZE %v", query))
162+
if err != nil {
163+
return "", err
164+
}
165+
defer rows.Close()
166+
var explain strings.Builder
167+
for rows.Next() {
168+
var line string
169+
if err = rows.Scan(&line); err != nil {
170+
return "", err
171+
}
172+
explain.WriteString(line)
173+
explain.WriteString("\n")
174+
}
175+
if err = rows.Err(); err != nil {
176+
return "", err
177+
}
178+
return explain.String(), nil
179+
}
180+
181+
func (p *postgresServiceImpl) ExplainAnalysisFromFile(filename string) (string, error) {
182+
bytes, err := ioutil.ReadFile(filepath.Clean(filename))
183+
if err != nil {
184+
return "", err
185+
}
186+
query := string(bytes)
187+
return p.ExplainAnalysis(query)
188+
}

0 commit comments

Comments
 (0)