Skip to content

Commit 6753eee

Browse files
authored
Enable to set multiple files and change desired file option (sqldef#325)
1 parent 95f8e04 commit 6753eee

File tree

8 files changed

+96
-76
lines changed

8 files changed

+96
-76
lines changed

cmd/mssqldef/mssqldef.go

+19-17
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ package main
22

33
import (
44
"fmt"
5-
"github.com/k0kubun/sqldef/database/file"
6-
"github.com/k0kubun/sqldef/parser"
75
"log"
86
"os"
7+
"strings"
98
"syscall"
109

1110
"github.com/jessevdk/go-flags"
1211
"github.com/k0kubun/sqldef"
1312
"github.com/k0kubun/sqldef/database"
13+
"github.com/k0kubun/sqldef/database/file"
1414
"github.com/k0kubun/sqldef/database/mssql"
15+
"github.com/k0kubun/sqldef/parser"
1516
"github.com/k0kubun/sqldef/schema"
1617
"golang.org/x/term"
1718
)
@@ -52,35 +53,36 @@ func parseOptions(args []string) (database.Config, *sqldef.Options) {
5253
os.Exit(0)
5354
}
5455

55-
desiredFile, currentFile := sqldef.ParseFiles(opts.File)
56+
desiredFiles := sqldef.ParseFiles(opts.File)
5657

5758
var desiredDDLs string
5859
if !opts.Export {
59-
desiredDDLs, err = sqldef.ReadFile(desiredFile)
60+
desiredDDLs, err = sqldef.ReadFiles(desiredFiles)
6061
if err != nil {
61-
log.Fatalf("Failed to read '%s': %s", desiredFile, err)
62+
log.Fatalf("Failed to read '%v': %s", desiredFiles, err)
6263
}
6364
}
6465

6566
options := sqldef.Options{
6667
DesiredDDLs: desiredDDLs,
67-
CurrentFile: currentFile,
6868
DryRun: opts.DryRun,
6969
Export: opts.Export,
7070
SkipDrop: opts.SkipDrop,
7171
}
7272

73-
databaseName := ""
74-
if len(currentFile) == 0 {
75-
if len(args) == 0 {
76-
fmt.Print("No database is specified!\n\n")
77-
parser.WriteHelp(os.Stdout)
78-
os.Exit(1)
79-
} else if len(args) > 1 {
80-
fmt.Printf("Multiple databases are given: %v\n\n", args)
81-
parser.WriteHelp(os.Stdout)
82-
os.Exit(1)
83-
}
73+
if len(args) == 0 {
74+
fmt.Print("No database is specified!\n\n")
75+
parser.WriteHelp(os.Stdout)
76+
os.Exit(1)
77+
} else if len(args) > 1 {
78+
fmt.Printf("Multiple databases are given: %v\n\n", args)
79+
parser.WriteHelp(os.Stdout)
80+
os.Exit(1)
81+
}
82+
var databaseName string
83+
if strings.HasSuffix(args[0], ".sql") {
84+
options.CurrentFile = args[0]
85+
} else {
8486
databaseName = args[0]
8587
}
8688

cmd/mysqldef/mysqldef.go

+16-15
Original file line numberDiff line numberDiff line change
@@ -61,37 +61,38 @@ func parseOptions(args []string) (database.Config, *sqldef.Options) {
6161
os.Exit(0)
6262
}
6363

64-
desiredFile, currentFile := sqldef.ParseFiles(opts.File)
64+
desiredFiles := sqldef.ParseFiles(opts.File)
6565

6666
var desiredDDLs string
6767
if !opts.Export {
68-
desiredDDLs, err = sqldef.ReadFile(desiredFile)
68+
desiredDDLs, err = sqldef.ReadFiles(desiredFiles)
6969
if err != nil {
70-
log.Fatalf("Failed to read '%s': %s", desiredFile, err)
70+
log.Fatalf("Failed to read '%v': %s", desiredFiles, err)
7171
}
7272
}
7373

7474
options := sqldef.Options{
7575
DesiredDDLs: desiredDDLs,
76-
CurrentFile: currentFile,
7776
DryRun: opts.DryRun,
7877
Export: opts.Export,
7978
SkipDrop: opts.SkipDrop,
8079
BeforeApply: opts.BeforeApply,
8180
Config: database.ParseGeneratorConfig(opts.Config),
8281
}
8382

84-
databaseName := ""
85-
if len(currentFile) == 0 {
86-
if len(args) == 0 {
87-
fmt.Print("No database is specified!\n\n")
88-
parser.WriteHelp(os.Stdout)
89-
os.Exit(1)
90-
} else if len(args) > 1 {
91-
fmt.Printf("Multiple databases are given: %v\n\n", args)
92-
parser.WriteHelp(os.Stdout)
93-
os.Exit(1)
94-
}
83+
if len(args) == 0 {
84+
fmt.Print("No database is specified!\n\n")
85+
parser.WriteHelp(os.Stdout)
86+
os.Exit(1)
87+
} else if len(args) > 1 {
88+
fmt.Printf("Multiple databases are given: %v\n\n", args)
89+
parser.WriteHelp(os.Stdout)
90+
os.Exit(1)
91+
}
92+
var databaseName string
93+
if strings.HasSuffix(args[0], ".sql") {
94+
options.CurrentFile = args[0]
95+
} else {
9596
databaseName = args[0]
9697
}
9798

cmd/mysqldef/mysqldef_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1283,7 +1283,7 @@ func TestMysqldefFileComparison(t *testing.T) {
12831283
);`,
12841284
))
12851285

1286-
output := assertedExecute(t, "./mysqldef", "--file", "schema.sql", "--file", "schema.sql")
1286+
output := assertedExecute(t, "./mysqldef", "--file", "schema.sql", "schema.sql")
12871287
assertEquals(t, output, nothingModified)
12881288
}
12891289

cmd/psqldef/psqldef.go

+16-15
Original file line numberDiff line numberDiff line change
@@ -55,37 +55,38 @@ func parseOptions(args []string) (database.Config, *sqldef.Options) {
5555
os.Exit(0)
5656
}
5757

58-
desiredFile, currentFile := sqldef.ParseFiles(opts.File)
58+
desiredFiles := sqldef.ParseFiles(opts.File)
5959

6060
var desiredDDLs string
6161
if !opts.Export {
62-
desiredDDLs, err = sqldef.ReadFile(desiredFile)
62+
desiredDDLs, err = sqldef.ReadFiles(desiredFiles)
6363
if err != nil {
64-
log.Fatalf("Failed to read '%s': %s", desiredFile, err)
64+
log.Fatalf("Failed to read '%v': %s", desiredFiles, err)
6565
}
6666
}
6767

6868
options := sqldef.Options{
6969
DesiredDDLs: desiredDDLs,
70-
CurrentFile: currentFile,
7170
DryRun: opts.DryRun,
7271
Export: opts.Export,
7372
SkipDrop: opts.SkipDrop,
7473
BeforeApply: opts.BeforeApply,
7574
Config: database.ParseGeneratorConfig(opts.Config),
7675
}
7776

78-
databaseName := ""
79-
if len(currentFile) == 0 {
80-
if len(args) == 0 {
81-
fmt.Print("No database is specified!\n\n")
82-
parser.WriteHelp(os.Stdout)
83-
os.Exit(1)
84-
} else if len(args) > 1 {
85-
fmt.Printf("Multiple databases are given: %v\n\n", args)
86-
parser.WriteHelp(os.Stdout)
87-
os.Exit(1)
88-
}
77+
if len(args) == 0 {
78+
fmt.Print("No database is specified!\n\n")
79+
parser.WriteHelp(os.Stdout)
80+
os.Exit(1)
81+
} else if len(args) > 1 {
82+
fmt.Printf("Multiple databases are given: %v\n\n", args)
83+
parser.WriteHelp(os.Stdout)
84+
os.Exit(1)
85+
}
86+
var databaseName string
87+
if strings.HasSuffix(args[0], ".sql") {
88+
options.CurrentFile = args[0]
89+
} else {
8990
databaseName = args[0]
9091
}
9192

cmd/sqlite3def/sqlite3def.go

+19-17
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package main
22

33
import (
44
"fmt"
5-
"github.com/k0kubun/sqldef/database/file"
6-
"github.com/k0kubun/sqldef/parser"
75
"log"
86
"os"
7+
"strings"
98

109
"github.com/jessevdk/go-flags"
1110
"github.com/k0kubun/sqldef"
1211
"github.com/k0kubun/sqldef/database"
12+
"github.com/k0kubun/sqldef/database/file"
1313
"github.com/k0kubun/sqldef/database/sqlite3"
14+
"github.com/k0kubun/sqldef/parser"
1415
"github.com/k0kubun/sqldef/schema"
1516
)
1617

@@ -46,36 +47,37 @@ func parseOptions(args []string) (database.Config, *sqldef.Options) {
4647
os.Exit(0)
4748
}
4849

49-
desiredFile, currentFile := sqldef.ParseFiles(opts.File)
50+
desiredFiles := sqldef.ParseFiles(opts.File)
5051

5152
var desiredDDLs string
5253
if !opts.Export {
53-
desiredDDLs, err = sqldef.ReadFile(desiredFile)
54+
desiredDDLs, err = sqldef.ReadFiles(desiredFiles)
5455
if err != nil {
55-
log.Fatalf("Failed to read '%s': %s", desiredFile, err)
56+
log.Fatalf("Failed to read '%v': %s", desiredFiles, err)
5657
}
5758
}
5859

5960
options := sqldef.Options{
6061
DesiredDDLs: desiredDDLs,
61-
CurrentFile: currentFile,
6262
DryRun: opts.DryRun,
6363
Export: opts.Export,
6464
SkipDrop: opts.SkipDrop,
6565
Config: database.ParseGeneratorConfig(opts.Config),
6666
}
6767

68-
databaseName := ""
69-
if len(currentFile) == 0 {
70-
if len(args) == 0 {
71-
fmt.Print("No database is specified!\n\n")
72-
parser.WriteHelp(os.Stdout)
73-
os.Exit(1)
74-
} else if len(args) > 1 {
75-
fmt.Printf("Multiple databases are given: %v\n\n", args)
76-
parser.WriteHelp(os.Stdout)
77-
os.Exit(1)
78-
}
68+
if len(args) == 0 {
69+
fmt.Print("No database is specified!\n\n")
70+
parser.WriteHelp(os.Stdout)
71+
os.Exit(1)
72+
} else if len(args) > 1 {
73+
fmt.Printf("Multiple databases are given: %v\n\n", args)
74+
parser.WriteHelp(os.Stdout)
75+
os.Exit(1)
76+
}
77+
var databaseName string
78+
if strings.HasSuffix(args[0], ".sql") {
79+
options.CurrentFile = args[0]
80+
} else {
7981
databaseName = args[0]
8082
}
8183

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.19
55
require (
66
github.com/denisenkom/go-mssqldb v0.12.3
77
github.com/go-sql-driver/mysql v1.6.0
8+
github.com/google/go-cmp v0.5.9
89
github.com/jessevdk/go-flags v1.4.0
910
github.com/k0kubun/pp/v3 v3.2.0
1011
github.com/lib/pq v1.10.7

go.sum

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
2525
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
2626
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
2727
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
28+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
2829
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
2930
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
3031
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=

sqldef.go

+23-11
Original file line numberDiff line numberDiff line change
@@ -68,22 +68,34 @@ func Run(generatorMode schema.GeneratorMode, db database.Database, sqlParser dat
6868
}
6969
}
7070

71-
// TODO: Warn if both the second --file and database options are specified
72-
func ParseFiles(files []string) (string, string) {
71+
func ParseFiles(files []string) []string {
7372
if len(files) == 0 {
7473
panic("ParseFiles got empty files") // assume default:"-"
7574
}
7675

77-
desiredFile := files[0]
78-
currentFile := ""
79-
if len(files) == 2 {
80-
desiredFile = files[1]
81-
currentFile = files[0]
82-
} else if len(files) > 2 {
83-
fmt.Printf("Expected only one or two --file options, but got: %v\n", files)
84-
os.Exit(1)
76+
result := make([]string, 0, len(files))
77+
for _, f := range files {
78+
result = append(result, strings.Split(f, ",")...)
79+
}
80+
for i, r := range result {
81+
result[i] = strings.TrimSpace(r)
82+
}
83+
return result
84+
}
85+
86+
func ReadFiles(filepaths []string) (string, error) {
87+
var result strings.Builder
88+
for _, filepath := range filepaths {
89+
f, err := ReadFile(filepath)
90+
if err != nil {
91+
return "", err
92+
}
93+
_, err = result.WriteString(f)
94+
if err != nil {
95+
return "", err
96+
}
8597
}
86-
return desiredFile, currentFile
98+
return result.String(), nil
8799
}
88100

89101
func ReadFile(filepath string) (string, error) {

0 commit comments

Comments
 (0)