forked from vmware-archive/pg2mysql
/
verifier.go
44 lines (35 loc) · 839 Bytes
/
verifier.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package pg2mysql
import "fmt"
type Verifier interface {
Verify() error
}
type verifier struct {
src, dst DB
watcher VerifierWatcher
}
func NewVerifier(src, dst DB, watcher VerifierWatcher) Verifier {
return &verifier{
src: src,
dst: dst,
watcher: watcher,
}
}
func (v *verifier) Verify() error {
srcSchema, err := BuildSchema(v.src)
if err != nil {
return fmt.Errorf("failed to build source schema: %s", err)
}
for _, table := range srcSchema.Tables {
v.watcher.TableVerificationDidStart(table.Name)
var missingRows int64
err = EachMissingRow(v.src, v.dst, table, func(scanArgs []interface{}) {
missingRows++
})
if err != nil {
v.watcher.TableVerificationDidFinishWithError(table.Name, err)
continue
}
v.watcher.TableVerificationDidFinish(table.Name, missingRows)
}
return nil
}