@@ -20,13 +20,17 @@ type table struct {
20
20
type dump struct {
21
21
DumpVersion string
22
22
ServerVersion string
23
- Tables []* table
24
23
CompleteTime string
24
+ HeaderTmpl * template.Template
25
+ TableTmpl * template.Template
26
+ FooterTmpl * template.Template
27
+ Connection * sql.DB
28
+ Out io.Writer
25
29
}
26
30
27
- const version = "0.2.2 "
31
+ const version = "0.3.1 "
28
32
29
- const tmpl = `-- Go SQL Dump {{ .DumpVersion }}
33
+ const headerTmpl = `-- Go SQL Dump {{ .DumpVersion }}
30
34
--
31
35
-- ------------------------------------------------------
32
36
-- Server version {{ .ServerVersion }}
@@ -41,9 +45,9 @@ const tmpl = `-- Go SQL Dump {{ .DumpVersion }}
41
45
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
42
46
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
43
47
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
48
+ `
44
49
45
-
46
- {{range .Tables}}
50
+ const tableTmpl = `
47
51
--
48
52
-- Table structure for table {{ .Name }}
49
53
--
@@ -64,10 +68,72 @@ INSERT INTO {{ .Name }} VALUES {{ .Values }};
64
68
{{ end }}
65
69
/*!40000 ALTER TABLE {{ .Name }} ENABLE KEYS */;
66
70
UNLOCK TABLES;
67
- {{ end }}
71
+ `
72
+
73
+ const footerTmpl = `
68
74
-- Dump completed on {{ .CompleteTime }}
69
75
`
70
76
77
+ func (data * dump ) getTemplates () (err error ) {
78
+ // Write dump to file
79
+ data .HeaderTmpl , err = template .New ("mysqldumpHeader" ).Parse (headerTmpl )
80
+ if err != nil {
81
+ return
82
+ }
83
+
84
+ data .TableTmpl , err = template .New ("mysqldumpTable" ).Parse (tableTmpl )
85
+ if err != nil {
86
+ return
87
+ }
88
+
89
+ data .FooterTmpl , err = template .New ("mysqldumpTable" ).Parse (footerTmpl )
90
+ if err != nil {
91
+ return
92
+ }
93
+ return
94
+ }
95
+
96
+ func (data * dump ) dump () error {
97
+ if err := data .HeaderTmpl .Execute (data .Out , data ); err != nil {
98
+ return err
99
+ }
100
+
101
+ // Get tables
102
+ tables , err := getTables (data .Connection )
103
+ if err != nil {
104
+ return err
105
+ }
106
+
107
+ // Get sql for each table
108
+ for _ , name := range tables {
109
+ if err := data .dumpTable (name ); err != nil {
110
+ return err
111
+ }
112
+ }
113
+
114
+ // Set complete time
115
+ data .CompleteTime = time .Now ().String ()
116
+
117
+ if err = data .FooterTmpl .Execute (data .Out , data ); err != nil {
118
+ return err
119
+ }
120
+
121
+ return nil
122
+ }
123
+
124
+ func (data * dump ) dumpTable (name string ) error {
125
+ table , err := createTable (data .Connection , name )
126
+ if err != nil {
127
+ return err
128
+ }
129
+
130
+ if err = data .TableTmpl .Execute (data .Out , table ); err != nil {
131
+ return err
132
+ }
133
+
134
+ return nil
135
+ }
136
+
71
137
// Dump creates a MySQL dump based on the options supplied through the dumper.
72
138
func (d * Dumper ) Dump () (string , error ) {
73
139
name := time .Now ().Format (d .format )
@@ -95,42 +161,20 @@ func Dump(db *sql.DB, out io.Writer) error {
95
161
var err error
96
162
data := dump {
97
163
DumpVersion : version ,
98
- Tables : make ([]* table , 0 ),
164
+ Connection : db ,
165
+ Out : out ,
99
166
}
100
167
101
168
// Get server version
102
169
if data .ServerVersion , err = getServerVersion (db ); err != nil {
103
170
return err
104
171
}
105
172
106
- // Get tables
107
- tables , err := getTables (db )
108
- if err != nil {
109
- return err
110
- }
111
-
112
- // Get sql for each table
113
- for _ , name := range tables {
114
- if t , err := createTable (db , name ); err == nil {
115
- data .Tables = append (data .Tables , t )
116
- } else {
117
- return err
118
- }
119
- }
120
-
121
- // Set complete time
122
- data .CompleteTime = time .Now ().String ()
123
-
124
- // Write dump to file
125
- t , err := template .New ("mysqldump" ).Parse (tmpl )
126
- if err != nil {
127
- return err
128
- }
129
- if err = t .Execute (out , data ); err != nil {
173
+ if err := data .getTemplates (); err != nil {
130
174
return err
131
175
}
132
176
133
- return nil
177
+ return data . dump ()
134
178
}
135
179
136
180
func getTables (db * sql.DB ) ([]string , error ) {
0 commit comments