github.com/paweljw/pop/v5@v5.4.6/soda/cmd/generate/sql_cmd.go (about) 1 package generate 2 3 import ( 4 "context" 5 "errors" 6 7 "github.com/gobuffalo/attrs" 8 "github.com/gobuffalo/genny/v2" 9 "github.com/gobuffalo/logger" 10 "github.com/gobuffalo/pop/v5" 11 "github.com/gobuffalo/pop/v5/genny/fizz/cempty" 12 "github.com/gobuffalo/pop/v5/genny/fizz/ctable" 13 "github.com/spf13/cobra" 14 ) 15 16 // SQLCmd generates a SQL migration 17 var SQLCmd = &cobra.Command{ 18 Use: "sql [name]", 19 Short: "Generates Up/Down migrations for your database using SQL.", 20 RunE: func(cmd *cobra.Command, args []string) error { 21 name := "" 22 if len(args) > 0 { 23 name = args[0] 24 } 25 26 var ( 27 atts attrs.Attrs 28 err error 29 ) 30 if len(args) > 1 { 31 atts, err = attrs.ParseArgs(args[1:]...) 32 if err != nil { 33 return err 34 } 35 } 36 37 run := genny.WetRunner(context.Background()) 38 39 // Ensure the generator is as verbose as the old one. 40 lg := logger.New(logger.DebugLevel) 41 run.Logger = lg 42 43 p := cmd.Flag("path") 44 path := "" 45 if p != nil { 46 path = p.Value.String() 47 } 48 e := cmd.Flag("env") 49 type nameable interface { 50 Name() string 51 } 52 var translator nameable 53 db, err := pop.Connect(e.Value.String()) 54 if err != nil { 55 return err 56 } 57 t := db.Dialect.FizzTranslator() 58 if tn, ok := t.(nameable); ok { 59 translator = tn 60 } else { 61 return errors.New("invalid fizz translator") 62 } 63 64 if len(atts) == 0 { 65 g, err := cempty.New(&cempty.Options{ 66 Name: name, 67 Path: path, 68 Type: "sql", 69 Translator: translator, 70 }) 71 if err != nil { 72 return err 73 } 74 run.With(g) 75 } else { 76 g, err := ctable.New(&ctable.Options{ 77 TableName: name, 78 Path: path, 79 Type: "sql", 80 Attrs: atts, 81 Translator: t, 82 }) 83 if err != nil { 84 return err 85 } 86 run.With(g) 87 } 88 89 return run.Run() 90 }, 91 }