/
exec_table.go
43 lines (37 loc) · 1.16 KB
/
exec_table.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
package diff
import (
"context"
"github.com/neilotoole/sq/libsq/core/diffdoc"
"github.com/neilotoole/sq/libsq/source"
)
// ExecTableDiff is the entrypoint to diff two tables, src1.table1 and
// src2.table2.
//
// If differences are found, hasDiffs returns true.
//
// Contrast with [ExecSourceDiff], which diffs two sources.
func ExecTableDiff(ctx context.Context, cfg *Config, src1 *source.Source, table1 string,
src2 *source.Source, table2 string,
) (hasDiffs bool, err error) {
var (
ru = cfg.Run
elems = cfg.Modes
td1 = source.Table{Handle: src1.Handle, Name: table1}
td2 = source.Table{Handle: src2.Handle, Name: table2}
differs []*diffdoc.Differ
)
if elems.Schema {
doc := diffdoc.NewUnifiedDoc(
diffdoc.Titlef(cfg.Colors, "sq diff --schema %s %s", td1.String(), td2.String()),
getBufFactory(cfg),
)
differs = append(differs, diffdoc.NewDiffer(doc, func(ctx context.Context, _ func(error)) {
diffTableSchema(ctx, cfg, elems.RowCount, td1, td2, doc)
}))
}
if elems.Data {
differ := differForTableData(cfg, false, td1, td2)
differs = append(differs, differ)
}
return diffdoc.Execute(ctx, ru.Out, cfg.Concurrency, differs)
}