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
func FilterColumnsByDefault(columns []Column, defaults bool) []Column {
func FilterColumnsByDefault(defaults bool, columns []Column) []Column {
var cols []Column
for _, c := range columns {

View file

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

View file

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

View file

@ -29,6 +29,7 @@ type SQLColumnDef struct {
Type string
}
// String for fmt.Stringer
func (s SQLColumnDef) String() string {
return fmt.Sprintf("%s %s", s.Name, s.Type)
}
@ -51,11 +52,22 @@ func SQLColDefinitions(cols []Column, names []string) []SQLColumnDef {
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
// empty string.
func AutoIncPrimaryKey(cols []Column, pkey *PrimaryKey) (col Column, ok bool) {
func AutoIncPrimaryKey(cols []Column, pkey *PrimaryKey) *Column {
if pkey == nil {
return col, false
return nil
}
for _, pkeyColumn := range pkey.Columns {
@ -69,9 +81,9 @@ func AutoIncPrimaryKey(cols []Column, pkey *PrimaryKey) (col Column, ok bool) {
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) {
t.Parallel()
@ -74,11 +94,10 @@ func TestAutoIncPrimaryKey(t *testing.T) {
}
for testName, test := range tests {
pkey, ok := AutoIncPrimaryKey(test.Columns, test.Pkey)
if ok != test.Ok {
pkey := AutoIncPrimaryKey(test.Columns, test.Pkey)
if ok := (pkey != nil); ok != test.Ok {
t.Errorf("%s) found state was wrong, want: %t, got: %t", testName, test.Ok, ok)
}
if pkey != test.Expect {
} else if test.Ok && *pkey != test.Expect {
t.Errorf("%s) wrong primary key, want: %#v, got %#v", testName, test.Expect, pkey)
}
}

View file

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

View file

@ -127,14 +127,15 @@ var templateFunctions = template.FuncMap{
"prefixStringSlice": strmangle.PrefixStringSlice,
// Database related mangling
"wherePrimaryKey": strmangle.WherePrimaryKey,
"whereClause": strmangle.WhereClause,
// dbdrivers ops
"driverUsesLastInsertID": strmangle.DriverUsesLastInsertID,
"filterColumnsByDefault": strmangle.FilterColumnsByDefault,
"filterColumnsByAutoIncrement": strmangle.FilterColumnsByAutoIncrement,
"autoIncPrimaryKey": strmangle.AutoIncPrimaryKey,
"primaryKeyFuncSig": strmangle.PrimaryKeyFuncSig,
"columnNames": strmangle.ColumnNames,
"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 -}}
var (
{{$varNameSingular}}Columns = []string{{"{"}}{{.Table.Columns | columnNames | stringMap .StringFuncs.quoteWrap | join ", "}}{{"}"}}
{{$varNameSingular}}ColumnsWithoutDefault = []string{{"{"}}{{filterColumnsByDefault .Table.Columns false}}{{"}"}}
{{$varNameSingular}}ColumnsWithDefault = []string{{"{"}}{{filterColumnsByDefault .Table.Columns true}}{{"}"}}
{{$varNameSingular}}ColumnsWithoutDefault = []string{{"{"}}{{.Table.Columns | filterColumnsByDefault false | columnNames | stringMap .StringFuncs.quoteWrap | join ","}}{{"}"}}
{{$varNameSingular}}ColumnsWithDefault = []string{{"{"}}{{.Table.Columns | filterColumnsByDefault true | columnNames | stringMap .StringFuncs.quoteWrap | join ","}}{{"}"}}
{{$varNameSingular}}PrimaryKeyColumns = []string{{"{"}}{{.Table.PKey.Columns | stringMap .StringFuncs.quoteWrap | join ", "}}{{"}"}}
{{$varNameSingular}}AutoIncrementColumns = []string{{"{"}}{{filterColumnsByAutoIncrement .Table.Columns}}{{"}"}}
{{$varNameSingular}}AutoIncPrimaryKey = "{{autoIncPrimaryKey .Table.Columns .Table.PKey}}"
{{$varNameSingular}}AutoIncrementColumns = []string{{"{"}}{{.Table.Columns | filterColumnsByAutoIncrement | columnNames | stringMap .StringFuncs.quoteWrap | join "," }}{{"}"}}
{{$varNameSingular}}AutoIncPrimaryKey = "{{- with autoIncPrimaryKey .Table.Columns .Table.PKey -}}{{.Name}}{{- end -}}"
)
type (

View file

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

View file

@ -2,17 +2,17 @@
{{- $dbName := singular .Table.Name -}}
{{- $varNameSingular := .Table.Name | singular | camelCase -}}
// {{$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...)
}
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}}{}
mods := []qm.QueryMod{
qm.Select(selectCols...),
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...)

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.
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...)
}
// 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 {
return err
}

View file

@ -19,7 +19,7 @@ func (o *{{$tableNameSingular}}) DeleteX(exec boil.Executor) error {
mods = append(mods,
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...)

View file

@ -19,7 +19,7 @@ func Test{{$tableNamePlural}}Bind(t *testing.T) {
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 {
t.Errorf("Unable to call Bind on {{$tableNameSingular}} single object: %s", err)
}