Skip to content

Commit cc0fb0a

Browse files
committed
Add DumpAllTables method
1 parent 74c04db commit cc0fb0a

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed

dump.go

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package mysqldump
33
import (
44
"database/sql"
55
"errors"
6+
"fmt"
67
"io"
78
"strings"
89
"text/template"
@@ -70,10 +71,15 @@ UNLOCK TABLES;
7071
-- Dump completed on {{ .CompleteTime }}
7172
`
7273

73-
// Creates a MYSQL Dump based on the options supplied through the dumper.
74-
func (d *Dumper) Dump(w io.Writer, db string, tableName string) error {
74+
// Dump dumps one or more tables from a database into a writer
75+
func (d *Dumper) Dump(w io.Writer, db string, tables ...string) error {
7576
var err error
7677

78+
// Use the database
79+
if _, err = d.db.Exec("USE " + db); err != nil {
80+
return fmt.Errorf("use database: %w", err)
81+
}
82+
7783
data := dumpData{
7884
DumpVersion: version,
7985
Tables: make([]*tableData, 0),
@@ -85,10 +91,12 @@ func (d *Dumper) Dump(w io.Writer, db string, tableName string) error {
8591
}
8692

8793
// Get sql for each table
88-
if t, err := createTable(d.db, tableName); err == nil {
89-
data.Tables = append(data.Tables, t)
90-
} else {
91-
return err
94+
for _, t := range tables {
95+
if t, err := createTable(d.db, t); err == nil {
96+
data.Tables = append(data.Tables, t)
97+
} else {
98+
return err
99+
}
92100
}
93101

94102
// Set complete time
@@ -102,7 +110,23 @@ func (d *Dumper) Dump(w io.Writer, db string, tableName string) error {
102110
return t.Execute(w, data)
103111
}
104112

105-
func (d *Dumper) GetTables() ([]string, error) {
113+
// DumpAllTables dumps all tables in a database into a writer
114+
func (d *Dumper) DumpAllTables(w io.Writer, db string) error {
115+
// Use the database
116+
if _, err := d.db.Exec("USE " + db); err != nil {
117+
return fmt.Errorf("use database: %w", err)
118+
}
119+
120+
// List tables in the database
121+
tables, err := d.getTables()
122+
if err != nil {
123+
return fmt.Errorf("list tables: %w", err)
124+
}
125+
126+
return d.Dump(w, db, tables...)
127+
}
128+
129+
func (d *Dumper) getTables() ([]string, error) {
106130
tables := make([]string, 0)
107131

108132
// Get table list

0 commit comments

Comments
 (0)