Skip to content

Commit c9037df

Browse files
committed
Failing tests on mock
1 parent f253cf7 commit c9037df

File tree

5 files changed

+286
-222
lines changed

5 files changed

+286
-222
lines changed

.vscode/settings.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{
2+
}

dump.go

Lines changed: 70 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import (
55
"errors"
66
"fmt"
77
"io"
8-
"os"
9-
"path"
108
"reflect"
119
"strings"
1210
"sync"
@@ -20,12 +18,11 @@ type table struct {
2018
Values string
2119
}
2220

23-
type dump struct {
24-
DumpVersion string
25-
ServerVersion string
26-
CompleteTime string
27-
Out io.Writer
28-
Connection *sql.DB
21+
// Data struct to configure dump behavior
22+
type Data struct {
23+
Out io.Writer
24+
Connection *sql.DB
25+
IgnoreTables []string
2926

3027
headerTmpl *template.Template
3128
tableTmpl *template.Template
@@ -34,6 +31,12 @@ type dump struct {
3431
wg sync.WaitGroup
3532
}
3633

34+
type metaData struct {
35+
DumpVersion string
36+
ServerVersion string
37+
CompleteTime string
38+
}
39+
3740
const version = "0.3.2"
3841

3942
const headerTmpl = `-- Go SQL Dump {{ .DumpVersion }}
@@ -90,32 +93,27 @@ const footerTmpl = `/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
9093
-- Dump completed on {{ .CompleteTime }}
9194
`
9295

93-
func (data *dump) getTemplates() (err error) {
94-
// Write dump to file
95-
data.headerTmpl, err = template.New("mysqldumpHeader").Parse(headerTmpl)
96-
if err != nil {
97-
return
96+
// Dump data using struct
97+
func (data *Data) Dump() error {
98+
meta := metaData{
99+
DumpVersion: version,
98100
}
99101

100-
data.tableTmpl, err = template.New("mysqldumpTable").Parse(tableTmpl)
101-
if err != nil {
102-
return
102+
// Get server version
103+
if err := meta.updateServerVersion(data.Connection); err != nil {
104+
return err
103105
}
104106

105-
data.footerTmpl, err = template.New("mysqldumpTable").Parse(footerTmpl)
106-
if err != nil {
107-
return
107+
if err := data.getTemplates(); err != nil {
108+
return err
108109
}
109-
return
110-
}
111110

112-
func (data *dump) dump() error {
113-
if err := data.headerTmpl.Execute(data.Out, data); err != nil {
111+
if err := data.headerTmpl.Execute(data.Out, meta); err != nil {
114112
return err
115113
}
116114

117115
// Get tables
118-
tables, err := getTables(data.Connection)
116+
tables, err := data.getTables()
119117
if err != nil {
120118
return err
121119
}
@@ -130,12 +128,16 @@ func (data *dump) dump() error {
130128
data.wg.Wait()
131129

132130
// Set complete time
133-
data.CompleteTime = time.Now().String()
134-
return data.footerTmpl.Execute(data.Out, data)
131+
meta.CompleteTime = time.Now().String()
132+
return data.footerTmpl.Execute(data.Out, meta)
135133
}
136134

137-
func (data *dump) dumpTable(name string) error {
138-
table, err := createTable(data.Connection, name)
135+
// MARK: - Private methods
136+
137+
// MARK: writter methods
138+
139+
func (data *Data) dumpTable(name string) error {
140+
table, err := data.createTable(name)
139141
if err != nil {
140142
return err
141143
}
@@ -144,62 +146,40 @@ func (data *dump) dumpTable(name string) error {
144146
return nil
145147
}
146148

147-
func (data *dump) writeTable(table *table) error {
149+
func (data *Data) writeTable(table *table) error {
148150
data.mux.Lock()
149151
err := data.tableTmpl.Execute(data.Out, table)
150152
data.mux.Unlock()
151153
data.wg.Done()
152154
return err
153155
}
154156

155-
// Dump creates a MySQL dump based on the options supplied through the dumper.
156-
func (d *Dumper) Dump() (string, error) {
157-
name := time.Now().Format(d.format)
158-
p := path.Join(d.dir, name+".sql")
159-
160-
// Check dump directory
161-
if e, _ := exists(p); e {
162-
return p, errors.New("Dump '" + name + "' already exists.")
163-
}
164-
165-
// Create .sql file
166-
f, err := os.Create(p)
157+
// MARK: get methods
167158

159+
func (data *Data) getTemplates() (err error) {
160+
// Write dump to file
161+
data.headerTmpl, err = template.New("mysqldumpHeader").Parse(headerTmpl)
168162
if err != nil {
169-
return p, err
170-
}
171-
172-
defer f.Close()
173-
174-
return p, Dump(d.db, f)
175-
}
176-
177-
// Dump Creates a MYSQL dump from the connection to the stream.
178-
func Dump(db *sql.DB, out io.Writer) error {
179-
var err error
180-
data := dump{
181-
DumpVersion: version,
182-
Connection: db,
183-
Out: out,
163+
return
184164
}
185165

186-
// Get server version
187-
if data.ServerVersion, err = getServerVersion(db); err != nil {
188-
return err
166+
data.tableTmpl, err = template.New("mysqldumpTable").Parse(tableTmpl)
167+
if err != nil {
168+
return
189169
}
190170

191-
if err := data.getTemplates(); err != nil {
192-
return err
171+
data.footerTmpl, err = template.New("mysqldumpTable").Parse(footerTmpl)
172+
if err != nil {
173+
return
193174
}
194-
195-
return data.dump()
175+
return
196176
}
197177

198-
func getTables(db *sql.DB) ([]string, error) {
178+
func (data *Data) getTables() ([]string, error) {
199179
tables := make([]string, 0)
200180

201181
// Get table list
202-
rows, err := db.Query("SHOW TABLES")
182+
rows, err := data.Connection.Query("SHOW TABLES")
203183
if err != nil {
204184
return tables, err
205185
}
@@ -211,38 +191,50 @@ func getTables(db *sql.DB) ([]string, error) {
211191
if err := rows.Scan(&table); err != nil {
212192
return tables, err
213193
}
214-
tables = append(tables, table.String)
194+
if table.Valid && !data.isIgnoredTable(table.String) {
195+
tables = append(tables, table.String)
196+
}
215197
}
216198
return tables, rows.Err()
217199
}
218200

219-
func getServerVersion(db *sql.DB) (string, error) {
220-
var serverVersion sql.NullString
221-
if err := db.QueryRow("SELECT version()").Scan(&serverVersion); err != nil {
222-
return "", err
201+
func (data *Data) isIgnoredTable(name string) bool {
202+
for _, item := range data.IgnoreTables {
203+
if item == name {
204+
return true
205+
}
223206
}
224-
return serverVersion.String, nil
207+
return false
225208
}
226209

227-
func createTable(db *sql.DB, name string) (*table, error) {
210+
func (data *metaData) updateServerVersion(db *sql.DB) (err error) {
211+
var serverVersion sql.NullString
212+
err = db.QueryRow("SELECT version()").Scan(&serverVersion)
213+
data.ServerVersion = serverVersion.String
214+
return
215+
}
216+
217+
// MARK: create methods
218+
219+
func (data *Data) createTable(name string) (*table, error) {
228220
var err error
229221
t := &table{Name: "`" + name + "`"}
230222

231-
if t.SQL, err = createTableSQL(db, name); err != nil {
223+
if t.SQL, err = data.createTableSQL(name); err != nil {
232224
return nil, err
233225
}
234226

235-
if t.Values, err = createTableValues(db, name); err != nil {
227+
if t.Values, err = data.createTableValues(name); err != nil {
236228
return nil, err
237229
}
238230

239231
return t, nil
240232
}
241233

242-
func createTableSQL(db *sql.DB, name string) (string, error) {
234+
func (data *Data) createTableSQL(name string) (string, error) {
243235
// Get table creation SQL
244236
var tableReturn, tableSQL sql.NullString
245-
err := db.QueryRow("SHOW CREATE TABLE "+name).Scan(&tableReturn, &tableSQL)
237+
err := data.Connection.QueryRow("SHOW CREATE TABLE "+name).Scan(&tableReturn, &tableSQL)
246238

247239
if err != nil {
248240
return "", err
@@ -254,9 +246,9 @@ func createTableSQL(db *sql.DB, name string) (string, error) {
254246
return tableSQL.String, nil
255247
}
256248

257-
func createTableValues(db *sql.DB, name string) (string, error) {
249+
func (data *Data) createTableValues(name string) (string, error) {
258250
// Get Data
259-
rows, err := db.Query("SELECT * FROM " + name)
251+
rows, err := data.Connection.Query("SELECT * FROM " + name)
260252
if err != nil {
261253
return "", err
262254
}

0 commit comments

Comments
 (0)