1
1
package main
2
2
3
3
import (
4
- "strings"
5
- "syscall/js"
4
+ "fmt"
5
+ "strings"
6
+ "syscall/js"
6
7
7
- "github.com/sqldef/sqldef/database"
8
- "github.com/sqldef/sqldef/parser"
9
- "github.com/sqldef/sqldef/schema"
8
+ "github.com/sqldef/sqldef/database"
9
+ "github.com/sqldef/sqldef/parser"
10
+ "github.com/sqldef/sqldef/schema"
10
11
)
11
12
12
13
// diff takes SQL DDL statements and generates the difference
13
14
func diff (mode string , desiredDDLs string , currentDDLs string ) (string , error ) {
14
- generatorMode := schema .GeneratorModeMysql
15
- sqlParser := database.GenericParser {}
16
-
17
- if mode == "postgres" {
18
- generatorMode = schema .GeneratorModePostgres
19
- sqlParser = database .NewParser (parser .ParserModePostgres )
20
- }
15
+ var generatorMode schema.GeneratorMode
16
+ var sqlParser database.Parser
21
17
22
- if mode == "sqlite3" {
23
- generatorMode = schema .GeneratorModeSQLite3
24
- sqlParser = database .NewParser (parser .ParserModeSQLite3 )
25
- }
18
+ switch mode {
19
+ case "postgres" :
20
+ generatorMode = schema .GeneratorModePostgres
21
+ sqlParser = database .NewParser (parser .ParserModePostgres )
22
+ case "sqlite3" :
23
+ generatorMode = schema .GeneratorModeSQLite3
24
+ sqlParser = database .NewParser (parser .ParserModeSQLite3 )
25
+ case "mssql" :
26
+ generatorMode = schema .GeneratorModeMssql
27
+ sqlParser = database .NewParser (parser .ParserModeMssql )
28
+ case "mysql" :
29
+ generatorMode = schema .GeneratorModeMysql
30
+ sqlParser = database.GenericParser {}
31
+ default :
32
+ return "" , fmt .Errorf ("Invalid type: %s. Use mysql/sqlite3/mssql/postgres" , mode )
33
+ }
26
34
27
- if mode == "mssql" {
28
- generatorMode = schema . GeneratorModeMssql
29
- sqlParser = database . NewParser ( parser . ParserModeMssql )
30
- }
35
+ ddls , err := schema . GenerateIdempotentDDLs ( generatorMode , sqlParser , desiredDDLs , currentDDLs , database. GeneratorConfig {}, "" )
36
+ if err != nil {
37
+ return "" , err
38
+ }
31
39
32
- ddls , err := schema .GenerateIdempotentDDLs (generatorMode , sqlParser , desiredDDLs , currentDDLs , database.GeneratorConfig {}, "" )
33
- out := strings .Join (ddls , ";\n " )
34
-
35
- if err != nil {
36
- return "" , err
37
- } else {
38
- return out , nil
39
- }
40
+ return strings .Join (ddls , ";\n " ), nil
40
41
}
41
42
42
- // diffWrapper creates a JS-compatible function for the diff operation
43
- func diffWrapper () js.Func {
44
- return js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
45
- if len (args ) != 3 {
46
- return map [string ]interface {}{
47
- "error" : "Invalid number of arguments. Expected 3: mode, desiredDDLs, currentDDLs" ,
48
- }
49
- }
50
-
51
- mode := args [0 ].String ()
52
- desiredDDLs := args [1 ].String ()
53
- currentDDLs := args [2 ].String ()
54
-
55
- result , err := diff (mode , desiredDDLs , currentDDLs )
56
- if err != nil {
57
- return map [string ]interface {}{
58
- "error" : err .Error (),
59
- }
60
- }
61
-
62
- return map [string ]interface {}{
63
- "result" : result ,
64
- }
65
- })
66
- }
67
-
68
- // createSqlDefModule creates an object with all exported functions
69
- func createSqlDefModule () map [string ]interface {} {
70
- return map [string ]interface {}{
71
- "diff" : diffWrapper (),
72
- }
73
- }
74
-
75
- // registerModuleFactory registers a function that returns the module
76
- func registerModuleFactory () js.Func {
77
- moduleFactory := js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
78
- return createSqlDefModule ()
79
- })
80
-
81
- js .Global ().Set ("createSqlDefModule" , moduleFactory )
82
- return moduleFactory
43
+ func jsDiff (this js.Value , args []js.Value ) interface {} {
44
+ if len (args ) != 3 {
45
+ return map [string ]interface {}{
46
+ "error" : "Invalid number of arguments. Expected 3: mode, desiredDDLs, currentDDLs" ,
47
+ }
48
+ }
49
+ result , err := diff (args [0 ].String (), args [1 ].String (), args [2 ].String ())
50
+ if err != nil {
51
+ return map [string ]interface {}{
52
+ "error" : err .Error (),
53
+ }
54
+ }
55
+ return map [string ]interface {}{
56
+ "result" : result ,
57
+ }
83
58
}
84
59
85
60
func main () {
86
- moduleFactory := registerModuleFactory ()
87
- <- make (chan bool )
88
- moduleFactory .Release ()
89
- }
61
+ module := map [string ]interface {}{
62
+ "diff" : js .FuncOf (jsDiff ),
63
+ }
64
+ js .Global ().Set ("createSqlDefModule" , js .FuncOf (func (this js.Value , args []js.Value ) interface {} {
65
+ return module
66
+ }))
67
+ <- make (chan bool )
68
+ }
0 commit comments