11package main
22
33import (
4- "strings"
5- "syscall/js"
4+ "fmt"
5+ "strings"
6+ "syscall/js"
67
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"
1011)
1112
1213// diff takes SQL DDL statements and generates the difference
1314func 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
2117
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+ }
2634
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+ }
3139
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
4041}
4142
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+ }
8358}
8459
8560func 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