@@ -3,6 +3,7 @@ package mysqldump
3
3
import (
4
4
"database/sql"
5
5
"errors"
6
+ "io"
6
7
"os"
7
8
"path"
8
9
"strings"
@@ -67,7 +68,7 @@ UNLOCK TABLES;
67
68
-- Dump completed on {{ .CompleteTime }}
68
69
`
69
70
70
- // Creates a MYSQL Dump based on the options supplied through the dumper.
71
+ // Dump creates a MySQL dump based on the options supplied through the dumper.
71
72
func (d * Dumper ) Dump () (string , error ) {
72
73
name := time .Now ().Format (d .format )
73
74
p := path .Join (d .dir , name + ".sql" )
@@ -86,28 +87,34 @@ func (d *Dumper) Dump() (string, error) {
86
87
87
88
defer f .Close ()
88
89
90
+ return p , Dump (d .db , f )
91
+ }
92
+
93
+ // Dump Creates a MYSQL dump from the connection to the stream.
94
+ func Dump (db * sql.DB , out io.Writer ) error {
95
+ var err error
89
96
data := dump {
90
97
DumpVersion : version ,
91
98
Tables : make ([]* table , 0 ),
92
99
}
93
100
94
101
// Get server version
95
- if data .ServerVersion , err = getServerVersion (d . db ); err != nil {
96
- return p , err
102
+ if data .ServerVersion , err = getServerVersion (db ); err != nil {
103
+ return err
97
104
}
98
105
99
106
// Get tables
100
- tables , err := getTables (d . db )
107
+ tables , err := getTables (db )
101
108
if err != nil {
102
- return p , err
109
+ return err
103
110
}
104
111
105
112
// Get sql for each table
106
113
for _ , name := range tables {
107
- if t , err := createTable (d . db , name ); err == nil {
114
+ if t , err := createTable (db , name ); err == nil {
108
115
data .Tables = append (data .Tables , t )
109
116
} else {
110
- return p , err
117
+ return err
111
118
}
112
119
}
113
120
@@ -117,13 +124,13 @@ func (d *Dumper) Dump() (string, error) {
117
124
// Write dump to file
118
125
t , err := template .New ("mysqldump" ).Parse (tmpl )
119
126
if err != nil {
120
- return p , err
127
+ return err
121
128
}
122
- if err = t .Execute (f , data ); err != nil {
123
- return p , err
129
+ if err = t .Execute (out , data ); err != nil {
130
+ return err
124
131
}
125
132
126
- return p , nil
133
+ return nil
127
134
}
128
135
129
136
func getTables (db * sql.DB ) ([]string , error ) {
@@ -148,11 +155,11 @@ func getTables(db *sql.DB) ([]string, error) {
148
155
}
149
156
150
157
func getServerVersion (db * sql.DB ) (string , error ) {
151
- var server_version sql.NullString
152
- if err := db .QueryRow ("SELECT version()" ).Scan (& server_version ); err != nil {
158
+ var serverVersion sql.NullString
159
+ if err := db .QueryRow ("SELECT version()" ).Scan (& serverVersion ); err != nil {
153
160
return "" , err
154
161
}
155
- return server_version .String , nil
162
+ return serverVersion .String , nil
156
163
}
157
164
158
165
func createTable (db * sql.DB , name string ) (* table , error ) {
0 commit comments