Added all command, added output file flag

This commit is contained in:
Patrick O'brien 2016-02-24 15:40:07 +10:00
parent 69adb1a552
commit 2ea3239ad1
7 changed files with 128 additions and 104 deletions

35
cmds/all.go Normal file
View file

@ -0,0 +1,35 @@
package cmds
import "github.com/spf13/cobra"
func init() {
SQLBoiler.AddCommand(allCmd)
allCmd.Run = allRun
}
var allCmd = &cobra.Command{
Use: "all",
Short: "Generate all templates from table definitions",
}
func allRun(cmd *cobra.Command, args []string) {
err := outHandler(generateStructs())
if err != nil {
errorQuit(err)
}
err = outHandler(generateDeletes())
if err != nil {
errorQuit(err)
}
err = outHandler(generateInserts())
if err != nil {
errorQuit(err)
}
err = outHandler(generateSelects())
if err != nil {
errorQuit(err)
}
}

View file

@ -1,9 +1,6 @@
package cmds package cmds
import ( import (
"bytes"
"go/format"
"os"
"text/template" "text/template"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -20,10 +17,9 @@ var deleteCmd = &cobra.Command{
} }
func deleteRun(cmd *cobra.Command, args []string) { func deleteRun(cmd *cobra.Command, args []string) {
out := generateDeletes() err := outHandler(generateDeletes())
if err != nil {
for _, v := range out { errorQuit(err)
os.Stdout.Write(v)
} }
} }
@ -36,26 +32,10 @@ func generateDeletes() [][]byte {
errorQuit(err) errorQuit(err)
} }
var outputs [][]byte outputs, err := processTemplate(t)
for i := 0; i < len(cmdData.TablesInfo); i++ {
data := tplData{
TableName: cmdData.TableNames[i],
TableData: cmdData.TablesInfo[i],
}
var buf bytes.Buffer
if err = t.Execute(&buf, data); err != nil {
errorQuit(err)
}
out, err := format.Source(buf.Bytes())
if err != nil { if err != nil {
errorQuit(err) errorQuit(err)
} }
outputs = append(outputs, out)
}
return outputs return outputs
} }

View file

@ -1,10 +1,7 @@
package cmds package cmds
import ( import (
"bytes"
"fmt" "fmt"
"go/format"
"os"
"text/template" "text/template"
"github.com/pobri19/sqlboiler/dbdrivers" "github.com/pobri19/sqlboiler/dbdrivers"
@ -22,10 +19,9 @@ var insertCmd = &cobra.Command{
} }
func insertRun(cmd *cobra.Command, args []string) { func insertRun(cmd *cobra.Command, args []string) {
out := generateInserts() err := outHandler(generateInserts())
if err != nil {
for _, v := range out { errorQuit(err)
os.Stdout.Write(v)
} }
} }
@ -41,27 +37,11 @@ func generateInserts() [][]byte {
errorQuit(err) errorQuit(err)
} }
var outputs [][]byte outputs, err := processTemplate(t)
for i := 0; i < len(cmdData.TablesInfo); i++ {
data := tplData{
TableName: cmdData.TableNames[i],
TableData: cmdData.TablesInfo[i],
}
var buf bytes.Buffer
if err = t.Execute(&buf, data); err != nil {
errorQuit(err)
}
out, err := format.Source(buf.Bytes())
if err != nil { if err != nil {
errorQuit(err) errorQuit(err)
} }
outputs = append(outputs, out)
}
return outputs return outputs
} }

View file

@ -1,10 +1,7 @@
package cmds package cmds
import ( import (
"bytes"
"fmt" "fmt"
"go/format"
"os"
"text/template" "text/template"
"github.com/pobri19/sqlboiler/dbdrivers" "github.com/pobri19/sqlboiler/dbdrivers"
@ -22,10 +19,9 @@ var selectCmd = &cobra.Command{
} }
func selectRun(cmd *cobra.Command, args []string) { func selectRun(cmd *cobra.Command, args []string) {
out := generateSelects() err := outHandler(generateSelects())
if err != nil {
for _, v := range out { errorQuit(err)
os.Stdout.Write(v)
} }
} }
@ -40,27 +36,11 @@ func generateSelects() [][]byte {
errorQuit(err) errorQuit(err)
} }
var outputs [][]byte outputs, err := processTemplate(t)
for i := 0; i < len(cmdData.TablesInfo); i++ {
data := tplData{
TableName: cmdData.TableNames[i],
TableData: cmdData.TablesInfo[i],
}
var buf bytes.Buffer
if err = t.Execute(&buf, data); err != nil {
errorQuit(err)
}
out, err := format.Source(buf.Bytes())
if err != nil { if err != nil {
errorQuit(err) errorQuit(err)
} }
outputs = append(outputs, out)
}
return outputs return outputs
} }

View file

@ -1,9 +1,12 @@
package cmds package cmds
import ( import (
"bytes"
"fmt" "fmt"
"go/format"
"os" "os"
"strings" "strings"
"text/template"
"github.com/pobri19/sqlboiler/dbdrivers" "github.com/pobri19/sqlboiler/dbdrivers"
) )
@ -19,6 +22,53 @@ func errorQuit(err error) {
os.Exit(-1) os.Exit(-1)
} }
func processTemplate(t *template.Template) ([][]byte, error) {
var outputs [][]byte
for i := 0; i < len(cmdData.TablesInfo); i++ {
data := tplData{
TableName: cmdData.TableNames[i],
TableData: cmdData.TablesInfo[i],
}
var buf bytes.Buffer
if err := t.Execute(&buf, data); err != nil {
return nil, err
}
out, err := format.Source(buf.Bytes())
if err != nil {
return nil, err
}
outputs = append(outputs, out)
}
return outputs, nil
}
func outHandler(data [][]byte) error {
nl := []byte{'\n'}
var out *os.File
if cmdData.OutFile == nil {
out = os.Stdout
} else {
out = cmdData.OutFile
}
for _, v := range data {
if _, err := out.Write(v); err != nil {
return err
}
if _, err := out.Write(nl); err != nil {
return err
}
}
return nil
}
func makeGoColName(name string) string { func makeGoColName(name string) string {
s := strings.Split(name, "_") s := strings.Split(name, "_")

View file

@ -2,6 +2,7 @@ package cmds
import ( import (
"errors" "errors"
"os"
"strings" "strings"
"github.com/pobri19/sqlboiler/dbdrivers" "github.com/pobri19/sqlboiler/dbdrivers"
@ -12,6 +13,7 @@ type CmdData struct {
TablesInfo [][]dbdrivers.DBTable TablesInfo [][]dbdrivers.DBTable
TableNames []string TableNames []string
DBDriver dbdrivers.DBDriver DBDriver dbdrivers.DBDriver
OutFile *os.File
} }
var cmdData *CmdData var cmdData *CmdData
@ -19,7 +21,9 @@ var cmdData *CmdData
func init() { func init() {
SQLBoiler.PersistentFlags().StringP("driver", "d", "", "The name of the driver in your config.toml") SQLBoiler.PersistentFlags().StringP("driver", "d", "", "The name of the driver in your config.toml")
SQLBoiler.PersistentFlags().StringP("table", "t", "", "A comma seperated list of table names") SQLBoiler.PersistentFlags().StringP("table", "t", "", "A comma seperated list of table names")
SQLBoiler.PersistentFlags().StringP("out", "o", "", "The name of the output file")
SQLBoiler.PersistentPreRun = sqlBoilerPreRun SQLBoiler.PersistentPreRun = sqlBoilerPreRun
SQLBoiler.PersistentPostRun = sqlBoilerPostRun
} }
var SQLBoiler = &cobra.Command{ var SQLBoiler = &cobra.Command{
@ -29,6 +33,11 @@ var SQLBoiler = &cobra.Command{
`Complete documentation is available at http://github.com/pobri19/sqlboiler`, `Complete documentation is available at http://github.com/pobri19/sqlboiler`,
} }
func sqlBoilerPostRun(cmd *cobra.Command, args []string) {
cmdData.OutFile.Close()
cmdData.DBDriver.Close()
}
func sqlBoilerPreRun(cmd *cobra.Command, args []string) { func sqlBoilerPreRun(cmd *cobra.Command, args []string) {
var err error var err error
cmdData = &CmdData{} cmdData = &CmdData{}
@ -88,4 +97,14 @@ func sqlBoilerPreRun(cmd *cobra.Command, args []string) {
cmdData.TablesInfo = append(cmdData.TablesInfo, tInfo) cmdData.TablesInfo = append(cmdData.TablesInfo, tInfo)
} }
// open the out file filehandle
outf := SQLBoiler.PersistentFlags().Lookup("out").Value.String()
if outf != "" {
var err error
cmdData.OutFile, err = os.Create(outf)
if err != nil {
errorQuit(err)
}
}
} }

View file

@ -1,9 +1,6 @@
package cmds package cmds
import ( import (
"bytes"
"go/format"
"os"
"text/template" "text/template"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -20,10 +17,9 @@ var structCmd = &cobra.Command{
} }
func structRun(cmd *cobra.Command, args []string) { func structRun(cmd *cobra.Command, args []string) {
out := generateStructs() err := outHandler(generateStructs())
if err != nil {
for _, v := range out { errorQuit(err)
os.Stdout.Write(v)
} }
} }
@ -37,26 +33,10 @@ func generateStructs() [][]byte {
errorQuit(err) errorQuit(err)
} }
var outputs [][]byte outputs, err := processTemplate(t)
for i := 0; i < len(cmdData.TablesInfo); i++ {
data := tplData{
TableName: cmdData.TableNames[i],
TableData: cmdData.TablesInfo[i],
}
var buf bytes.Buffer
if err = t.Execute(&buf, data); err != nil {
errorQuit(err)
}
out, err := format.Source(buf.Bytes())
if err != nil { if err != nil {
errorQuit(err) errorQuit(err)
} }
outputs = append(outputs, out)
}
return outputs return outputs
} }