Broke up all commands into individual templates.

* Added bunch of new command names and descriptions.
* Changed "all" command to "boil", so we can use "all"
  for the name of the all database select helper.
This commit is contained in:
Patrick O'brien 2016-02-29 21:45:28 +10:00
parent 241cac7d67
commit 195e8d16e8
12 changed files with 223 additions and 148 deletions

View file

@ -1,17 +1,21 @@
package cmds
import "github.com/spf13/cobra"
import (
"sort"
var allCmd = &cobra.Command{
Use: "all",
Short: "Generate all templates from table definitions",
"github.com/spf13/cobra"
)
var boilCmd = &cobra.Command{
Use: "boil",
Short: "Generates ALL templates by running every command alphabetically",
}
// allRun executes every sqlboiler command, starting with structs.
func allRun(cmd *cobra.Command, args []string) {
// boilRun executes every sqlboiler command, starting with structs.
func boilRun(cmd *cobra.Command, args []string) {
// Exclude these commands from the output
skipTemplates := []string{
"all",
"boil",
}
var templateNames []string
@ -34,7 +38,10 @@ func allRun(cmd *cobra.Command, args []string) {
}
}
// Prepend "struct" command to templateNames slice
// Sort all names alphabetically
sort.Strings(templateNames)
// Prepend "struct" command to templateNames slice so it sits at top of sort
templateNames = append([]string{"struct"}, templateNames...)
// Loop through and generate every command template (excluding skipTemplates)

View file

@ -13,17 +13,29 @@ import (
//
// Command names should match the template file name (without the file extension).
var sqlBoilerCommands = map[string]*cobra.Command{
"all": allCmd,
"insert": insertCmd,
"delete": deleteCmd,
"select": selectCmd,
// Command to generate all commands
"boil": boilCmd,
// Struct commands
"struct": structCmd,
// Insert commands
"insert": insertCmd,
// Select commands
"all": allCmd,
"allby": allByCmd,
"fieldsall": fieldsAllCmd,
"fieldsallby": fieldsAllByCmd,
"find": findCmd,
"findby": findByCmd,
"fieldsfind": fieldsFindCmd,
"fieldsfindby": fieldsFindByCmd,
// Delete commands
"delete": deleteCmd,
}
// sqlBoilerCommandRuns points each command to its custom run function.
// If a run function is not defined here, it will use the defaultRun() default run function.
var sqlBoilerCommandRuns = map[string]CobraRunFunc{
"all": allRun,
"boil": boilRun,
}
// sqlBoilerTemplateFuncs is a map of all the functions that get passed into the templates.
@ -37,6 +49,46 @@ var sqlBoilerTemplateFuncs = template.FuncMap{
"makeGoInsertParamFlags": makeGoInsertParamFlags,
}
var allCmd = &cobra.Command{
Use: "all",
Short: "Generate a helper to select all records",
}
var allByCmd = &cobra.Command{
Use: "allby",
Short: "Generate a helper to select all records with specific column values",
}
var fieldsAllCmd = &cobra.Command{
Use: "fieldsall",
Short: "Generate a helper to select specific fields of all records",
}
var fieldsAllByCmd = &cobra.Command{
Use: "fieldsallby",
Short: "Generate a helper to select specific fields of records with specific column values",
}
var findCmd = &cobra.Command{
Use: "find",
Short: "Generate a helper to select a single record by ID",
}
var findByCmd = &cobra.Command{
Use: "findby",
Short: "Generate a helper to select a single record that has specific column values",
}
var fieldsFindCmd = &cobra.Command{
Use: "fieldsfind",
Short: "Generate a helper to select specific fields of records by ID",
}
var fieldsFindByCmd = &cobra.Command{
Use: "fieldsfindby",
Short: "Generate a helper to select specific fields of a single record that has specific column values",
}
var insertCmd = &cobra.Command{
Use: "insert",
Short: "Generate insert statement helpers from table definitions",
@ -47,11 +99,6 @@ var deleteCmd = &cobra.Command{
Short: "Generate delete statement helpers from table definitions",
}
var selectCmd = &cobra.Command{
Use: "select",
Short: "Generate select statement helpers from table definitions",
}
var structCmd = &cobra.Command{
Use: "struct",
Short: "Generate structs from table definitions",

View file

@ -5,6 +5,7 @@ import (
"fmt"
"os"
"path/filepath"
"sort"
"strings"
"text/template"
@ -187,17 +188,37 @@ func initTemplates() ([]*template.Template, error) {
// initCommands loads all of the commands in the sqlBoilerCommands and hooks their run functions.
func initCommands(rootCmd *cobra.Command, commands map[string]*cobra.Command, commandRuns map[string]CobraRunFunc) {
var commandNames []string
// Build a list of command names to alphabetically sort them for ordered loading.
for _, c := range commands {
// Skip the boil command load, we do it manually below.
if c.Name() == "boil" {
continue
}
commandNames = append(commandNames, c.Name())
}
// Initialize the "boil" command first, and manually. It should be at the top of the help file.
commands["boil"].Run = commandRuns["boil"]
rootCmd.AddCommand(commands["boil"])
// Load commands alphabetically. This ensures proper order of help file.
sort.Strings(commandNames)
// Loop every command name, load it and hook it to its Run handler
for _, c := range commandNames {
// If there is a commandRun for the command (matched by name)
// then set the Run hook
r, ok := commandRuns[c.Name()]
r, ok := commandRuns[c]
if ok {
c.Run = r
commands[c].Run = r
} else {
c.Run = defaultRun // Load default run if no custom run is found
commands[c].Run = defaultRun // Load default run if no custom run is found
}
// Add the command
rootCmd.AddCommand(c)
rootCmd.AddCommand(commands[c])
}
}

13
cmds/templates/all.tpl Normal file
View file

@ -0,0 +1,13 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}All retrieves all records.
func {{makeGoColName $tableName}}All(db *sqlx.DB) ([]*{{makeGoColName $tableName}}, error) {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

13
cmds/templates/allby.tpl Normal file
View file

@ -0,0 +1,13 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}AllBy retrieves all records with the specified column values.
func {{makeGoColName $tableName}}AllBy(db *sqlx.DB, columns map[string]interface{}) ([]*{{makeGoColName $tableName}}, error) {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

View file

@ -0,0 +1,15 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}FieldsAll retrieves the specified columns for all records.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsAll(db *sqlx.DB, results interface{}) error {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

View file

@ -0,0 +1,16 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}FieldsAllBy retrieves the specified columns
// for all records with the specified column values.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsAllBy(db *sqlx.DB, columns map[string]interface{}, results interface{}) error {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

View file

@ -0,0 +1,18 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}FieldsFind retrieves the specified columns for a single record by ID.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsFind(db *sqlx.DB, id int, results interface{}) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}} WHERE id=$1`, id)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

View file

@ -0,0 +1,19 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}FieldsFindBy retrieves the specified columns
// for a single record with the specified column values.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsFindBy(db *sqlx.DB, columns map[string]interface{}, results interface{}) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}} WHERE id=$1`, id)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

16
cmds/templates/find.tpl Normal file
View file

@ -0,0 +1,16 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}Find retrieves a single record by ID.
func {{makeGoColName $tableName}}Find(db *sqlx.DB, id int) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}} WHERE id=$1`, id)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

16
cmds/templates/findby.tpl Normal file
View file

@ -0,0 +1,16 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}FindBy retrieves a single record with the specified column values.
func {{makeGoColName $tableName}}FindBy(db *sqlx.DB, columns map[string]interface{}) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, fmt.Sprintf(`SELECT {{makeSelectParamNames $tableName .TableData}} WHERE %s=$1`, column), value)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}

View file

@ -1,126 +0,0 @@
{{- $tableName := .TableName -}}
// {{makeGoColName $tableName}}All retrieves all records.
func {{makeGoColName $tableName}}All(db *sqlx.DB) ([]*{{makeGoColName $tableName}}, error) {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}
// {{makeGoColName $tableName}}AllBy retrieves all records with the specified column values.
func {{makeGoColName $tableName}}AllBy(db *sqlx.DB, columns map[string]interface{}) ([]*{{makeGoColName $tableName}}, error) {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}
// {{makeGoColName $tableName}}FieldsAll retrieves the specified columns for all records.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsAll(db *sqlx.DB, results interface{}) error {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}
// {{makeGoColName $tableName}}FieldsAllBy retrieves the specified columns
// for all records with the specified column values.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsAllBy(db *sqlx.DB, columns map[string]interface{}, results interface{}) error {
{{$varName := makeGoVarName $tableName -}}
var {{$varName}} []*{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}}`)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}
// {{makeGoColName $tableName}}Find retrieves a single record by ID.
func {{makeGoColName $tableName}}Find(db *sqlx.DB, id int) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}} WHERE id=$1`, id)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}
// {{makeGoColName $tableName}}FindBy retrieves a single record with the specified column values.
func {{makeGoColName $tableName}}FindBy(db *sqlx.DB, columns map[string]interface{}) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, fmt.Sprintf(`SELECT {{makeSelectParamNames $tableName .TableData}} WHERE %s=$1`, column), value)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}
// {{makeGoColName $tableName}}FieldsFind retrieves the specified columns for a single record by ID.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsFind(db *sqlx.DB, id int, results interface{}) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}} WHERE id=$1`, id)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}
// {{makeGoColName $tableName}}FieldsFindBy retrieves the specified columns
// for a single record with the specified column values.
// Pass in a pointer to an object with `db` tags that match the column names you wish to retrieve.
// For example: friendName string `db:"friend_name"`
func {{makeGoColName $tableName}}FieldsFindBy(db *sqlx.DB, columns map[string]interface{}, results interface{}) (*{{makeGoColName $tableName}}, error) {
if id == 0 {
return nil, errors.New("model: no id provided for {{$tableName}} select")
}
{{$varName := makeGoVarName $tableName}}
var {{$varName}} *{{makeGoColName $tableName}}
err := db.Select(&{{$varName}}, `SELECT {{makeSelectParamNames $tableName .TableData}} WHERE id=$1`, id)
if err != nil {
return nil, fmt.Errorf("models: unable to select from {{$tableName}}: %s", err)
}
return {{$varName}}, nil
}