Push strmangle refactoring through everything.

This commit is contained in:
Aaron L 2016-06-22 23:48:49 -07:00
parent 60f6080e73
commit fee1231813
13 changed files with 74 additions and 40 deletions

View file

@ -20,7 +20,7 @@ func ColumnNames(cols []Column) []string {
} }
// FilterColumnsByDefault generates the list of columns that have default values // FilterColumnsByDefault generates the list of columns that have default values
func FilterColumnsByDefault(columns []Column, defaults bool) []Column { func FilterColumnsByDefault(defaults bool, columns []Column) []Column {
var cols []Column var cols []Column
for _, c := range columns { for _, c := range columns {

View file

@ -30,7 +30,7 @@ func TestFilterColumnsByDefault(t *testing.T) {
{Name: "col4", Default: "things2"}, {Name: "col4", Default: "things2"},
} }
res := FilterColumnsByDefault(cols, false) res := FilterColumnsByDefault(false, cols)
if res[0].Name != `col1` { if res[0].Name != `col1` {
t.Errorf("Invalid result: %#v", res) t.Errorf("Invalid result: %#v", res)
} }
@ -38,7 +38,7 @@ func TestFilterColumnsByDefault(t *testing.T) {
t.Errorf("Invalid result: %#v", res) t.Errorf("Invalid result: %#v", res)
} }
res = FilterColumnsByDefault(cols, true) res = FilterColumnsByDefault(true, cols)
if res[0].Name != `col2` { if res[0].Name != `col2` {
t.Errorf("Invalid result: %#v", res) t.Errorf("Invalid result: %#v", res)
} }
@ -46,7 +46,7 @@ func TestFilterColumnsByDefault(t *testing.T) {
t.Errorf("Invalid result: %#v", res) t.Errorf("Invalid result: %#v", res)
} }
res = FilterColumnsByDefault([]Column{}, false) res = FilterColumnsByDefault(false, []Column{})
if res != nil { if res != nil {
t.Errorf("Invalid result: %#v", res) t.Errorf("Invalid result: %#v", res)
} }

View file

@ -6,6 +6,7 @@ import (
// Side-effect import sql driver // Side-effect import sql driver
_ "github.com/lib/pq" _ "github.com/lib/pq"
"github.com/nullbio/sqlboiler/bdb"
) )
// PostgresDriver holds the database connection string and a handle // PostgresDriver holds the database connection string and a handle
@ -76,8 +77,8 @@ func (p *PostgresDriver) TableNames() ([]string, error) {
// from the database information_schema.columns. It retrieves the column names // from the database information_schema.columns. It retrieves the column names
// and column types and returns those as a []Column after TranslateColumnType() // and column types and returns those as a []Column after TranslateColumnType()
// converts the SQL types to Go types, for example: "varchar" to "string" // converts the SQL types to Go types, for example: "varchar" to "string"
func (p *PostgresDriver) Columns(tableName string) ([]Column, error) { func (p *PostgresDriver) Columns(tableName string) ([]bdb.Column, error) {
var columns []Column var columns []bdb.Column
rows, err := p.dbConn.Query(` rows, err := p.dbConn.Query(`
select column_name, data_type, column_default, is_nullable select column_name, data_type, column_default, is_nullable
@ -102,7 +103,7 @@ func (p *PostgresDriver) Columns(tableName string) ([]Column, error) {
colDefault = *defaultPtr colDefault = *defaultPtr
} }
column := Column{ column := bdb.Column{
Name: colName, Name: colName,
Type: colType, Type: colType,
Default: colDefault, Default: colDefault,
@ -115,8 +116,8 @@ func (p *PostgresDriver) Columns(tableName string) ([]Column, error) {
} }
// PrimaryKeyInfo looks up the primary key for a table. // PrimaryKeyInfo looks up the primary key for a table.
func (p *PostgresDriver) PrimaryKeyInfo(tableName string) (*PrimaryKey, error) { func (p *PostgresDriver) PrimaryKeyInfo(tableName string) (*bdb.PrimaryKey, error) {
pkey := &PrimaryKey{} pkey := &bdb.PrimaryKey{}
var err error var err error
query := ` query := `
@ -164,8 +165,8 @@ func (p *PostgresDriver) PrimaryKeyInfo(tableName string) (*PrimaryKey, error) {
} }
// ForeignKeyInfo retrieves the foreign keys for a given table name. // ForeignKeyInfo retrieves the foreign keys for a given table name.
func (p *PostgresDriver) ForeignKeyInfo(tableName string) ([]ForeignKey, error) { func (p *PostgresDriver) ForeignKeyInfo(tableName string) ([]bdb.ForeignKey, error) {
var fkeys []ForeignKey var fkeys []bdb.ForeignKey
query := ` query := `
select select
@ -186,7 +187,7 @@ func (p *PostgresDriver) ForeignKeyInfo(tableName string) ([]ForeignKey, error)
} }
for rows.Next() { for rows.Next() {
var fkey ForeignKey var fkey bdb.ForeignKey
var sourceTable string var sourceTable string
err = rows.Scan(&fkey.Name, &sourceTable, &fkey.Column, &fkey.ForeignTable, &fkey.ForeignColumn) err = rows.Scan(&fkey.Name, &sourceTable, &fkey.Column, &fkey.ForeignTable, &fkey.ForeignColumn)
@ -207,7 +208,7 @@ func (p *PostgresDriver) ForeignKeyInfo(tableName string) ([]ForeignKey, error)
// TranslateColumnType converts postgres database types to Go types, for example // TranslateColumnType converts postgres database types to Go types, for example
// "varchar" to "string" and "bigint" to "int64". It returns this parsed data // "varchar" to "string" and "bigint" to "int64". It returns this parsed data
// as a Column object. // as a Column object.
func (p *PostgresDriver) TranslateColumnType(c Column) Column { func (p *PostgresDriver) TranslateColumnType(c bdb.Column) bdb.Column {
if c.IsNullable { if c.IsNullable {
switch c.Type { switch c.Type {
case "bigint", "bigserial": case "bigint", "bigserial":

View file

@ -29,6 +29,7 @@ type SQLColumnDef struct {
Type string Type string
} }
// String for fmt.Stringer
func (s SQLColumnDef) String() string { func (s SQLColumnDef) String() string {
return fmt.Sprintf("%s %s", s.Name, s.Type) return fmt.Sprintf("%s %s", s.Name, s.Type)
} }
@ -51,11 +52,22 @@ func SQLColDefinitions(cols []Column, names []string) []SQLColumnDef {
return ret return ret
} }
// SQLColDefStrings turns SQLColumnDefs into strings.
func SQLColDefStrings(defs []SQLColumnDef) []string {
strs := make([]string, len(defs))
for i, d := range defs {
strs[i] = d.String()
}
return strs
}
// AutoIncPrimaryKey returns the auto-increment primary key column name or an // AutoIncPrimaryKey returns the auto-increment primary key column name or an
// empty string. // empty string.
func AutoIncPrimaryKey(cols []Column, pkey *PrimaryKey) (col Column, ok bool) { func AutoIncPrimaryKey(cols []Column, pkey *PrimaryKey) *Column {
if pkey == nil { if pkey == nil {
return col, false return nil
} }
for _, pkeyColumn := range pkey.Columns { for _, pkeyColumn := range pkey.Columns {
@ -69,9 +81,9 @@ func AutoIncPrimaryKey(cols []Column, pkey *PrimaryKey) (col Column, ok bool) {
continue continue
} }
return c, true return &c
} }
} }
return col, false return nil
} }

View file

@ -31,6 +31,26 @@ func TestSQLColDefinitions(t *testing.T) {
} }
} }
func TestSQLDefStrings(t *testing.T) {
t.Parallel()
cols := []Column{
{Name: "one", Type: "int64"},
{Name: "two", Type: "string"},
{Name: "three", Type: "string"},
}
defs := SQLColDefinitions(cols, []string{"one", "three"})
strs := SQLColDefStrings(defs)
if got := strs[0]; got != "one int64" {
t.Error("wrong str:", got)
}
if got := strs[1]; got != "three string" {
t.Error("wrong str:", got)
}
}
func TestAutoIncPrimaryKey(t *testing.T) { func TestAutoIncPrimaryKey(t *testing.T) {
t.Parallel() t.Parallel()
@ -74,11 +94,10 @@ func TestAutoIncPrimaryKey(t *testing.T) {
} }
for testName, test := range tests { for testName, test := range tests {
pkey, ok := AutoIncPrimaryKey(test.Columns, test.Pkey) pkey := AutoIncPrimaryKey(test.Columns, test.Pkey)
if ok != test.Ok { if ok := (pkey != nil); ok != test.Ok {
t.Errorf("%s) found state was wrong, want: %t, got: %t", testName, test.Ok, ok) t.Errorf("%s) found state was wrong, want: %t, got: %t", testName, test.Ok, ok)
} } else if test.Ok && *pkey != test.Expect {
if pkey != test.Expect {
t.Errorf("%s) wrong primary key, want: %#v, got %#v", testName, test.Expect, pkey) t.Errorf("%s) wrong primary key, want: %#v, got %#v", testName, test.Expect, pkey)
} }
} }

View file

@ -9,6 +9,7 @@ import (
"text/template" "text/template"
"github.com/nullbio/sqlboiler/bdb" "github.com/nullbio/sqlboiler/bdb"
"github.com/nullbio/sqlboiler/bdb/drivers"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -170,7 +171,7 @@ func (s *State) initDriver(driverName string) error {
// Create a driver based off driver flag // Create a driver based off driver flag
switch driverName { switch driverName {
case "postgres": case "postgres":
s.Driver = bdb.NewPostgresDriver( s.Driver = drivers.NewPostgresDriver(
s.Config.Postgres.User, s.Config.Postgres.User,
s.Config.Postgres.Pass, s.Config.Postgres.Pass,
s.Config.Postgres.DBName, s.Config.Postgres.DBName,

View file

@ -127,14 +127,15 @@ var templateFunctions = template.FuncMap{
"prefixStringSlice": strmangle.PrefixStringSlice, "prefixStringSlice": strmangle.PrefixStringSlice,
// Database related mangling // Database related mangling
"wherePrimaryKey": strmangle.WherePrimaryKey, "whereClause": strmangle.WhereClause,
// dbdrivers ops // dbdrivers ops
"driverUsesLastInsertID": strmangle.DriverUsesLastInsertID, "driverUsesLastInsertID": strmangle.DriverUsesLastInsertID,
"filterColumnsByDefault": strmangle.FilterColumnsByDefault,
"filterColumnsByAutoIncrement": strmangle.FilterColumnsByAutoIncrement,
"autoIncPrimaryKey": strmangle.AutoIncPrimaryKey,
"primaryKeyFuncSig": strmangle.PrimaryKeyFuncSig,
"columnNames": strmangle.ColumnNames,
"makeDBName": strmangle.MakeDBName, "makeDBName": strmangle.MakeDBName,
"filterColumnsByDefault": bdb.FilterColumnsByDefault,
"filterColumnsByAutoIncrement": bdb.FilterColumnsByAutoIncrement,
"autoIncPrimaryKey": bdb.AutoIncPrimaryKey,
"sqlColDefinitions": bdb.SQLColDefinitions,
"sqlColDefStrings": bdb.SQLColDefStrings,
"columnNames": bdb.ColumnNames,
} }

View file

@ -2,11 +2,11 @@
{{- $tableNameSingular := .Table.Name | singular | titleCase -}} {{- $tableNameSingular := .Table.Name | singular | titleCase -}}
var ( var (
{{$varNameSingular}}Columns = []string{{"{"}}{{.Table.Columns | columnNames | stringMap .StringFuncs.quoteWrap | join ", "}}{{"}"}} {{$varNameSingular}}Columns = []string{{"{"}}{{.Table.Columns | columnNames | stringMap .StringFuncs.quoteWrap | join ", "}}{{"}"}}
{{$varNameSingular}}ColumnsWithoutDefault = []string{{"{"}}{{filterColumnsByDefault .Table.Columns false}}{{"}"}} {{$varNameSingular}}ColumnsWithoutDefault = []string{{"{"}}{{.Table.Columns | filterColumnsByDefault false | columnNames | stringMap .StringFuncs.quoteWrap | join ","}}{{"}"}}
{{$varNameSingular}}ColumnsWithDefault = []string{{"{"}}{{filterColumnsByDefault .Table.Columns true}}{{"}"}} {{$varNameSingular}}ColumnsWithDefault = []string{{"{"}}{{.Table.Columns | filterColumnsByDefault true | columnNames | stringMap .StringFuncs.quoteWrap | join ","}}{{"}"}}
{{$varNameSingular}}PrimaryKeyColumns = []string{{"{"}}{{.Table.PKey.Columns | stringMap .StringFuncs.quoteWrap | join ", "}}{{"}"}} {{$varNameSingular}}PrimaryKeyColumns = []string{{"{"}}{{.Table.PKey.Columns | stringMap .StringFuncs.quoteWrap | join ", "}}{{"}"}}
{{$varNameSingular}}AutoIncrementColumns = []string{{"{"}}{{filterColumnsByAutoIncrement .Table.Columns}}{{"}"}} {{$varNameSingular}}AutoIncrementColumns = []string{{"{"}}{{.Table.Columns | filterColumnsByAutoIncrement | columnNames | stringMap .StringFuncs.quoteWrap | join "," }}{{"}"}}
{{$varNameSingular}}AutoIncPrimaryKey = "{{autoIncPrimaryKey .Table.Columns .Table.PKey}}" {{$varNameSingular}}AutoIncPrimaryKey = "{{- with autoIncPrimaryKey .Table.Columns .Table.PKey -}}{{.Name}}{{- end -}}"
) )
type ( type (

View file

@ -15,7 +15,7 @@
{{- if eq $col $fkey.Column -}} {{- if eq $col $fkey.Column -}}
{{- $col := $localTable -}} {{- $col := $localTable -}}
{{- end -}} {{- end -}}
func ({{$recv}} *{{$ltable}}) {{$fn}} //func ({{$recv}} *{{$ltable}}) {{$fn}}
{{ end -}} {{ end -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}

View file

@ -2,17 +2,17 @@
{{- $dbName := singular .Table.Name -}} {{- $dbName := singular .Table.Name -}}
{{- $varNameSingular := .Table.Name | singular | camelCase -}} {{- $varNameSingular := .Table.Name | singular | camelCase -}}
// {{$tableNameSingular}}Find retrieves a single record by ID. // {{$tableNameSingular}}Find retrieves a single record by ID.
func {{$tableNameSingular}}Find({{primaryKeyFuncSig .Table.Columns .Table.PKey.Columns}}, selectCols ...string) (*{{$tableNameSingular}}, error) { func {{$tableNameSingular}}Find({{sqlColDefinitions .Table.Columns .Table.PKey.Columns | sqlColDefStrings | join " " }}, selectCols ...string) (*{{$tableNameSingular}}, error) {
return {{$tableNameSingular}}FindX(boil.GetDB(), {{.Table.PKey.Columns | stringMap .StringFuncs.camelCase | join ", "}}, selectCols...) return {{$tableNameSingular}}FindX(boil.GetDB(), {{.Table.PKey.Columns | stringMap .StringFuncs.camelCase | join ", "}}, selectCols...)
} }
func {{$tableNameSingular}}FindX(exec boil.Executor, {{primaryKeyFuncSig .Table.Columns .Table.PKey.Columns}}, selectCols ...string) (*{{$tableNameSingular}}, error) { func {{$tableNameSingular}}FindX(exec boil.Executor, {{sqlColDefinitions .Table.Columns .Table.PKey.Columns | sqlColDefStrings | join " "}}, selectCols ...string) (*{{$tableNameSingular}}, error) {
{{$varNameSingular}} := &{{$tableNameSingular}}{} {{$varNameSingular}} := &{{$tableNameSingular}}{}
mods := []qm.QueryMod{ mods := []qm.QueryMod{
qm.Select(selectCols...), qm.Select(selectCols...),
qm.Table("{{.Table.Name}}"), qm.Table("{{.Table.Name}}"),
qm.Where("{{wherePrimaryKey .Table.PKey.Columns 1}}", {{.Table.PKey.Columns | stringMap .StringFuncs.camelCase | join ", "}}), qm.Where("{{whereClause .Table.PKey.Columns 1}}", {{.Table.PKey.Columns | stringMap .StringFuncs.camelCase | join ", "}}),
} }
q := NewQueryX(exec, mods...) q := NewQueryX(exec, mods...)

View file

@ -15,12 +15,12 @@ func (o *{{$tableNameSingular}}) UpdateX(exec boil.Executor, whitelist ... strin
} }
// UpdateAt updates the {{$tableNameSingular}} using the primary key to find the row to update. // UpdateAt updates the {{$tableNameSingular}} using the primary key to find the row to update.
func (o *{{$tableNameSingular}}) UpdateAt({{primaryKeyFuncSig .Table.Columns .Table.PKey.Columns}}, whitelist ...string) error { func (o *{{$tableNameSingular}}) UpdateAt({{sqlColDefinitions .Table.Columns .Table.PKey.Columns | sqlColDefStrings | join " "}}, whitelist ...string) error {
return o.UpdateAtX(boil.GetDB(), {{.Table.PKey.Columns | stringMap .StringFuncs.camelCase | join ", "}}, whitelist...) return o.UpdateAtX(boil.GetDB(), {{.Table.PKey.Columns | stringMap .StringFuncs.camelCase | join ", "}}, whitelist...)
} }
// UpdateAtX uses an executor to update the {{$tableNameSingular}} using the primary key to find the row to update. // UpdateAtX uses an executor to update the {{$tableNameSingular}} using the primary key to find the row to update.
func (o *{{$tableNameSingular}}) UpdateAtX(exec boil.Executor, {{primaryKeyFuncSig .Table.Columns .Table.PKey.Columns}}, whitelist ...string) error { func (o *{{$tableNameSingular}}) UpdateAtX(exec boil.Executor, {{sqlColDefinitions .Table.Columns .Table.PKey.Columns | sqlColDefStrings | join " "}}, whitelist ...string) error {
if err := o.doBeforeUpdateHooks(); err != nil { if err := o.doBeforeUpdateHooks(); err != nil {
return err return err
} }

View file

@ -19,7 +19,7 @@ func (o *{{$tableNameSingular}}) DeleteX(exec boil.Executor) error {
mods = append(mods, mods = append(mods,
qm.Table("{{.Table.Name}}"), qm.Table("{{.Table.Name}}"),
qm.Where("{{wherePrimaryKey .Table.PKey.Columns 1}}", {{.Table.PKey.Columns | stringMap .StringFuncs.titleCase | prefixStringSlice "o." | join ", "}}), qm.Where("{{whereClause .Table.PKey.Columns 1}}", {{.Table.PKey.Columns | stringMap .StringFuncs.titleCase | prefixStringSlice "o." | join ", "}}),
) )
query := NewQueryX(exec, mods...) query := NewQueryX(exec, mods...)

View file

@ -19,7 +19,7 @@ func Test{{$tableNamePlural}}Bind(t *testing.T) {
j := {{$tableNameSingular}}{} j := {{$tableNameSingular}}{}
err = {{$tableNamePlural}}(qm.Where("{{wherePrimaryKey .Table.PKey.Columns 1}}", {{.Table.PKey.Columns | stringMap .StringFuncs.titleCase | prefixStringSlice "o." | join ", "}})).Bind(&j) err = {{$tableNamePlural}}(qm.Where("{{whereClause .Table.PKey.Columns 1}}", {{.Table.PKey.Columns | stringMap .StringFuncs.titleCase | prefixStringSlice "o." | join ", "}})).Bind(&j)
if err != nil { if err != nil {
t.Errorf("Unable to call Bind on {{$tableNameSingular}} single object: %s", err) t.Errorf("Unable to call Bind on {{$tableNameSingular}} single object: %s", err)
} }