diff --git a/.gitignore b/.gitignore index a7dc0b1..8f7858d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ sqlboiler.toml models/ testschema.sql .cover -/.idea diff --git a/README.md b/README.md index 51b5fbe..194fdd8 100644 --- a/README.md +++ b/README.md @@ -956,16 +956,15 @@ it with the `AddModelHook` method. Here is an example of a before insert hook: ```go // Define my hook function -func myHook(exec boil.Executor, p *Pilot) error { +func myHook(exec boil.Executor, p *Pilot) { // Do stuff - return nil } // Register my before insert hook for pilots models.AddPilotHook(boil.BeforeInsertHook, myHook) ``` -Your `ModelHook` will always be defined as `func(boil.Executor, *Model) error` +Your `ModelHook` will always be defined as `func(boil.Executor, *Model)` ### Transactions diff --git a/bdb/column.go b/bdb/column.go index da56e48..a3632fc 100644 --- a/bdb/column.go +++ b/bdb/column.go @@ -3,7 +3,7 @@ package bdb import ( "strings" - "github.com/lbryio/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/strmangle" ) // Column holds information about a database column. diff --git a/bdb/drivers/mock.go b/bdb/drivers/mock.go index d8a5aa0..1c91d0e 100644 --- a/bdb/drivers/mock.go +++ b/bdb/drivers/mock.go @@ -1,8 +1,8 @@ package drivers import ( - "github.com/lbryio/sqlboiler/bdb" - "github.com/lbryio/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/bdb" + "github.com/vattle/sqlboiler/strmangle" ) // MockDriver is a mock implementation of the bdb driver Interface @@ -58,14 +58,6 @@ func (m *MockDriver) Columns(schema, tableName string) ([]bdb.Column, error) { }[tableName], nil } -func (m *MockDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) { - return []bdb.UniqueKey{}, nil -} - -func (m *MockDriver) AutoincrementInfo(schema, tableName string) (string, error) { - return "", nil -} - // ForeignKeyInfo returns a list of mock foreignkeys func (m *MockDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) { return map[string][]bdb.ForeignKey{ diff --git a/bdb/drivers/mssql.go b/bdb/drivers/mssql.go index 79f3010..cb3290a 100644 --- a/bdb/drivers/mssql.go +++ b/bdb/drivers/mssql.go @@ -7,8 +7,8 @@ import ( "strings" _ "github.com/denisenkom/go-mssqldb" - "github.com/lbryio/sqlboiler/bdb" "github.com/pkg/errors" + "github.com/vattle/sqlboiler/bdb" ) // MSSQLDriver holds the database connection string and a handle @@ -241,14 +241,6 @@ func (m *MSSQLDriver) PrimaryKeyInfo(schema, tableName string) (*bdb.PrimaryKey, return pkey, nil } -func (m *MSSQLDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) { - return []bdb.UniqueKey{}, errors.New("not implemented") -} - -func (m *MSSQLDriver) AutoincrementInfo(schema, tableName string) (string, error) { - return "", errors.New("not implemented") -} - // ForeignKeyInfo retrieves the foreign keys for a given table name. func (m *MSSQLDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) { var fkeys []bdb.ForeignKey diff --git a/bdb/drivers/mysql.go b/bdb/drivers/mysql.go index 5523a6b..346e473 100644 --- a/bdb/drivers/mysql.go +++ b/bdb/drivers/mysql.go @@ -3,13 +3,12 @@ package drivers import ( "database/sql" "fmt" - "sort" "strconv" "strings" "github.com/go-sql-driver/mysql" - "github.com/lbryio/sqlboiler/bdb" "github.com/pkg/errors" + "github.com/vattle/sqlboiler/bdb" ) // TinyintAsBool is a global that is set from main.go if a user specifies @@ -53,7 +52,6 @@ func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslmode st } config.Addr += ":" + strconv.Itoa(port) config.TLSConfig = sslmode - config.AllowNativePasswords = true // MySQL is a bad, and by default reads date/datetime into a []byte // instead of a time.Time. Tell it to stop being a bad. @@ -234,79 +232,6 @@ func (m *MySQLDriver) PrimaryKeyInfo(schema, tableName string) (*bdb.PrimaryKey, return pkey, nil } -// UniqueKeyInfo retrieves the unique keys for a given table name. -func (m *MySQLDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) { - var ukeys []bdb.UniqueKey - - query := ` - select tc.table_name, tc.constraint_name, GROUP_CONCAT(kcu.column_name) - from information_schema.table_constraints tc - left join information_schema.key_column_usage kcu on tc.constraint_name = kcu.constraint_name and tc.table_name = kcu.table_name and tc.table_schema = kcu.table_schema - where tc.table_schema = ? and tc.table_name = ? and tc.constraint_type = "UNIQUE" - group by tc.table_name, tc.constraint_name - ` - - var rows *sql.Rows - var err error - if rows, err = m.dbConn.Query(query, schema, tableName); err != nil { - return nil, err - } - - for rows.Next() { - var ukey bdb.UniqueKey - var columns string - - //ukey.Table = tableName - err = rows.Scan(&ukey.Table, &ukey.Name, &columns) - if err != nil { - return nil, err - } - - ukey.Columns = strings.Split(columns, ",") - sort.Strings(ukey.Columns) - - ukeys = append(ukeys, ukey) - } - - if err = rows.Err(); err != nil { - return nil, err - } - - return ukeys, nil -} - -// AutoincrementInfo retrieves the autoincrement column for a given table name, if one exists. -func (m *MySQLDriver) AutoincrementInfo(schema, tableName string) (string, error) { - query := ` - select column_name - from information_schema.columns - where table_schema = ? and table_name = ? and extra like "%auto_increment%" - ` - - var rows *sql.Rows - var err error - if rows, err = m.dbConn.Query(query, schema, tableName); err != nil { - return "", err - } - - for rows.Next() { - var column string - - err = rows.Scan(&column) - if err != nil { - return "", err - } - - return column, nil - } - - if err = rows.Err(); err != nil { - return "", err - } - - return "", nil -} - // ForeignKeyInfo retrieves the foreign keys for a given table name. func (m *MySQLDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) { var fkeys []bdb.ForeignKey @@ -381,7 +306,7 @@ func (m *MySQLDriver) TranslateColumnType(c bdb.Column) bdb.Column { if unsigned { c.Type = "null.Uint64" } else { - c.Type = "null.Int64" + c.Type = "null.Uint64" } case "float": c.Type = "null.Float32" diff --git a/bdb/drivers/postgres.go b/bdb/drivers/postgres.go index 9af7edd..34cdd78 100644 --- a/bdb/drivers/postgres.go +++ b/bdb/drivers/postgres.go @@ -8,10 +8,10 @@ import ( // Side-effect import sql driver - "github.com/lbryio/sqlboiler/bdb" - "github.com/lbryio/sqlboiler/strmangle" _ "github.com/lib/pq" "github.com/pkg/errors" + "github.com/vattle/sqlboiler/bdb" + "github.com/vattle/sqlboiler/strmangle" ) // PostgresDriver holds the database connection string and a handle @@ -266,14 +266,6 @@ func (p *PostgresDriver) PrimaryKeyInfo(schema, tableName string) (*bdb.PrimaryK return pkey, nil } -func (p *PostgresDriver) UniqueKeyInfo(schema, tableName string) ([]bdb.UniqueKey, error) { - return []bdb.UniqueKey{}, errors.New("not implemented") -} - -func (p *PostgresDriver) AutoincrementInfo(schema, tableName string) (string, error) { - return "", errors.New("not implemented") -} - // ForeignKeyInfo retrieves the foreign keys for a given table name. func (p *PostgresDriver) ForeignKeyInfo(schema, tableName string) ([]bdb.ForeignKey, error) { var fkeys []bdb.ForeignKey diff --git a/bdb/interface.go b/bdb/interface.go index 7f4baa5..dfb33bc 100644 --- a/bdb/interface.go +++ b/bdb/interface.go @@ -9,8 +9,6 @@ type Interface interface { TableNames(schema string, whitelist, blacklist []string) ([]string, error) Columns(schema, tableName string) ([]Column, error) PrimaryKeyInfo(schema, tableName string) (*PrimaryKey, error) - UniqueKeyInfo(schema, tableName string) ([]UniqueKey, error) - AutoincrementInfo(schema, tableName string) (string, error) ForeignKeyInfo(schema, tableName string) ([]ForeignKey, error) // TranslateColumnType takes a Database column type and returns a go column type. @@ -65,18 +63,10 @@ func Tables(db Interface, schema string, whitelist, blacklist []string) ([]Table return nil, errors.Wrapf(err, "unable to fetch table pkey info (%s)", name) } - if t.UKeys, err = db.UniqueKeyInfo(schema, name); err != nil { - return nil, errors.Wrapf(err, "unable to fetch table ukey info (%s)", name) - } - if t.FKeys, err = db.ForeignKeyInfo(schema, name); err != nil { return nil, errors.Wrapf(err, "unable to fetch table fkey info (%s)", name) } - if t.AutoIncrementColumn, err = db.AutoincrementInfo(schema, name); err != nil { - return nil, errors.Wrapf(err, "unable to fetch table autoincrement info (%s)", name) - } - setIsJoinTable(&t) tables = append(tables, t) diff --git a/bdb/interface_test.go b/bdb/interface_test.go index e5d28fb..4d429c6 100644 --- a/bdb/interface_test.go +++ b/bdb/interface_test.go @@ -3,7 +3,7 @@ package bdb import ( "testing" - "github.com/lbryio/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/strmangle" ) type testMockDriver struct{} diff --git a/bdb/keys.go b/bdb/keys.go index 8007843..909ada2 100644 --- a/bdb/keys.go +++ b/bdb/keys.go @@ -8,13 +8,6 @@ type PrimaryKey struct { Columns []string } -// UniqueKey represents a unique key constraint in a database -type UniqueKey struct { - Table string - Name string - Columns []string -} - // ForeignKey represents a foreign key constraint in a database type ForeignKey struct { Table string diff --git a/bdb/table.go b/bdb/table.go index 13355aa..62dcd32 100644 --- a/bdb/table.go +++ b/bdb/table.go @@ -8,12 +8,9 @@ type Table struct { // For dbs with real schemas, like Postgres. // Example value: "schema_name"."table_name" SchemaName string - - Columns []Column - AutoIncrementColumn string + Columns []Column PKey *PrimaryKey - UKeys []UniqueKey FKeys []ForeignKey IsJoinTable bool diff --git a/boil/db.go b/boil/db.go index f3153bc..84bc7d3 100644 --- a/boil/db.go +++ b/boil/db.go @@ -19,10 +19,6 @@ type Transactor interface { // Beginner begins transactions. type Beginner interface { - Begin() (Transactor, error) -} - -type SQLBeginner interface { Begin() (*sql.Tx, error) } @@ -30,11 +26,7 @@ type SQLBeginner interface { func Begin() (Transactor, error) { creator, ok := currentDB.(Beginner) if !ok { - creator2, ok2 := currentDB.(SQLBeginner) - if !ok2 { - panic("database does not support transactions") - } - return creator2.Begin() + panic("database does not support transactions") } return creator.Begin() diff --git a/boil/errors.go b/boil/errors.go new file mode 100644 index 0000000..4d02169 --- /dev/null +++ b/boil/errors.go @@ -0,0 +1,23 @@ +package boil + +type boilErr struct { + error +} + +// WrapErr wraps err in a boilErr +func WrapErr(err error) error { + return boilErr{ + error: err, + } +} + +// Error returns the underlying error string +func (e boilErr) Error() string { + return e.error.Error() +} + +// IsBoilErr checks if err is a boilErr +func IsBoilErr(err error) bool { + _, ok := err.(boilErr) + return ok +} diff --git a/boil/errors_test.go b/boil/errors_test.go new file mode 100644 index 0000000..2b2f1a0 --- /dev/null +++ b/boil/errors_test.go @@ -0,0 +1,24 @@ +package boil + +import ( + "errors" + "testing" +) + +func TestErrors(t *testing.T) { + t.Parallel() + + err := errors.New("test error") + if IsBoilErr(err) == true { + t.Errorf("Expected false") + } + + err = WrapErr(errors.New("test error")) + if err.Error() != "test error" { + t.Errorf(`Expected "test error", got %v`, err.Error()) + } + + if IsBoilErr(err) != true { + t.Errorf("Expected true") + } +} diff --git a/boilingcore/boilingcore.go b/boilingcore/boilingcore.go index e667cae..5e00687 100644 --- a/boilingcore/boilingcore.go +++ b/boilingcore/boilingcore.go @@ -13,10 +13,10 @@ import ( "text/template" "github.com/pkg/errors" - "github.com/lbryio/sqlboiler/bdb" - "github.com/lbryio/sqlboiler/bdb/drivers" - "github.com/lbryio/sqlboiler/queries" - "github.com/lbryio/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/bdb" + "github.com/vattle/sqlboiler/bdb/drivers" + "github.com/vattle/sqlboiler/queries" + "github.com/vattle/sqlboiler/strmangle" ) const ( @@ -267,7 +267,7 @@ func (s *State) processReplacements() error { return nil } -var basePackage = "github.com/lbryio/sqlboiler" +var basePackage = "github.com/vattle/sqlboiler" func getBasePath(baseDirConfig string) (string, error) { if len(baseDirConfig) > 0 { diff --git a/boilingcore/imports.go b/boilingcore/imports.go index e20480b..eafcf28 100644 --- a/boilingcore/imports.go +++ b/boilingcore/imports.go @@ -6,7 +6,7 @@ import ( "sort" "strings" - "github.com/lbryio/sqlboiler/bdb" + "github.com/vattle/sqlboiler/bdb" ) // imports defines the optional standard imports and @@ -170,33 +170,26 @@ func newImporter() importer { `"time"`, }, thirdParty: importList{ - `"github.com/lbryio/lbry.go/v2/extras/errors"`, - `"github.com/lbryio/lbry.go/v2/extras/null"`, - `"github.com/lbryio/sqlboiler/boil"`, - `"github.com/lbryio/sqlboiler/queries"`, - `"github.com/lbryio/sqlboiler/queries/qm"`, - `"github.com/lbryio/sqlboiler/strmangle"`, + `"github.com/pkg/errors"`, + `"github.com/vattle/sqlboiler/boil"`, + `"github.com/vattle/sqlboiler/queries"`, + `"github.com/vattle/sqlboiler/queries/qm"`, + `"github.com/vattle/sqlboiler/strmangle"`, }, } imp.Singleton = mapImports{ - "boil_queries": imports{ - standard: importList{ - `"fmt"`, - `"strings"`, - }, + "boil_queries": { thirdParty: importList{ - `"github.com/lbryio/lbry.go/v2/extras/errors"`, - `"github.com/lbryio/sqlboiler/boil"`, - `"github.com/lbryio/sqlboiler/queries"`, - `"github.com/lbryio/sqlboiler/queries/qm"`, - `"github.com/lbryio/sqlboiler/strmangle"`, + `"github.com/vattle/sqlboiler/boil"`, + `"github.com/vattle/sqlboiler/queries"`, + `"github.com/vattle/sqlboiler/queries/qm"`, }, }, "boil_types": { thirdParty: importList{ - `"github.com/lbryio/lbry.go/v2/extras/errors"`, - `"github.com/lbryio/sqlboiler/strmangle"`, + `"github.com/pkg/errors"`, + `"github.com/vattle/sqlboiler/strmangle"`, }, }, } @@ -208,9 +201,9 @@ func newImporter() importer { `"testing"`, }, thirdParty: importList{ - `"github.com/lbryio/sqlboiler/boil"`, - `"github.com/lbryio/sqlboiler/randomize"`, - `"github.com/lbryio/sqlboiler/strmangle"`, + `"github.com/vattle/sqlboiler/boil"`, + `"github.com/vattle/sqlboiler/randomize"`, + `"github.com/vattle/sqlboiler/strmangle"`, }, } @@ -228,9 +221,9 @@ func newImporter() importer { }, thirdParty: importList{ `"github.com/kat-co/vala"`, - `"github.com/lbryio/lbry.go/v2/extras/errors"`, - `"github.com/lbryio/sqlboiler/boil"`, + `"github.com/pkg/errors"`, `"github.com/spf13/viper"`, + `"github.com/vattle/sqlboiler/boil"`, }, }, "boil_queries_test": { @@ -243,7 +236,7 @@ func newImporter() importer { `"regexp"`, }, thirdParty: importList{ - `"github.com/lbryio/sqlboiler/boil"`, + `"github.com/vattle/sqlboiler/boil"`, }, }, "boil_suites_test": { @@ -266,11 +259,11 @@ func newImporter() importer { `"strings"`, }, thirdParty: importList{ - `"github.com/lbryio/lbry.go/v2/extras/errors"`, - `"github.com/lbryio/sqlboiler/bdb/drivers"`, - `"github.com/lbryio/sqlboiler/randomize"`, - `_ "github.com/lib/pq"`, + `"github.com/pkg/errors"`, `"github.com/spf13/viper"`, + `"github.com/vattle/sqlboiler/bdb/drivers"`, + `"github.com/vattle/sqlboiler/randomize"`, + `_ "github.com/lib/pq"`, }, }, "mysql": { @@ -285,11 +278,11 @@ func newImporter() importer { `"strings"`, }, thirdParty: importList{ - `_ "github.com/go-sql-driver/mysql"`, - `"github.com/lbryio/lbry.go/v2/extras/errors"`, - `"github.com/lbryio/sqlboiler/bdb/drivers"`, - `"github.com/lbryio/sqlboiler/randomize"`, + `"github.com/pkg/errors"`, `"github.com/spf13/viper"`, + `"github.com/vattle/sqlboiler/bdb/drivers"`, + `"github.com/vattle/sqlboiler/randomize"`, + `_ "github.com/go-sql-driver/mysql"`, }, }, "mssql": { @@ -302,11 +295,11 @@ func newImporter() importer { `"strings"`, }, thirdParty: importList{ - `_ "github.com/denisenkom/go-mssqldb"`, - `"github.com/lbryio/lbry.go/v2/extras/errors"`, - `"github.com/lbryio/sqlboiler/bdb/drivers"`, - `"github.com/lbryio/sqlboiler/randomize"`, + `"github.com/pkg/errors"`, `"github.com/spf13/viper"`, + `"github.com/vattle/sqlboiler/bdb/drivers"`, + `"github.com/vattle/sqlboiler/randomize"`, + `_ "github.com/denisenkom/go-mssqldb"`, }, }, } @@ -316,79 +309,79 @@ func newImporter() importer { // TranslateColumnType to see the type assignments. imp.BasedOnType = mapImports{ "null.Float32": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Float64": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Int": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Int8": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Int16": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Int32": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Int64": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Uint": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Uint8": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Uint16": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Uint32": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Uint64": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.String": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Bool": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Time": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.JSON": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "null.Bytes": { - thirdParty: importList{`"github.com/lbryio/lbry.go/v2/extras/null"`}, + thirdParty: importList{`"gopkg.in/nullbio/null.v6"`}, }, "time.Time": { standard: importList{`"time"`}, }, "types.JSON": { - thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`}, + thirdParty: importList{`"github.com/vattle/sqlboiler/types"`}, }, "types.BytesArray": { - thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`}, + thirdParty: importList{`"github.com/vattle/sqlboiler/types"`}, }, "types.Int64Array": { - thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`}, + thirdParty: importList{`"github.com/vattle/sqlboiler/types"`}, }, "types.Float64Array": { - thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`}, + thirdParty: importList{`"github.com/vattle/sqlboiler/types"`}, }, "types.BoolArray": { - thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`}, + thirdParty: importList{`"github.com/vattle/sqlboiler/types"`}, }, "types.StringArray": { - thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`}, + thirdParty: importList{`"github.com/vattle/sqlboiler/types"`}, }, "types.Hstore": { - thirdParty: importList{`"github.com/lbryio/sqlboiler/types"`}, + thirdParty: importList{`"github.com/vattle/sqlboiler/types"`}, }, } diff --git a/boilingcore/imports_test.go b/boilingcore/imports_test.go index d0043c0..6f2cde4 100644 --- a/boilingcore/imports_test.go +++ b/boilingcore/imports_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/pkg/errors" - "github.com/lbryio/sqlboiler/bdb" + "github.com/vattle/sqlboiler/bdb" ) func TestImportsSort(t *testing.T) { @@ -234,7 +234,7 @@ func TestCombineTypeImports(t *testing.T) { `"fmt"`, }, thirdParty: importList{ - `"github.com/lbryio/sqlboiler/boil"`, + `"github.com/vattle/sqlboiler/boil"`, }, } @@ -245,8 +245,8 @@ func TestCombineTypeImports(t *testing.T) { `"time"`, }, thirdParty: importList{ - `"github.com/lbryio/sqlboiler/boil"`, - `"github.com/lbryio/lbry.go/v2/extras/null"`, + `"github.com/vattle/sqlboiler/boil"`, + `"gopkg.in/nullbio/null.v6"`, }, } @@ -280,8 +280,8 @@ func TestCombineTypeImports(t *testing.T) { `"time"`, }, thirdParty: importList{ - `"github.com/lbryio/sqlboiler/boil"`, - `"github.com/lbryio/lbry.go/v2/extras/null"`, + `"github.com/vattle/sqlboiler/boil"`, + `"gopkg.in/nullbio/null.v6"`, }, } @@ -297,11 +297,11 @@ func TestCombineImports(t *testing.T) { a := imports{ standard: importList{"fmt"}, - thirdParty: importList{"github.com/lbryio/sqlboiler", "github.com/lbryio/lbry.go/v2/extras/null"}, + thirdParty: importList{"github.com/vattle/sqlboiler", "gopkg.in/nullbio/null.v6"}, } b := imports{ standard: importList{"os"}, - thirdParty: importList{"github.com/lbryio/sqlboiler"}, + thirdParty: importList{"github.com/vattle/sqlboiler"}, } c := combineImports(a, b) @@ -309,8 +309,8 @@ func TestCombineImports(t *testing.T) { if c.standard[0] != "fmt" && c.standard[1] != "os" { t.Errorf("Wanted: fmt, os got: %#v", c.standard) } - if c.thirdParty[0] != "github.com/lbryio/sqlboiler" && c.thirdParty[1] != "github.com/lbryio/lbry.go/v2/extras/null" { - t.Errorf("Wanted: github.com/lbryio/sqlboiler, github.com/lbryio/lbry.go/v2/extras/null got: %#v", c.thirdParty) + if c.thirdParty[0] != "github.com/vattle/sqlboiler" && c.thirdParty[1] != "gopkg.in/nullbio/null.v6" { + t.Errorf("Wanted: github.com/vattle/sqlboiler, gopkg.in/nullbio/null.v6 got: %#v", c.thirdParty) } } diff --git a/boilingcore/output.go b/boilingcore/output.go index 5c65634..64f28b5 100644 --- a/boilingcore/output.go +++ b/boilingcore/output.go @@ -14,7 +14,7 @@ import ( "github.com/pkg/errors" ) -var noEditDisclaimer = []byte(`// This file is generated by SQLBoiler (https://github.com/lbryio/sqlboiler) +var noEditDisclaimer = []byte(`// This file is generated by SQLBoiler (https://github.com/vattle/sqlboiler) // and is meant to be re-generated in place and/or deleted at any time. // DO NOT EDIT diff --git a/boilingcore/templates.go b/boilingcore/templates.go index 86c78ce..9c60739 100644 --- a/boilingcore/templates.go +++ b/boilingcore/templates.go @@ -8,10 +8,10 @@ import ( "strings" "text/template" - "github.com/lbryio/sqlboiler/bdb" - "github.com/lbryio/sqlboiler/queries" - "github.com/lbryio/sqlboiler/strmangle" "github.com/pkg/errors" + "github.com/vattle/sqlboiler/bdb" + "github.com/vattle/sqlboiler/queries" + "github.com/vattle/sqlboiler/strmangle" ) // templateData for sqlboiler templates diff --git a/boilingcore/text_helpers.go b/boilingcore/text_helpers.go index 0bce73f..e9577a7 100644 --- a/boilingcore/text_helpers.go +++ b/boilingcore/text_helpers.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" - "github.com/lbryio/sqlboiler/bdb" - "github.com/lbryio/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/bdb" + "github.com/vattle/sqlboiler/strmangle" ) // TxtToOne contains text that will be used by templates for a one-to-many or diff --git a/boilingcore/text_helpers_test.go b/boilingcore/text_helpers_test.go index 835ed0d..8beed50 100644 --- a/boilingcore/text_helpers_test.go +++ b/boilingcore/text_helpers_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/davecgh/go-spew/spew" - "github.com/lbryio/sqlboiler/bdb" - "github.com/lbryio/sqlboiler/bdb/drivers" + "github.com/vattle/sqlboiler/bdb" + "github.com/vattle/sqlboiler/bdb/drivers" ) func TestTxtsFromOne(t *testing.T) { diff --git a/main.go b/main.go index 8344e57..793055d 100644 --- a/main.go +++ b/main.go @@ -8,13 +8,13 @@ import ( "strings" "github.com/kat-co/vala" - "github.com/lbryio/sqlboiler/bdb/drivers" - "github.com/lbryio/sqlboiler/boilingcore" "github.com/spf13/cobra" "github.com/spf13/viper" + "github.com/vattle/sqlboiler/bdb/drivers" + "github.com/vattle/sqlboiler/boilingcore" ) -const sqlBoilerVersion = "2.4.0+lbry" +const sqlBoilerVersion = "2.3.0" var ( cmdState *boilingcore.State @@ -62,7 +62,7 @@ func main() { Use: "sqlboiler [flags] <driver>", Short: "SQL Boiler generates an ORM tailored to your database schema.", Long: "SQL Boiler generates a Go ORM from template files, tailored to your database schema.\n" + - `Complete documentation is available at http://github.com/lbryio/sqlboiler`, + `Complete documentation is available at http://github.com/vattle/sqlboiler`, Example: `sqlboiler postgres`, PreRunE: preRun, RunE: run, diff --git a/queries/eager_load.go b/queries/eager_load.go index 8992290..18abcc8 100644 --- a/queries/eager_load.go +++ b/queries/eager_load.go @@ -5,9 +5,9 @@ import ( "reflect" "strings" - "github.com/lbryio/sqlboiler/boil" - "github.com/lbryio/sqlboiler/strmangle" "github.com/pkg/errors" + "github.com/vattle/sqlboiler/boil" + "github.com/vattle/sqlboiler/strmangle" ) type loadRelationshipState struct { @@ -206,16 +206,9 @@ func (l loadRelationshipState) loadRelationshipsRecurse(depth int, obj reflect.V } bkind := kindStruct - if derefed := reflect.Indirect(loadedObject); derefed.Kind() != reflect.Struct { + if reflect.Indirect(loadedObject).Kind() != reflect.Struct { bkind = kindPtrSliceStruct - - // Convert away any helper slice types - // elemType is *elem (from []*elem or helperSliceType) - // sliceType is *[]*elem - elemType := derefed.Type().Elem() - sliceType := reflect.PtrTo(reflect.SliceOf(elemType)) - - loadedObject = loadedObject.Addr().Convert(sliceType) + loadedObject = loadedObject.Addr() } return l.loadRelationships(depth+1, loadedObject.Interface(), bkind) } @@ -248,9 +241,6 @@ func collectLoaded(key string, loadingFrom reflect.Value) (reflect.Value, bindKi if loadedType.Elem().Kind() == reflect.Struct { bkind = kindStruct loadedType = reflect.SliceOf(loadedType) - } else { - // Ensure that we get rid of all the helper "XSlice" types - loadedType = reflect.SliceOf(loadedType.Elem()) } collection := reflect.MakeSlice(loadedType, 0, 0) @@ -259,13 +249,9 @@ func collectLoaded(key string, loadingFrom reflect.Value) (reflect.Value, bindKi for { switch bkind { case kindStruct: - if !loadedObject.IsNil() { - collection = reflect.Append(collection, loadedObject) - } + collection = reflect.Append(collection, loadedObject) case kindPtrSliceStruct: - if !loadedObject.IsNil() { - collection = reflect.AppendSlice(collection, loadedObject) - } + collection = reflect.AppendSlice(collection, loadedObject) } i++ diff --git a/queries/eager_load_test.go b/queries/eager_load_test.go index c7b3cef..dc3f5f1 100644 --- a/queries/eager_load_test.go +++ b/queries/eager_load_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/lbryio/sqlboiler/boil" + "github.com/vattle/sqlboiler/boil" ) var testEagerCounters struct { diff --git a/queries/helpers.go b/queries/helpers.go index b953a67..59ad8a3 100644 --- a/queries/helpers.go +++ b/queries/helpers.go @@ -4,7 +4,7 @@ import ( "fmt" "reflect" - "github.com/lbryio/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/strmangle" ) // NonZeroDefaultSet returns the fields included in the diff --git a/queries/helpers_test.go b/queries/helpers_test.go index fd093e3..d37fcd9 100644 --- a/queries/helpers_test.go +++ b/queries/helpers_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - null "github.com/lbryio/lbry.go/v2/extras/null" + null "gopkg.in/nullbio/null.v6" ) type testObj struct { diff --git a/queries/qm/query_mods.go b/queries/qm/query_mods.go index 42e881e..81ae3a0 100644 --- a/queries/qm/query_mods.go +++ b/queries/qm/query_mods.go @@ -1,6 +1,6 @@ package qm -import "github.com/lbryio/sqlboiler/queries" +import "github.com/vattle/sqlboiler/queries" // QueryMod to modify the query object type QueryMod func(q *queries.Query) @@ -8,9 +8,7 @@ type QueryMod func(q *queries.Query) // Apply the query mods to the Query object func Apply(q *queries.Query, mods ...QueryMod) { for _, mod := range mods { - if mod != nil { - mod(q) - } + mod(q) } } @@ -125,12 +123,6 @@ func From(from string) QueryMod { } } -func ForceIndex(index string) QueryMod { - return func(q *queries.Query) { - queries.SetForceIndex(q, index) - } -} - // Limit the number of returned rows func Limit(limit int) QueryMod { return func(q *queries.Query) { diff --git a/queries/query.go b/queries/query.go index e3a6470..8c2abdb 100644 --- a/queries/query.go +++ b/queries/query.go @@ -4,8 +4,7 @@ import ( "database/sql" "fmt" - "github.com/lbryio/lbry.go/v2/extras/errors" - "github.com/lbryio/sqlboiler/boil" + "github.com/vattle/sqlboiler/boil" ) // joinKind is the type of join @@ -30,7 +29,6 @@ type Query struct { selectCols []string count bool from []string - forceindex string joins []join where []where in []in @@ -138,7 +136,7 @@ func (q *Query) Query() (*sql.Rows, error) { func (q *Query) ExecP() sql.Result { res, err := q.Exec() if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return res @@ -149,7 +147,7 @@ func (q *Query) ExecP() sql.Result { func (q *Query) QueryP() *sql.Rows { rows, err := q.Query() if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return rows @@ -264,11 +262,6 @@ func SetLastWhereAsOr(q *Query) { q.where[len(q.where)-1].orSeparator = true } -// SetForceIndex sets the index to be used by the query -func SetForceIndex(q *Query, index string){ - q.forceindex = index -} - // SetLastInAsOr sets the or separator for the tail "IN" in the slice func SetLastInAsOr(q *Query) { if len(q.in) == 0 { diff --git a/queries/query_builders.go b/queries/query_builders.go index e682877..2188044 100644 --- a/queries/query_builders.go +++ b/queries/query_builders.go @@ -7,7 +7,7 @@ import ( "sort" "strings" - "github.com/lbryio/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/strmangle" ) var ( @@ -76,13 +76,7 @@ func buildSelectQuery(q *Query) (*bytes.Buffer, []interface{}) { buf.WriteByte(')') } - if len(q.forceindex) > 0 { - fmt.Fprintf(buf, " FROM %s FORCE INDEX (%s)", strings.Join(strmangle.IdentQuoteSlice(q.dialect.LQ, q.dialect.RQ, q.from), ", "),q.forceindex) - - }else{ - fmt.Fprintf(buf, " FROM %s", strings.Join(strmangle.IdentQuoteSlice(q.dialect.LQ, q.dialect.RQ, q.from), ", ")) - - } + fmt.Fprintf(buf, " FROM %s", strings.Join(strmangle.IdentQuoteSlice(q.dialect.LQ, q.dialect.RQ, q.from), ", ")) if len(q.joins) > 0 { argsLen := len(args) @@ -196,7 +190,7 @@ func buildUpdateQuery(q *Query) (*bytes.Buffer, []interface{}) { } // BuildUpsertQueryMySQL builds a SQL statement string using the upsertData provided. -func BuildUpsertQueryMySQL(dia Dialect, tableName string, update, whitelist []string, autoIncrementCol string) string { +func BuildUpsertQueryMySQL(dia Dialect, tableName string, update, whitelist []string) string { whitelist = strmangle.IdentQuoteSlice(dia.LQ, dia.RQ, whitelist) buf := strmangle.GetBuffer() @@ -226,11 +220,6 @@ func BuildUpsertQueryMySQL(dia Dialect, tableName string, update, whitelist []st strmangle.Placeholders(dia.IndexPlaceholders, len(whitelist), 1, 1), ) - // https://stackoverflow.com/questions/778534/mysql-on-duplicate-key-last-insert-id - if autoIncrementCol != "" { - buf.WriteString(autoIncrementCol + " = LAST_INSERT_ID(" + autoIncrementCol + "), ") - } - for i, v := range update { if i != 0 { buf.WriteByte(',') diff --git a/queries/reflect.go b/queries/reflect.go index 39eda23..9c55b33 100644 --- a/queries/reflect.go +++ b/queries/reflect.go @@ -7,9 +7,9 @@ import ( "strings" "sync" - "github.com/lbryio/sqlboiler/strmangle" - "github.com/pkg/errors" + "github.com/vattle/sqlboiler/boil" + "github.com/vattle/sqlboiler/strmangle" ) var ( @@ -41,7 +41,7 @@ const ( // It panics on error. See boil.Bind() documentation. func (q *Query) BindP(obj interface{}) { if err := q.Bind(obj); err != nil { - panic(errors.WithStack(err)) + panic(boil.WrapErr(err)) } } diff --git a/randomize/randomize.go b/randomize/randomize.go index 30592bf..59f7eff 100644 --- a/randomize/randomize.go +++ b/randomize/randomize.go @@ -14,12 +14,12 @@ import ( "sync/atomic" "time" - null "github.com/lbryio/lbry.go/v2/extras/null" + null "gopkg.in/nullbio/null.v6" "github.com/pkg/errors" "github.com/satori/go.uuid" - "github.com/lbryio/sqlboiler/strmangle" - "github.com/lbryio/sqlboiler/types" + "github.com/vattle/sqlboiler/strmangle" + "github.com/vattle/sqlboiler/types" ) var ( diff --git a/randomize/randomize_test.go b/randomize/randomize_test.go index 71afb55..6f117b7 100644 --- a/randomize/randomize_test.go +++ b/randomize/randomize_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - null "github.com/lbryio/lbry.go/v2/extras/null" + null "gopkg.in/nullbio/null.v6" ) func TestRandomizeStruct(t *testing.T) { diff --git a/templates/00_struct.tpl b/templates/00_struct.tpl index a2608fa..585feee 100644 --- a/templates/00_struct.tpl +++ b/templates/00_struct.tpl @@ -17,23 +17,6 @@ type {{$modelName}} struct { {{end -}} } -var {{$modelName}}Columns = struct { - {{range $column := .Table.Columns -}} - {{titleCase $column.Name}} string - {{end -}} -}{ - {{range $column := .Table.Columns -}} - {{titleCase $column.Name}}: "{{$column.Name}}", - {{end -}} -} - -// {{$modelName}}Filter allows you to filter on any columns by making them all pointers. -type {{$modelName}}Filter struct { - {{range $column := .Table.Columns -}} - {{titleCase $column.Name}} *{{$column.Type}} `{{generateTags $dot.Tags $column.Name}}boil:"{{$column.Name}}" json:"{{$column.Name}},omitempty" toml:"{{$column.Name}}" yaml:"{{$column.Name}},omitempty"` - {{end -}} -} - {{- if .Table.IsJoinTable -}} {{- else}} // {{$modelNameCamel}}R is where relationships are stored. diff --git a/templates/01_types.tpl b/templates/01_types.tpl index 5aac35f..a1a1ef0 100644 --- a/templates/01_types.tpl +++ b/templates/01_types.tpl @@ -10,7 +10,6 @@ var ( {{$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}}AutoIncrementColumn = "{{.Table.AutoIncrementColumn }}" ) type ( @@ -22,7 +21,7 @@ type ( {{$tableNameSingular}}Hook func(boil.Executor, *{{$tableNameSingular}}) error {{- end}} - {{$tableNameSingular}}Query struct { + {{$varNameSingular}}Query struct { *queries.Query } ) diff --git a/templates/02_hooks.tpl b/templates/02_hooks.tpl index d152978..9815639 100644 --- a/templates/02_hooks.tpl +++ b/templates/02_hooks.tpl @@ -16,7 +16,7 @@ var {{$varNameSingular}}AfterUpsertHooks []{{$tableNameSingular}}Hook func (o *{{$tableNameSingular}}) doBeforeInsertHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}BeforeInsertHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -27,7 +27,7 @@ func (o *{{$tableNameSingular}}) doBeforeInsertHooks(exec boil.Executor) (err er func (o *{{$tableNameSingular}}) doBeforeUpdateHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}BeforeUpdateHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -38,7 +38,7 @@ func (o *{{$tableNameSingular}}) doBeforeUpdateHooks(exec boil.Executor) (err er func (o *{{$tableNameSingular}}) doBeforeDeleteHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}BeforeDeleteHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -49,7 +49,7 @@ func (o *{{$tableNameSingular}}) doBeforeDeleteHooks(exec boil.Executor) (err er func (o *{{$tableNameSingular}}) doBeforeUpsertHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}BeforeUpsertHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -60,7 +60,7 @@ func (o *{{$tableNameSingular}}) doBeforeUpsertHooks(exec boil.Executor) (err er func (o *{{$tableNameSingular}}) doAfterInsertHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}AfterInsertHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -71,7 +71,7 @@ func (o *{{$tableNameSingular}}) doAfterInsertHooks(exec boil.Executor) (err err func (o *{{$tableNameSingular}}) doAfterSelectHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}AfterSelectHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -82,7 +82,7 @@ func (o *{{$tableNameSingular}}) doAfterSelectHooks(exec boil.Executor) (err err func (o *{{$tableNameSingular}}) doAfterUpdateHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}AfterUpdateHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -93,7 +93,7 @@ func (o *{{$tableNameSingular}}) doAfterUpdateHooks(exec boil.Executor) (err err func (o *{{$tableNameSingular}}) doAfterDeleteHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}AfterDeleteHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } @@ -104,7 +104,7 @@ func (o *{{$tableNameSingular}}) doAfterDeleteHooks(exec boil.Executor) (err err func (o *{{$tableNameSingular}}) doAfterUpsertHooks(exec boil.Executor) (err error) { for _, hook := range {{$varNameSingular}}AfterUpsertHooks { if err := hook(exec, o); err != nil { - return errors.Err(err) + return err } } diff --git a/templates/03_finishers.tpl b/templates/03_finishers.tpl index 473bddd..0cc7e78 100644 --- a/templates/03_finishers.tpl +++ b/templates/03_finishers.tpl @@ -1,27 +1,27 @@ {{- $tableNameSingular := .Table.Name | singular | titleCase -}} {{- $varNameSingular := .Table.Name | singular | camelCase -}} -// OneP returns a single {{$tableNameSingular}} record from the query, and panics on error. -func (q {{$tableNameSingular}}Query) OneP() (*{{$tableNameSingular}}) { +// OneP returns a single {{$varNameSingular}} record from the query, and panics on error. +func (q {{$varNameSingular}}Query) OneP() (*{{$tableNameSingular}}) { o, err := q.One() if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return o } -// One returns a single {{$tableNameSingular}} record from the query. -func (q {{$tableNameSingular}}Query) One() (*{{$tableNameSingular}}, error) { +// One returns a single {{$varNameSingular}} record from the query. +func (q {{$varNameSingular}}Query) One() (*{{$tableNameSingular}}, error) { o := &{{$tableNameSingular}}{} queries.SetLimit(q.Query, 1) err := q.Bind(o) if err != nil { - if errors.Is(err, sql.ErrNoRows) { - return nil, nil + if errors.Cause(err) == sql.ErrNoRows { + return nil, sql.ErrNoRows } - return nil, errors.Prefix("{{.PkgName}}: failed to execute a one query for {{.Table.Name}}", err) + return nil, errors.Wrap(err, "{{.PkgName}}: failed to execute a one query for {{.Table.Name}}") } {{if not .NoHooks -}} @@ -34,22 +34,22 @@ func (q {{$tableNameSingular}}Query) One() (*{{$tableNameSingular}}, error) { } // AllP returns all {{$tableNameSingular}} records from the query, and panics on error. -func (q {{$tableNameSingular}}Query) AllP() {{$tableNameSingular}}Slice { +func (q {{$varNameSingular}}Query) AllP() {{$tableNameSingular}}Slice { o, err := q.All() if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return o } // All returns all {{$tableNameSingular}} records from the query. -func (q {{$tableNameSingular}}Query) All() ({{$tableNameSingular}}Slice, error) { +func (q {{$varNameSingular}}Query) All() ({{$tableNameSingular}}Slice, error) { var o []*{{$tableNameSingular}} err := q.Bind(&o) if err != nil { - return nil, errors.Prefix("{{.PkgName}}: failed to assign all query results to {{$tableNameSingular}} slice", err) + return nil, errors.Wrap(err, "{{.PkgName}}: failed to assign all query results to {{$tableNameSingular}} slice") } {{if not .NoHooks -}} @@ -66,17 +66,17 @@ func (q {{$tableNameSingular}}Query) All() ({{$tableNameSingular}}Slice, error) } // CountP returns the count of all {{$tableNameSingular}} records in the query, and panics on error. -func (q {{$tableNameSingular}}Query) CountP() int64 { +func (q {{$varNameSingular}}Query) CountP() int64 { c, err := q.Count() if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return c } // Count returns the count of all {{$tableNameSingular}} records in the query. -func (q {{$tableNameSingular}}Query) Count() (int64, error) { +func (q {{$varNameSingular}}Query) Count() (int64, error) { var count int64 queries.SetSelect(q.Query, nil) @@ -84,33 +84,32 @@ func (q {{$tableNameSingular}}Query) Count() (int64, error) { err := q.Query.QueryRow().Scan(&count) if err != nil { - return 0, errors.Prefix("{{.PkgName}}: failed to count {{.Table.Name}} rows", err) + return 0, errors.Wrap(err, "{{.PkgName}}: failed to count {{.Table.Name}} rows") } return count, nil } // Exists checks if the row exists in the table, and panics on error. -func (q {{$tableNameSingular}}Query) ExistsP() bool { +func (q {{$varNameSingular}}Query) ExistsP() bool { e, err := q.Exists() if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return e } // Exists checks if the row exists in the table. -func (q {{$tableNameSingular}}Query) Exists() (bool, error) { +func (q {{$varNameSingular}}Query) Exists() (bool, error) { var count int64 queries.SetCount(q.Query) - queries.SetSelect(q.Query, []string{}) queries.SetLimit(q.Query, 1) err := q.Query.QueryRow().Scan(&count) if err != nil { - return false, errors.Prefix("{{.PkgName}}: failed to check if {{.Table.Name}} exists", err) + return false, errors.Wrap(err, "{{.PkgName}}: failed to check if {{.Table.Name}} exists") } return count > 0, nil diff --git a/templates/04_relationship_to_one.tpl b/templates/04_relationship_to_one.tpl index 9bc8c5f..05c75c9 100644 --- a/templates/04_relationship_to_one.tpl +++ b/templates/04_relationship_to_one.tpl @@ -3,14 +3,14 @@ {{- $dot := . -}} {{- range .Table.FKeys -}} {{- $txt := txtsFromFKey $dot.Tables $dot.Table . -}} - {{- $tableNameSingular := .ForeignTable | singular | titleCase}} + {{- $varNameSingular := .ForeignTable | singular | camelCase}} // {{$txt.Function.Name}}G pointed to by the foreign key. -func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query { +func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query { return o.{{$txt.Function.Name}}(boil.GetDB(), mods...) } // {{$txt.Function.Name}} pointed to by the foreign key. -func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$tableNameSingular}}Query) { +func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$varNameSingular}}Query) { queryMods := []qm.QueryMod{ qm.Where("{{$txt.ForeignTable.ColumnName}}=?", o.{{$txt.LocalTable.ColumnNameGo}}), } diff --git a/templates/05_relationship_one_to_one.tpl b/templates/05_relationship_one_to_one.tpl index 1dcd2ee..e74279c 100644 --- a/templates/05_relationship_one_to_one.tpl +++ b/templates/05_relationship_one_to_one.tpl @@ -3,14 +3,14 @@ {{- $dot := . -}} {{- range .Table.ToOneRelationships -}} {{- $txt := txtsFromOneToOne $dot.Tables $dot.Table . -}} - {{- $tableNameSingular := .ForeignTable | singular | titleCase}} + {{- $varNameSingular := .ForeignTable | singular | camelCase}} // {{$txt.Function.Name}}G pointed to by the foreign key. -func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query { +func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query { return o.{{$txt.Function.Name}}(boil.GetDB(), mods...) } // {{$txt.Function.Name}} pointed to by the foreign key. -func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$tableNameSingular}}Query) { +func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) ({{$varNameSingular}}Query) { queryMods := []qm.QueryMod{ qm.Where("{{$txt.ForeignTable.ColumnName}}=?", o.{{$txt.LocalTable.ColumnNameGo}}), } diff --git a/templates/06_relationship_to_many.tpl b/templates/06_relationship_to_many.tpl index 0e6e634..c108eeb 100644 --- a/templates/06_relationship_to_many.tpl +++ b/templates/06_relationship_to_many.tpl @@ -3,20 +3,20 @@ {{- $dot := . -}} {{- $table := .Table -}} {{- range .Table.ToManyRelationships -}} - {{- $tableNameSingular := .ForeignTable | singular | titleCase -}} + {{- $varNameSingular := .ForeignTable | singular | camelCase -}} {{- $txt := txtsFromToMany $dot.Tables $table . -}} {{- $schemaForeignTable := .ForeignTable | $dot.SchemaTable}} // {{$txt.Function.Name}}G retrieves all the {{.ForeignTable | singular}}'s {{$txt.ForeignTable.NameHumanReadable}} {{- if not (eq $txt.Function.Name $txt.ForeignTable.NamePluralGo)}} via {{.ForeignColumn}} column{{- end}}. -func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query { +func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query { return o.{{$txt.Function.Name}}(boil.GetDB(), mods...) } // {{$txt.Function.Name}} retrieves all the {{.ForeignTable | singular}}'s {{$txt.ForeignTable.NameHumanReadable}} with an executor {{- if not (eq $txt.Function.Name $txt.ForeignTable.NamePluralGo)}} via {{.ForeignColumn}} column{{- end}}. -func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) {{$tableNameSingular}}Query { +func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, mods ...qm.QueryMod) {{$varNameSingular}}Query { queryMods := []qm.QueryMod{ - qm.Select("{{$schemaForeignTable}}.*"), + qm.Select("{{id 0 | $dot.Quotes}}.*"), } if len(mods) != 0 { @@ -25,18 +25,17 @@ func (o *{{$txt.LocalTable.NameGo}}) {{$txt.Function.Name}}(exec boil.Executor, {{if .ToJoinTable -}} queryMods = append(queryMods, - {{$schemaJoinTable := .JoinTable | $.SchemaTable -}} - qm.InnerJoin("{{$schemaJoinTable}} on {{$schemaForeignTable}}.{{.ForeignColumn | $dot.Quotes}} = {{$schemaJoinTable}}.{{.JoinForeignColumn | $dot.Quotes}}"), - qm.Where("{{$schemaJoinTable}}.{{.JoinLocalColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}), + qm.InnerJoin("{{.JoinTable | $dot.SchemaTable}} as {{id 1 | $dot.Quotes}} on {{id 0 | $dot.Quotes}}.{{.ForeignColumn | $dot.Quotes}} = {{id 1 | $dot.Quotes}}.{{.JoinForeignColumn | $dot.Quotes}}"), + qm.Where("{{id 1 | $dot.Quotes}}.{{.JoinLocalColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}), ) {{else -}} queryMods = append(queryMods, - qm.Where("{{$schemaForeignTable}}.{{.ForeignColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}), + qm.Where("{{id 0 | $dot.Quotes}}.{{.ForeignColumn | $dot.Quotes}}=?", o.{{$txt.LocalTable.ColumnNameGo}}), ) {{end}} query := {{$txt.ForeignTable.NamePluralGo}}(exec, queryMods...) - queries.SetFrom(query.Query, "{{$schemaForeignTable}}") + queries.SetFrom(query.Query, "{{$schemaForeignTable}} as {{id 0 | $dot.Quotes}}") return query } diff --git a/templates/07_relationship_to_one_eager.tpl b/templates/07_relationship_to_one_eager.tpl index f6bba5b..dd1481a 100644 --- a/templates/07_relationship_to_one_eager.tpl +++ b/templates/07_relationship_to_one_eager.tpl @@ -4,7 +4,7 @@ {{- range .Table.FKeys -}} {{- $txt := txtsFromFKey $dot.Tables $dot.Table . -}} {{- $varNameSingular := $dot.Table.Name | singular | camelCase -}} - {{- $arg := printf "maybe%s" $txt.LocalTable.NameGo}} + {{- $arg := printf "maybe%s" $txt.LocalTable.NameGo -}} // Load{{$txt.Function.Name}} allows an eager lookup of values, cached into the // loaded structs of the objects. func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singular bool, {{$arg}} interface{}) error { @@ -45,20 +45,20 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula results, err := e.Query(query, args...) if err != nil { - return errors.Prefix("failed to eager load {{$txt.ForeignTable.NameGo}}", err) + return errors.Wrap(err, "failed to eager load {{$txt.ForeignTable.NameGo}}") } defer results.Close() var resultSlice []*{{$txt.ForeignTable.NameGo}} if err = queries.Bind(results, &resultSlice); err != nil { - return errors.Prefix("failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}", err) + return errors.Wrap(err, "failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}") } {{if not $dot.NoHooks -}} if len({{$varNameSingular}}AfterSelectHooks) != 0 { for _, obj := range resultSlice { if err := obj.doAfterSelectHooks(e); err != nil { - return errors.Err(err) + return err } } } diff --git a/templates/08_relationship_one_to_one_eager.tpl b/templates/08_relationship_one_to_one_eager.tpl index cd587fc..37d1af0 100644 --- a/templates/08_relationship_one_to_one_eager.tpl +++ b/templates/08_relationship_one_to_one_eager.tpl @@ -45,20 +45,20 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula results, err := e.Query(query, args...) if err != nil { - return errors.Prefix("failed to eager load {{$txt.ForeignTable.NameGo}}", err) + return errors.Wrap(err, "failed to eager load {{$txt.ForeignTable.NameGo}}") } defer results.Close() var resultSlice []*{{$txt.ForeignTable.NameGo}} if err = queries.Bind(results, &resultSlice); err != nil { - return errors.Prefix("failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}", err) + return errors.Wrap(err, "failed to bind eager loaded slice {{$txt.ForeignTable.NameGo}}") } {{if not $dot.NoHooks -}} if len({{$varNameSingular}}AfterSelectHooks) != 0 { for _, obj := range resultSlice { if err := obj.doAfterSelectHooks(e); err != nil { - return errors.Err(err) + return err } } } diff --git a/templates/09_relationship_to_many_eager.tpl b/templates/09_relationship_to_many_eager.tpl index f3fd2c4..1603188 100644 --- a/templates/09_relationship_to_many_eager.tpl +++ b/templates/09_relationship_to_many_eager.tpl @@ -54,7 +54,7 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula results, err := e.Query(query, args...) if err != nil { - return errors.Prefix("failed to eager load {{.ForeignTable}}", err) + return errors.Wrap(err, "failed to eager load {{.ForeignTable}}") } defer results.Close() @@ -70,7 +70,7 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula err = results.Scan({{$foreignTable.Columns | columnNames | stringMap $dot.StringFuncs.titleCase | prefixStringSlice "&one." | join ", "}}, &localJoinCol) if err = results.Err(); err != nil { - return errors.Prefix("failed to plebian-bind eager loaded slice {{.ForeignTable}}", err) + return errors.Wrap(err, "failed to plebian-bind eager loaded slice {{.ForeignTable}}") } resultSlice = append(resultSlice, one) @@ -78,11 +78,11 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula } if err = results.Err(); err != nil { - return errors.Prefix("failed to plebian-bind eager loaded slice {{.ForeignTable}}", err) + return errors.Wrap(err, "failed to plebian-bind eager loaded slice {{.ForeignTable}}") } {{else -}} if err = queries.Bind(results, &resultSlice); err != nil { - return errors.Prefix("failed to bind eager loaded slice {{.ForeignTable}}", err) + return errors.Wrap(err, "failed to bind eager loaded slice {{.ForeignTable}}") } {{end}} @@ -90,7 +90,7 @@ func ({{$varNameSingular}}L) Load{{$txt.Function.Name}}(e boil.Executor, singula if len({{.ForeignTable | singular | camelCase}}AfterSelectHooks) != 0 { for _, obj := range resultSlice { if err := obj.doAfterSelectHooks(e); err != nil { - return errors.Err(err) + return err } } } diff --git a/templates/10_relationship_to_one_setops.tpl b/templates/10_relationship_to_one_setops.tpl index 200adc3..14f726e 100644 --- a/templates/10_relationship_to_one_setops.tpl +++ b/templates/10_relationship_to_one_setops.tpl @@ -20,7 +20,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}G(insert bool, rel // Panics on error. func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related *{{$txt.ForeignTable.NameGo}}) { if err := o.Set{{$txt.Function.Name}}(exec, insert, related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -30,7 +30,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Execut // Uses the global database handle and panics on error. func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}GP(insert bool, related *{{$txt.ForeignTable.NameGo}}) { if err := o.Set{{$txt.Function.Name}}(boil.GetDB(), insert, related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -41,7 +41,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo var err error if insert { if err = related.Insert(exec); err != nil { - return errors.Prefix("failed to insert into foreign table", err) + return errors.Wrap(err, "failed to insert into foreign table") } } @@ -58,7 +58,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo } if _, err = exec.Exec(updateQuery, values...); err != nil { - return errors.Prefix("failed to update local table", err) + return errors.Wrap(err, "failed to update local table") } o.{{$txt.Function.LocalAssignment}} = related.{{$txt.Function.ForeignAssignment}} @@ -110,7 +110,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}G(related *{{$t // Panics on error. func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Executor, related *{{$txt.ForeignTable.NameGo}}) { if err := o.Remove{{$txt.Function.Name}}(exec, related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -120,7 +120,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Exe // Uses the global database handle and panics on error. func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}GP(related *{{$txt.ForeignTable.NameGo}}) { if err := o.Remove{{$txt.Function.Name}}(boil.GetDB(), related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -133,7 +133,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec o.{{$txt.LocalTable.ColumnNameGo}}.Valid = false if err = o.Update(exec, "{{.Column}}"); err != nil { o.{{$txt.LocalTable.ColumnNameGo}}.Valid = true - return errors.Prefix("failed to update local table", err) + return errors.Wrap(err, "failed to update local table") } o.R.{{$txt.Function.Name}} = nil diff --git a/templates/11_relationship_one_to_one_setops.tpl b/templates/11_relationship_one_to_one_setops.tpl index 29ce0a1..826eec2 100644 --- a/templates/11_relationship_one_to_one_setops.tpl +++ b/templates/11_relationship_one_to_one_setops.tpl @@ -21,7 +21,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}G(insert bool, rel // Panics on error. func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related *{{$txt.ForeignTable.NameGo}}) { if err := o.Set{{$txt.Function.Name}}(exec, insert, related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -31,7 +31,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Execut // Uses the global database handle and panics on error. func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}GP(insert bool, related *{{$txt.ForeignTable.NameGo}}) { if err := o.Set{{$txt.Function.Name}}(boil.GetDB(), insert, related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -48,7 +48,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo {{- end}} if err = related.Insert(exec); err != nil { - return errors.Prefix("failed to insert into foreign table", err) + return errors.Wrap(err, "failed to insert into foreign table") } } else { updateQuery := fmt.Sprintf( @@ -64,7 +64,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo } if _, err = exec.Exec(updateQuery, values...); err != nil { - return errors.Prefix("failed to update foreign table", err) + return errors.Wrap(err, "failed to update foreign table") } related.{{$txt.Function.ForeignAssignment}} = o.{{$txt.Function.LocalAssignment}} @@ -107,7 +107,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}G(related *{{$t // Panics on error. func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Executor, related *{{$txt.ForeignTable.NameGo}}) { if err := o.Remove{{$txt.Function.Name}}(exec, related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -117,7 +117,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Exe // Uses the global database handle and panics on error. func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}GP(related *{{$txt.ForeignTable.NameGo}}) { if err := o.Remove{{$txt.Function.Name}}(boil.GetDB(), related); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -130,7 +130,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = false if err = related.Update(exec, "{{.ForeignColumn}}"); err != nil { related.{{$txt.ForeignTable.ColumnNameGo}}.Valid = true - return errors.Prefix("failed to update local table", err) + return errors.Wrap(err, "failed to update local table") } o.R.{{$txt.Function.Name}} = nil diff --git a/templates/12_relationship_to_many_setops.tpl b/templates/12_relationship_to_many_setops.tpl index e54c2fd..06159ee 100644 --- a/templates/12_relationship_to_many_setops.tpl +++ b/templates/12_relationship_to_many_setops.tpl @@ -24,7 +24,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}G(insert bool, rel // Panics on error. func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related ...*{{$txt.ForeignTable.NameGo}}) { if err := o.Add{{$txt.Function.Name}}(exec, insert, related...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -35,7 +35,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}P(exec boil.Execut // Uses the global database handle and panics on error. func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}GP(insert bool, related ...*{{$txt.ForeignTable.NameGo}}) { if err := o.Add{{$txt.Function.Name}}(boil.GetDB(), insert, related...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -55,7 +55,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}(exec boil.Executo {{end -}} if err = rel.Insert(exec); err != nil { - return errors.Prefix("failed to insert into foreign table", err) + return errors.Wrap(err, "failed to insert into foreign table") } }{{if not .ToJoinTable}} else { updateQuery := fmt.Sprintf( @@ -71,7 +71,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}(exec boil.Executo } if _, err = exec.Exec(updateQuery, values...); err != nil { - return errors.Prefix("failed to update foreign table", err) + return errors.Wrap(err, "failed to update foreign table") } rel.{{$txt.Function.ForeignAssignment}} = o.{{$txt.Function.LocalAssignment}} @@ -93,7 +93,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Add{{$txt.Function.Name}}(exec boil.Executo _, err = exec.Exec(query, values...) if err != nil { - return errors.Prefix("failed to insert into join table", err) + return errors.Wrap(err, "failed to insert into join table") } } {{end -}} @@ -152,7 +152,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}G(insert bool, rel // Panics on error. func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Executor, insert bool, related ...*{{$txt.ForeignTable.NameGo}}) { if err := o.Set{{$txt.Function.Name}}(exec, insert, related...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -165,7 +165,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}P(exec boil.Execut // Uses the global database handle and panics on error. func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}GP(insert bool, related ...*{{$txt.ForeignTable.NameGo}}) { if err := o.Set{{$txt.Function.Name}}(boil.GetDB(), insert, related...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -190,7 +190,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Set{{$txt.Function.Name}}(exec boil.Executo _, err := exec.Exec(query, values...) if err != nil { - return errors.Prefix("failed to remove relationships before set", err) + return errors.Wrap(err, "failed to remove relationships before set") } {{if .ToJoinTable -}} @@ -230,7 +230,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}G(related ...*{ // Panics on error. func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Executor, related ...*{{$txt.ForeignTable.NameGo}}) { if err := o.Remove{{$txt.Function.Name}}(exec, related...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -240,7 +240,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}P(exec boil.Exe // Uses the global database handle and panics on error. func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}GP(related ...*{{$txt.ForeignTable.NameGo}}) { if err := o.Remove{{$txt.Function.Name}}(boil.GetDB(), related...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -266,7 +266,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec _, err = exec.Exec(query, values...) if err != nil { - return errors.Prefix("failed to remove relationships before set", err) + return errors.Wrap(err, "failed to remove relationships before set") } {{else -}} for _, rel := range related { @@ -277,7 +277,7 @@ func (o *{{$txt.LocalTable.NameGo}}) Remove{{$txt.Function.Name}}(exec boil.Exec } {{end -}} if err = rel.Update(exec, "{{.ForeignColumn}}"); err != nil { - return errors.Err(err) + return err } } {{end -}} diff --git a/templates/13_all.tpl b/templates/13_all.tpl index c41f19c..42cf66a 100644 --- a/templates/13_all.tpl +++ b/templates/13_all.tpl @@ -1,12 +1,12 @@ {{- $tableNamePlural := .Table.Name | plural | titleCase -}} -{{- $tableNameSingular := .Table.Name | singular | titleCase}} +{{- $varNameSingular := .Table.Name | singular | camelCase}} // {{$tableNamePlural}}G retrieves all records. -func {{$tableNamePlural}}G(mods ...qm.QueryMod) {{$tableNameSingular}}Query { +func {{$tableNamePlural}}G(mods ...qm.QueryMod) {{$varNameSingular}}Query { return {{$tableNamePlural}}(boil.GetDB(), mods...) } // {{$tableNamePlural}} retrieves all the records using an executor. -func {{$tableNamePlural}}(exec boil.Executor, mods ...qm.QueryMod) {{$tableNameSingular}}Query { +func {{$tableNamePlural}}(exec boil.Executor, mods ...qm.QueryMod) {{$varNameSingular}}Query { mods = append(mods, qm.From("{{.Table.Name | .SchemaTable}}")) - return {{$tableNameSingular}}Query{NewQuery(exec, mods...)} + return {{$varNameSingular}}Query{NewQuery(exec, mods...)} } diff --git a/templates/14_find.tpl b/templates/14_find.tpl index f9a88c8..097f184 100644 --- a/templates/14_find.tpl +++ b/templates/14_find.tpl @@ -12,7 +12,7 @@ func Find{{$tableNameSingular}}G({{$pkArgs}}, selectCols ...string) (*{{$tableNa func Find{{$tableNameSingular}}GP({{$pkArgs}}, selectCols ...string) *{{$tableNameSingular}} { retobj, err := Find{{$tableNameSingular}}(boil.GetDB(), {{$pkNames | join ", "}}, selectCols...) if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return retobj @@ -35,10 +35,10 @@ func Find{{$tableNameSingular}}(exec boil.Executor, {{$pkArgs}}, selectCols ...s err := q.Bind({{$varNameSingular}}Obj) if err != nil { - if errors.Is(err, sql.ErrNoRows) { - return nil, nil + if errors.Cause(err) == sql.ErrNoRows { + return nil, sql.ErrNoRows } - return nil, errors.Prefix("{{.PkgName}}: unable to select from {{.Table.Name}}", err) + return nil, errors.Wrap(err, "{{.PkgName}}: unable to select from {{.Table.Name}}") } return {{$varNameSingular}}Obj, nil @@ -48,79 +48,8 @@ func Find{{$tableNameSingular}}(exec boil.Executor, {{$pkArgs}}, selectCols ...s func Find{{$tableNameSingular}}P(exec boil.Executor, {{$pkArgs}}, selectCols ...string) *{{$tableNameSingular}} { retobj, err := Find{{$tableNameSingular}}(exec, {{$pkNames | join ", "}}, selectCols...) if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return retobj } - -// FindOne{{$tableNameSingular}} retrieves a single record using filters. -func FindOne{{$tableNameSingular}}(exec boil.Executor, filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) { - obj := &{{$tableNameSingular}}{} - - err := {{$tableNameSingular}}NewQuery(exec). - Where(filters). - Limit(1). - Bind(obj) - - if err != nil { - if errors.Is(err, sql.ErrNoRows) { - return nil, nil - } - return nil, errors.Prefix("{{.PkgName}}: unable to select from {{.Table.Name}}", err) - } - - return obj, nil -} - -// FindOne{{$tableNameSingular}}G retrieves a single record using filters. -func FindOne{{$tableNameSingular}}G(filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) { - return FindOne{{$tableNameSingular}}(boil.GetDB(), filters) -} - -// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes a new record if one is not found. -func FindOne{{$tableNameSingular}}OrInit(exec boil.Executor, filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) { - {{$varNameSingular}}Obj, err := FindOne{{$tableNameSingular}}(exec, filters) - if err != nil { - return nil, err - } - - if {{$varNameSingular}}Obj == nil { - {{$varNameSingular}}Obj = &{{$tableNameSingular}}{} - objR := reflect.ValueOf({{$varNameSingular}}Obj).Elem() - r := reflect.ValueOf(filters) - for i := 0; i < r.NumField(); i++ { - f := r.Field(i) - if f.Elem().IsValid() { - objR.FieldByName(r.Type().Field(i).Name).Set(f.Elem()) - } - } - } - - return {{$varNameSingular}}Obj, nil -} - -// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes a new record if one is not found. -func FindOne{{$tableNameSingular}}OrInitG(filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) { - return FindOne{{$tableNameSingular}}OrInit(boil.GetDB(), filters) -} - -// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes and inserts a new record if one is not found. -func FindOne{{$tableNameSingular}}OrCreate(exec boil.Executor, filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) { - {{$varNameSingular}}Obj, err := FindOne{{$tableNameSingular}}OrInit(exec, filters) - if err != nil { - return nil, err - } - if {{$varNameSingular}}Obj.IsNew() { - err := {{$varNameSingular}}Obj.Insert(exec) - if err != nil { - return nil, err - } - } - return {{$varNameSingular}}Obj, nil -} - -// FindOne{{$tableNameSingular}}OrInit retrieves a single record using filters, or initializes and inserts a new record if one is not found. -func FindOne{{$tableNameSingular}}OrCreateG(filters {{$tableNameSingular}}Filter) (*{{$tableNameSingular}}, error) { - return FindOne{{$tableNameSingular}}OrCreate(boil.GetDB(), filters) -} diff --git a/templates/15_insert.tpl b/templates/15_insert.tpl index 20905ac..870e20d 100644 --- a/templates/15_insert.tpl +++ b/templates/15_insert.tpl @@ -10,7 +10,7 @@ func (o *{{$tableNameSingular}}) InsertG(whitelist ... string) error { // behavior description. func (o *{{$tableNameSingular}}) InsertGP(whitelist ... string) { if err := o.Insert(boil.GetDB(), whitelist...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -18,7 +18,7 @@ func (o *{{$tableNameSingular}}) InsertGP(whitelist ... string) { // for whitelist behavior description. func (o *{{$tableNameSingular}}) InsertP(exec boil.Executor, whitelist ... string) { if err := o.Insert(exec, whitelist...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -29,7 +29,7 @@ func (o *{{$tableNameSingular}}) InsertP(exec boil.Executor, whitelist ... strin // - All columns with a default, but non-zero are included (i.e. health = 75) func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string) error { if o == nil { - return errors.Err("{{.PkgName}}: no {{.Table.Name}} provided for insertion") + return errors.New("{{.PkgName}}: no {{.Table.Name}} provided for insertion") } var err error @@ -37,7 +37,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string {{if not .NoHooks -}} if err := o.doBeforeInsertHooks(exec); err != nil { - return errors.Err(err) + return err } {{- end}} @@ -59,11 +59,11 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string cache.valueMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, wl) if err != nil { - return errors.Err(err) + return err } cache.retMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, returnColumns) if err != nil { - return errors.Err(err) + return err } if len(wl) != 0 { cache.query = fmt.Sprintf("INSERT INTO {{$schemaTable}} ({{.LQ}}%s{{.RQ}}) %%sVALUES (%s)%%s", strings.Join(wl, "{{.RQ}},{{.LQ}}"), strmangle.Placeholders(dialect.IndexPlaceholders, len(wl), 1, 1)) @@ -110,7 +110,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string _, err = exec.Exec(cache.query, vals...) {{- end}} if err != nil { - return errors.Prefix("{{.PkgName}}: unable to insert into {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to insert into {{.Table.Name}}") } {{if $canLastInsertID -}} @@ -125,7 +125,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string {{if $canLastInsertID -}} lastID, err = result.LastInsertId() if err != nil { - return errors.Err(ErrSyncFail) + return ErrSyncFail } {{$colName := index .Table.PKey.Columns 0 -}} @@ -150,7 +150,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string err = exec.QueryRow(cache.retQuery, identifierCols...).Scan(queries.PtrsFromMapping(value, cache.retMapping)...) if err != nil { - return errors.Prefix("{{.PkgName}}: unable to populate default values for {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to populate default values for {{.Table.Name}}") } {{else}} if len(cache.retMapping) != 0 { @@ -160,7 +160,7 @@ func (o *{{$tableNameSingular}}) Insert(exec boil.Executor, whitelist ... string } if err != nil { - return errors.Prefix("{{.PkgName}}: unable to insert into {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to insert into {{.Table.Name}}") } {{end}} diff --git a/templates/16_update.tpl b/templates/16_update.tpl index a4a688c..50c7f49 100644 --- a/templates/16_update.tpl +++ b/templates/16_update.tpl @@ -12,7 +12,7 @@ func (o *{{$tableNameSingular}}) UpdateG(whitelist ...string) error { // Panics on error. See Update for whitelist behavior description. func (o *{{$tableNameSingular}}) UpdateGP(whitelist ...string) { if err := o.Update(boil.GetDB(), whitelist...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -21,7 +21,7 @@ func (o *{{$tableNameSingular}}) UpdateGP(whitelist ...string) { func (o *{{$tableNameSingular}}) UpdateP(exec boil.Executor, whitelist ... string) { err := o.Update(exec, whitelist...) if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -38,7 +38,7 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string var err error {{if not .NoHooks -}} if err = o.doBeforeUpdateHooks(exec); err != nil { - return errors.Err(err) + return err } {{end -}} @@ -56,11 +56,13 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string {{if eq .DriverName "mssql"}} wl = strmangle.SetComplement(wl, {{$varNameSingular}}ColumnsWithAuto) {{end}} + {{if not .NoAutoTimestamps}} if len(whitelist) == 0 { - wl = strmangle.SetComplement(wl, []string{"created_at","updated_at"}) + wl = strmangle.SetComplement(wl, []string{"created_at"}) } + {{end -}} if len(wl) == 0 { - return errors.Err("{{.PkgName}}: unable to update {{.Table.Name}}, could not build whitelist") + return errors.New("{{.PkgName}}: unable to update {{.Table.Name}}, could not build whitelist") } cache.query = fmt.Sprintf("UPDATE {{$schemaTable}} SET %s WHERE %s", @@ -69,7 +71,7 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string ) cache.valueMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, append(wl, {{$varNameSingular}}PrimaryKeyColumns...)) if err != nil { - return errors.Err(err) + return err } } @@ -82,7 +84,7 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string _, err = exec.Exec(cache.query, values...) if err != nil { - return errors.Prefix("{{.PkgName}}: unable to update {{.Table.Name}} row", err) + return errors.Wrap(err, "{{.PkgName}}: unable to update {{.Table.Name}} row") } if !cached { @@ -99,19 +101,19 @@ func (o *{{$tableNameSingular}}) Update(exec boil.Executor, whitelist ... string } // UpdateAllP updates all rows with matching column names, and panics on error. -func (q {{$tableNameSingular}}Query) UpdateAllP(cols M) { +func (q {{$varNameSingular}}Query) UpdateAllP(cols M) { if err := q.UpdateAll(cols); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // UpdateAll updates all rows with the specified column values. -func (q {{$tableNameSingular}}Query) UpdateAll(cols M) error { +func (q {{$varNameSingular}}Query) UpdateAll(cols M) error { queries.SetUpdate(q.Query, cols) _, err := q.Query.Exec() if err != nil { - return errors.Prefix("{{.PkgName}}: unable to update all for {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to update all for {{.Table.Name}}") } return nil @@ -125,14 +127,14 @@ func (o {{$tableNameSingular}}Slice) UpdateAllG(cols M) error { // UpdateAllGP updates all rows with the specified column values, and panics on error. func (o {{$tableNameSingular}}Slice) UpdateAllGP(cols M) { if err := o.UpdateAll(boil.GetDB(), cols); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // UpdateAllP updates all rows with the specified column values, and panics on error. func (o {{$tableNameSingular}}Slice) UpdateAllP(exec boil.Executor, cols M) { if err := o.UpdateAll(exec, cols); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -144,7 +146,7 @@ func (o {{$tableNameSingular}}Slice) UpdateAll(exec boil.Executor, cols M) error } if len(cols) == 0 { - return errors.Err("{{.PkgName}}: update all requires at least one column argument") + return errors.New("{{.PkgName}}: update all requires at least one column argument") } colNames := make([]string, len(cols)) @@ -174,7 +176,7 @@ func (o {{$tableNameSingular}}Slice) UpdateAll(exec boil.Executor, cols M) error _, err := exec.Exec(sql, args...) if err != nil { - return errors.Prefix("{{.PkgName}}: unable to update all in {{$varNameSingular}} slice", err) + return errors.Wrap(err, "{{.PkgName}}: unable to update all in {{$varNameSingular}} slice") } return nil diff --git a/templates/17_upsert.tpl b/templates/17_upsert.tpl index b713243..f3d51e7 100644 --- a/templates/17_upsert.tpl +++ b/templates/17_upsert.tpl @@ -9,7 +9,7 @@ func (o *{{$tableNameSingular}}) UpsertG({{if eq .DriverName "postgres"}}updateO // UpsertGP attempts an insert, and does an update or ignore on conflict. Panics on error. func (o *{{$tableNameSingular}}) UpsertGP({{if eq .DriverName "postgres"}}updateOnConflict bool, conflictColumns []string, {{end}}updateColumns []string, whitelist ...string) { if err := o.Upsert(boil.GetDB(), {{if eq .DriverName "postgres"}}updateOnConflict, conflictColumns, {{end}}updateColumns, whitelist...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -17,21 +17,21 @@ func (o *{{$tableNameSingular}}) UpsertGP({{if eq .DriverName "postgres"}}update // UpsertP panics on error. func (o *{{$tableNameSingular}}) UpsertP(exec boil.Executor, {{if eq .DriverName "postgres"}}updateOnConflict bool, conflictColumns []string, {{end}}updateColumns []string, whitelist ...string) { if err := o.Upsert(exec, {{if eq .DriverName "postgres"}}updateOnConflict, conflictColumns, {{end}}updateColumns, whitelist...); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // Upsert attempts an insert using an executor, and does an update or ignore on conflict. func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName "postgres"}}updateOnConflict bool, conflictColumns []string, {{end}}updateColumns []string, whitelist ...string) error { if o == nil { - return errors.Err("{{.PkgName}}: no {{.Table.Name}} provided for upsert") + return errors.New("{{.PkgName}}: no {{.Table.Name}} provided for upsert") } {{- template "timestamp_upsert_helper" . }} {{if not .NoHooks -}} if err := o.doBeforeUpsertHooks(exec); err != nil { - return errors.Err(err) + return err } {{- end}} @@ -87,7 +87,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName } } if len(insert) == 0 { - return errors.Err("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build insert column list") + return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build insert column list") } ret = strmangle.SetMerge(ret, {{$varNameSingular}}ColumnsWithAuto) @@ -104,7 +104,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName {{end -}} if len(update) == 0 { - return errors.Err("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list") + return errors.New("{{.PkgName}}: unable to upsert {{.Table.Name}}, could not build update column list") } {{if eq .DriverName "postgres"}} @@ -115,7 +115,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName } cache.query = queries.BuildUpsertQueryPostgres(dialect, "{{$schemaTable}}", updateOnConflict, ret, update, conflict, insert) {{else if eq .DriverName "mysql"}} - cache.query = queries.BuildUpsertQueryMySQL(dialect, "{{.Table.Name}}", update, insert, {{$varNameSingular}}AutoIncrementColumn) + cache.query = queries.BuildUpsertQueryMySQL(dialect, "{{.Table.Name}}", update, insert) cache.retQuery = fmt.Sprintf( "SELECT %s FROM {{.LQ}}{{.Table.Name}}{{.RQ}} WHERE {{whereClause .LQ .RQ 0 .Table.PKey.Columns}}", strings.Join(strmangle.IdentQuoteSlice(dialect.LQ, dialect.RQ, ret), ","), @@ -129,12 +129,12 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName cache.valueMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, {{if eq .DriverName "mssql"}}whitelist{{else}}insert{{end}}) if err != nil { - return errors.Err(err) + return err } if len(ret) != 0 { cache.retMapping, err = queries.BindMapping({{$varNameSingular}}Type, {{$varNameSingular}}Mapping, ret) if err != nil { - return errors.Err(err) + return err } } } @@ -159,7 +159,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName _, err = exec.Exec(cache.query, vals...) {{- end}} if err != nil { - return errors.Prefix("{{.PkgName}}: unable to upsert for {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to upsert for {{.Table.Name}}") } {{if $canLastInsertID -}} @@ -174,7 +174,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName {{if $canLastInsertID -}} lastID, err = result.LastInsertId() if err != nil { - return errors.Err(ErrSyncFail) + return ErrSyncFail } {{$colName := index .Table.PKey.Columns 0 -}} @@ -199,7 +199,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName err = exec.QueryRow(cache.retQuery, identifierCols...).Scan(returns...) if err != nil { - return errors.Prefix("{{.PkgName}}: unable to populate default values for {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to populate default values for {{.Table.Name}}") } {{- else}} if len(cache.retMapping) != 0 { @@ -211,7 +211,7 @@ func (o *{{$tableNameSingular}}) Upsert(exec boil.Executor, {{if eq .DriverName _, err = exec.Exec(cache.query, vals...) } if err != nil { - return errors.Prefix("{{.PkgName}}: unable to upsert {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to upsert {{.Table.Name}}") } {{- end}} diff --git a/templates/18_delete.tpl b/templates/18_delete.tpl index 1ab82a3..f2ddbb6 100644 --- a/templates/18_delete.tpl +++ b/templates/18_delete.tpl @@ -6,7 +6,7 @@ // Panics on error. func (o *{{$tableNameSingular}}) DeleteP(exec boil.Executor) { if err := o.Delete(exec); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -14,7 +14,7 @@ func (o *{{$tableNameSingular}}) DeleteP(exec boil.Executor) { // DeleteG will match against the primary key column to find the record to delete. func (o *{{$tableNameSingular}}) DeleteG() error { if o == nil { - return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} provided for deletion") + return errors.New("{{.PkgName}}: no {{$tableNameSingular}} provided for deletion") } return o.Delete(boil.GetDB()) @@ -25,7 +25,7 @@ func (o *{{$tableNameSingular}}) DeleteG() error { // Panics on error. func (o *{{$tableNameSingular}}) DeleteGP() { if err := o.DeleteG(); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -33,12 +33,12 @@ func (o *{{$tableNameSingular}}) DeleteGP() { // Delete will match against the primary key column to find the record to delete. func (o *{{$tableNameSingular}}) Delete(exec boil.Executor) error { if o == nil { - return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} provided for delete") + return errors.New("{{.PkgName}}: no {{$tableNameSingular}} provided for delete") } {{if not .NoHooks -}} if err := o.doBeforeDeleteHooks(exec); err != nil { - return errors.Err(err) + return err } {{- end}} @@ -52,12 +52,12 @@ func (o *{{$tableNameSingular}}) Delete(exec boil.Executor) error { _, err := exec.Exec(sql, args...) if err != nil { - return errors.Prefix("{{.PkgName}}: unable to delete from {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to delete from {{.Table.Name}}") } {{if not .NoHooks -}} if err := o.doAfterDeleteHooks(exec); err != nil { - return errors.Err(err) + return err } {{- end}} @@ -65,23 +65,23 @@ func (o *{{$tableNameSingular}}) Delete(exec boil.Executor) error { } // DeleteAllP deletes all rows, and panics on error. -func (q {{$tableNameSingular}}Query) DeleteAllP() { +func (q {{$varNameSingular}}Query) DeleteAllP() { if err := q.DeleteAll(); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // DeleteAll deletes all matching rows. -func (q {{$tableNameSingular}}Query) DeleteAll() error { +func (q {{$varNameSingular}}Query) DeleteAll() error { if q.Query == nil { - return errors.Err("{{.PkgName}}: no {{$tableNameSingular}}Query provided for delete all") + return errors.New("{{.PkgName}}: no {{$varNameSingular}}Query provided for delete all") } queries.SetDelete(q.Query) _, err := q.Query.Exec() if err != nil { - return errors.Prefix("{{.PkgName}}: unable to delete all from {{.Table.Name}}", err) + return errors.Wrap(err, "{{.PkgName}}: unable to delete all from {{.Table.Name}}") } return nil @@ -90,14 +90,14 @@ func (q {{$tableNameSingular}}Query) DeleteAll() error { // DeleteAllGP deletes all rows in the slice, and panics on error. func (o {{$tableNameSingular}}Slice) DeleteAllGP() { if err := o.DeleteAllG(); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // DeleteAllG deletes all rows in the slice. func (o {{$tableNameSingular}}Slice) DeleteAllG() error { if o == nil { - return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all") + return errors.New("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all") } return o.DeleteAll(boil.GetDB()) } @@ -105,14 +105,14 @@ func (o {{$tableNameSingular}}Slice) DeleteAllG() error { // DeleteAllP deletes all rows in the slice, using an executor, and panics on error. func (o {{$tableNameSingular}}Slice) DeleteAllP(exec boil.Executor) { if err := o.DeleteAll(exec); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // DeleteAll deletes all rows in the slice, using an executor. func (o {{$tableNameSingular}}Slice) DeleteAll(exec boil.Executor) error { if o == nil { - return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all") + return errors.New("{{.PkgName}}: no {{$tableNameSingular}} slice provided for delete all") } if len(o) == 0 { @@ -123,7 +123,7 @@ func (o {{$tableNameSingular}}Slice) DeleteAll(exec boil.Executor) error { if len({{$varNameSingular}}BeforeDeleteHooks) != 0 { for _, obj := range o { if err := obj.doBeforeDeleteHooks(exec); err != nil { - return errors.Err(err) + return err } } } @@ -145,14 +145,14 @@ func (o {{$tableNameSingular}}Slice) DeleteAll(exec boil.Executor) error { _, err := exec.Exec(sql, args...) if err != nil { - return errors.Prefix("{{.PkgName}}: unable to delete all from {{$varNameSingular}} slice", err) + return errors.Wrap(err, "{{.PkgName}}: unable to delete all from {{$varNameSingular}} slice") } {{if not .NoHooks -}} if len({{$varNameSingular}}AfterDeleteHooks) != 0 { for _, obj := range o { if err := obj.doAfterDeleteHooks(exec); err != nil { - return errors.Err(err) + return err } } } diff --git a/templates/19_reload.tpl b/templates/19_reload.tpl index c7c5273..b1201b8 100644 --- a/templates/19_reload.tpl +++ b/templates/19_reload.tpl @@ -5,21 +5,21 @@ // ReloadGP refetches the object from the database and panics on error. func (o *{{$tableNameSingular}}) ReloadGP() { if err := o.ReloadG(); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // ReloadP refetches the object from the database with an executor. Panics on error. func (o *{{$tableNameSingular}}) ReloadP(exec boil.Executor) { if err := o.Reload(exec); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } // ReloadG refetches the object from the database using the primary keys. func (o *{{$tableNameSingular}}) ReloadG() error { if o == nil { - return errors.Err("{{.PkgName}}: no {{$tableNameSingular}} provided for reload") + return errors.New("{{.PkgName}}: no {{$tableNameSingular}} provided for reload") } return o.Reload(boil.GetDB()) @@ -30,7 +30,7 @@ func (o *{{$tableNameSingular}}) ReloadG() error { func (o *{{$tableNameSingular}}) Reload(exec boil.Executor) error { ret, err := Find{{$tableNameSingular}}(exec, {{.Table.PKey.Columns | stringMap .StringFuncs.titleCase | prefixStringSlice "o." | join ", "}}) if err != nil { - return errors.Err(err) + return err } *o = *ret @@ -42,7 +42,7 @@ func (o *{{$tableNameSingular}}) Reload(exec boil.Executor) error { // Panics on error. func (o *{{$tableNameSingular}}Slice) ReloadAllGP() { if err := o.ReloadAllG(); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -51,7 +51,7 @@ func (o *{{$tableNameSingular}}Slice) ReloadAllGP() { // Panics on error. func (o *{{$tableNameSingular}}Slice) ReloadAllP(exec boil.Executor) { if err := o.ReloadAll(exec); err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } } @@ -59,7 +59,7 @@ func (o *{{$tableNameSingular}}Slice) ReloadAllP(exec boil.Executor) { // and overwrites the original object slice with the newly updated slice. func (o *{{$tableNameSingular}}Slice) ReloadAllG() error { if o == nil { - return errors.Err("{{.PkgName}}: empty {{$tableNameSingular}}Slice provided for reload all") + return errors.New("{{.PkgName}}: empty {{$tableNameSingular}}Slice provided for reload all") } return o.ReloadAll(boil.GetDB()) @@ -86,7 +86,7 @@ func (o *{{$tableNameSingular}}Slice) ReloadAll(exec boil.Executor) error { err := q.Bind(&{{$varNamePlural}}) if err != nil { - return errors.Prefix("{{.PkgName}}: unable to reload all in {{$tableNameSingular}}Slice", err) + return errors.Wrap(err, "{{.PkgName}}: unable to reload all in {{$tableNameSingular}}Slice") } *o = {{$varNamePlural}} diff --git a/templates/20_exists.tpl b/templates/20_exists.tpl index 2a36c23..22a67a0 100644 --- a/templates/20_exists.tpl +++ b/templates/20_exists.tpl @@ -1,5 +1,4 @@ {{- $tableNameSingular := .Table.Name | singular | titleCase -}} -{{- $varNameSingular := .Table.Name | singular | camelCase -}} {{- $colDefs := sqlColDefinitions .Table.Columns .Table.PKey.Columns -}} {{- $pkNames := $colDefs.Names | stringMap .StringFuncs.camelCase | stringMap .StringFuncs.replaceReserved -}} {{- $pkArgs := joinSlices " " $pkNames $colDefs.Types | join ", " -}} @@ -22,7 +21,7 @@ func {{$tableNameSingular}}Exists(exec boil.Executor, {{$pkArgs}}) (bool, error) err := row.Scan(&exists) if err != nil { - return false, errors.Prefix("{{.PkgName}}: unable to check if {{.Table.Name}} exists", err) + return false, errors.Wrap(err, "{{.PkgName}}: unable to check if {{.Table.Name}} exists") } return exists, nil @@ -37,7 +36,7 @@ func {{$tableNameSingular}}ExistsG({{$pkArgs}}) (bool, error) { func {{$tableNameSingular}}ExistsGP({{$pkArgs}}) bool { e, err := {{$tableNameSingular}}Exists(boil.GetDB(), {{$pkNames | join ", "}}) if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return e @@ -47,43 +46,8 @@ func {{$tableNameSingular}}ExistsGP({{$pkArgs}}) bool { func {{$tableNameSingular}}ExistsP(exec boil.Executor, {{$pkArgs}}) bool { e, err := {{$tableNameSingular}}Exists(exec, {{$pkNames | join ", "}}) if err != nil { - panic(errors.Err(err)) + panic(boil.WrapErr(err)) } return e } - -// IsNew() checks if record exists in db (aka if its primary key is set). -func (o *{{$tableNameSingular}}) IsNew() bool { - r := reflect.ValueOf(o).Elem() - for i := 0; i < r.NumField(); i++ { - column := r.Type().Field(i).Tag.Get("boil") - for _, pkColumn := range {{$varNameSingular}}PrimaryKeyColumns { - if column == pkColumn { - field := r.Field(i) - if field.Interface() != reflect.Zero(field.Type()).Interface() { - return false - } - } - } - } - return true -} - -// Save() inserts the record if it does not exist, or updates it if it does. -func (o *{{$tableNameSingular}}) Save(exec boil.Executor, whitelist ...string) error { - if o.IsNew() { - return o.Insert(exec, whitelist...) - } else { - return o.Update(exec, whitelist...) - } -} - -// SaveG() inserts the record if it does not exist, or updates it if it does. -func (o *{{$tableNameSingular}}) SaveG(whitelist ...string) error { - if o.IsNew() { - return o.InsertG(whitelist...) - } else { - return o.UpdateG(whitelist...) - } -} diff --git a/templates/22_query.tpl b/templates/22_query.tpl deleted file mode 100644 index 2dcf973..0000000 --- a/templates/22_query.tpl +++ /dev/null @@ -1,33 +0,0 @@ -{{- $tableNameSingular := .Table.Name | singular | titleCase -}} - -// {{$tableNameSingular}}NewQuery filters query results -func {{$tableNameSingular}}NewQuery(exec boil.Executor) *{{$tableNameSingular}}Query { - return &{{$tableNameSingular}}Query{NewQuery(exec, qm.Select("*"), qm.From("{{.Table.Name | .SchemaTable}}"))} -} - -// {{$tableNameSingular}}NewQuery filters query results -func {{$tableNameSingular}}NewQueryG() *{{$tableNameSingular}}Query { - return {{$tableNameSingular}}NewQuery(boil.GetDB()) -} - -// Where filters query results -func (q *{{$tableNameSingular}}Query) Where(filters {{$tableNameSingular}}Filter) *{{$tableNameSingular}}Query { - r := reflect.ValueOf(filters) - for i := 0; i < r.NumField(); i++ { - f := r.Field(i) - if f.Elem().IsValid() { - if nullable, ok := f.Elem().Interface().(null.Nullable); ok && nullable.IsNull() { - queries.AppendWhere(q.Query, r.Type().Field(i).Tag.Get("boil")+" IS NULL") - } else { - queries.AppendWhere(q.Query, r.Type().Field(i).Tag.Get("boil")+" = ?", f.Elem().Interface()) - } - } - } - return q -} - -// Limit limits query results -func (q *{{$tableNameSingular}}Query) Limit(limit int) *{{$tableNameSingular}}Query { - queries.SetLimit(q.Query, limit) - return q -} \ No newline at end of file diff --git a/templates/23_merge.tpl b/templates/23_merge.tpl deleted file mode 100644 index 16a7b58..0000000 --- a/templates/23_merge.tpl +++ /dev/null @@ -1,107 +0,0 @@ -{{- $tableNamePlural := .Table.Name | plural | titleCase -}} -{{- $tableNameSingular := .Table.Name | singular | titleCase -}} -{{- if .Table.IsJoinTable -}} -{{- else -}} - {{- $dot := . }} -// Merge combines two {{$tableNamePlural}} into one. The primary record will be kept, and the secondary will be deleted. -func Merge{{$tableNamePlural}}(exec boil.Executor, primaryID uint64, secondaryID uint64) (err error) { - tx, ok := exec.(boil.Transactor) - if !ok { - txdb, ok := exec.(boil.Beginner) - if !ok { - return errors.Err("database does not support transactions") - } - - tx, err = txdb.Begin() - if err != nil { - return errors.Err(err) - } - - defer func() { - if p := recover(); p != nil { - tx.Rollback() - panic(p) // Rollback, then propagate panic - } else if err != nil { - tx.Rollback() - } else { - err = tx.Commit() - } - }() - } - - primary, err := Find{{$tableNameSingular}}(tx, primaryID) - if err != nil { - return errors.Err(err) - } else if primary == nil { - return errors.Err("primary {{$tableNameSingular}} not found") - } - - secondary, err := Find{{$tableNameSingular}}(tx, secondaryID) - if err != nil { - return errors.Err(err) - } else if secondary == nil { - return errors.Err("secondary {{$tableNameSingular}} not found") - } - - foreignKeys := []foreignKey{ - {{- range .Tables -}} - {{- range .FKeys -}} - {{- if eq $dot.Table.Name .ForeignTable }} - {foreignTable: "{{.Table}}", foreignColumn: "{{.Column}}"}, - {{- end -}} - {{- end -}} - {{- end }} - } - - conflictingKeys := []conflictingUniqueKey{ - {{- range .Tables -}} - {{- $table := . -}} - {{- range .FKeys -}} - {{- $fk := . -}} - {{- if eq $dot.Table.Name .ForeignTable -}} - {{- range $table.UKeys -}} - {{- if setInclude $fk.Column .Columns }} - {table: "{{$fk.Table}}", objectIdColumn: "{{$fk.Column}}", columns: []string{`{{ .Columns | join "`,`" }}`}}, - {{- end -}} - {{- end -}} - {{- end -}} - {{- end -}} - {{- end }} - } - - err = mergeModels(tx, primaryID, secondaryID, foreignKeys, conflictingKeys) - if err != nil { - return err - } - - pr := reflect.ValueOf(primary) - sr := reflect.ValueOf(secondary) - // for any column thats null on the primary and not null on the secondary, copy from secondary to primary - for i := 0; i < sr.Elem().NumField(); i++ { - pf := pr.Elem().Field(i) - sf := sr.Elem().Field(i) - if sf.IsValid() { - if nullable, ok := sf.Interface().(null.Nullable); ok && !nullable.IsNull() && pf.Interface().(null.Nullable).IsNull() { - pf.Set(sf) - } - } - } - - err = primary.Update(tx) - if err != nil { - return err - } - - err = secondary.Delete(tx) - if err != nil { - return err - } - - return nil -} - -// Merge combines two {{$tableNamePlural}} into one. The primary record will be kept, and the secondary will be deleted. -func Merge{{$tableNamePlural}}G(primaryID uint64, secondaryID uint64) error { - return Merge{{$tableNamePlural}}(boil.GetDB(), primaryID, secondaryID) -} -{{- end -}}{{/* join table */}} \ No newline at end of file diff --git a/templates/singleton/boil_queries.tpl b/templates/singleton/boil_queries.tpl index 3e9ebb8..3883e8e 100644 --- a/templates/singleton/boil_queries.tpl +++ b/templates/singleton/boil_queries.tpl @@ -19,168 +19,3 @@ func NewQuery(exec boil.Executor, mods ...qm.QueryMod) *queries.Query { return q } - -func mergeModels(tx boil.Executor, primaryID uint64, secondaryID uint64, foreignKeys []foreignKey, conflictingKeys []conflictingUniqueKey) error { - if len(foreignKeys) < 1 { - return nil - } - var err error - - for _, conflict := range conflictingKeys { - if len(conflict.columns) == 1 && conflict.columns[0] == conflict.objectIdColumn { - err = deleteOneToOneConflictsBeforeMerge(tx, conflict, primaryID, secondaryID) - } else { - err = deleteOneToManyConflictsBeforeMerge(tx, conflict, primaryID, secondaryID) - } - if err != nil { - return err - } - } - - for _, fk := range foreignKeys { - // TODO: use NewQuery here, not plain sql - query := fmt.Sprintf( - "UPDATE %s SET %s = %s WHERE %s = %s", - fk.foreignTable, fk.foreignColumn, strmangle.Placeholders(dialect.IndexPlaceholders, 1, 1, 1), - fk.foreignColumn, strmangle.Placeholders(dialect.IndexPlaceholders, 1, 2, 1), - ) - _, err = tx.Exec(query, primaryID, secondaryID) - if err != nil { - return errors.Err(err) - } - } - return checkMerge(tx, foreignKeys) -} - -func deleteOneToOneConflictsBeforeMerge(tx boil.Executor, conflict conflictingUniqueKey, primaryID uint64, secondaryID uint64) error { - query := fmt.Sprintf( - "SELECT COUNT(*) FROM %s WHERE %s IN (%s)", - conflict.table, conflict.objectIdColumn, - strmangle.Placeholders(dialect.IndexPlaceholders, 2, 1, 1), - ) - - var count int - err := tx.QueryRow(query, primaryID, secondaryID).Scan(&count) - if err != nil { - return errors.Err(err) - } - - if count > 2 { - return errors.Err("it should not be possible to have more than two rows here") - } else if count != 2 { - return nil // no conflicting rows - } - - query = fmt.Sprintf( - "DELETE FROM %s WHERE %s = %s", - conflict.table, conflict.objectIdColumn, strmangle.Placeholders(dialect.IndexPlaceholders, 1, 1, 1), - ) - - _, err = tx.Exec(query, secondaryID) - return errors.Err(err) -} - -func deleteOneToManyConflictsBeforeMerge(tx boil.Executor, conflict conflictingUniqueKey, primaryID uint64, secondaryID uint64) error { - conflictingColumns := strmangle.SetComplement(conflict.columns, []string{conflict.objectIdColumn}) - - query := fmt.Sprintf( - "SELECT %s FROM %s WHERE %s IN (%s) GROUP BY %s HAVING count(distinct %s) > 1", - strings.Join(conflictingColumns, ","), conflict.table, conflict.objectIdColumn, - strmangle.Placeholders(dialect.IndexPlaceholders, 2, 1, 1), - strings.Join(conflictingColumns, ","), conflict.objectIdColumn, - ) - - //The selectParams should be the ObjectIDs to search for regarding the conflict. - rows, err := tx.Query(query, primaryID, secondaryID) - if err != nil { - return errors.Err(err) - } - - //Since we don't don't know if advance how many columns the query returns, we have dynamically assign them to be - // used in the delete query. - colNames, err := rows.Columns() - if err != nil { - return errors.Err(err) - } - //Each row result of the query needs to be removed for being a conflicting row. Store each row's keys in an array. - var rowsToRemove = [][]interface{}(nil) - for rows.Next() { - //Set pointers for dynamic scan - iColPtrs := make([]interface{}, len(colNames)) - for i := 0; i < len(colNames); i++ { - s := string("") - iColPtrs[i] = &s - } - //Dynamically scan n columns - err = rows.Scan(iColPtrs...) - if err != nil { - return errors.Err(err) - } - //Grab scanned values for query arguments - iCol := make([]interface{}, len(colNames)) - for i, col := range iColPtrs { - x := col.(*string) - iCol[i] = *x - } - rowsToRemove = append(rowsToRemove, iCol) - } - defer rows.Close() - - //This query will adjust dynamically depending on the number of conflicting keys, adding AND expressions for each - // key to ensure the right conflicting rows are deleted. - query = fmt.Sprintf( - "DELETE FROM %s %s", - conflict.table, - "WHERE "+strings.Join(conflict.columns, " = ? AND ")+" = ?", - ) - - //There could be multiple conflicting rows between ObjectIDs. In the SELECT query we grab each row and their column - // keys to be deleted here in a loop. - for _, rowToDelete := range rowsToRemove { - rowToDelete = append(rowToDelete, secondaryID) - _, err = tx.Exec(query, rowToDelete...) - if err != nil { - return errors.Err(err) - } - } - return nil -} - -func checkMerge(tx boil.Executor, foreignKeys []foreignKey) error { - uniqueColumns := []interface{}{} - uniqueColumnNames := map[string]bool{} - handledTablesColumns := map[string]bool{} - - for _, fk := range foreignKeys { - handledTablesColumns[fk.foreignTable+"."+fk.foreignColumn] = true - if _, ok := uniqueColumnNames[fk.foreignColumn]; !ok { - uniqueColumns = append(uniqueColumns, fk.foreignColumn) - uniqueColumnNames[fk.foreignColumn] = true - } - } - - q := fmt.Sprintf( - `SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND column_name IN (%s)`, - strmangle.Placeholders(dialect.IndexPlaceholders, len(uniqueColumns), 1, 1), - ) - rows, err := tx.Query(q, uniqueColumns...) - defer rows.Close() - if err != nil { - return errors.Err(err) - } - - for rows.Next() { - var tableName string - var columnName string - err = rows.Scan(&tableName, &columnName) - if err != nil { - return errors.Err(err) - } - - if _, exists := handledTablesColumns[tableName+"."+columnName]; !exists { - return errors.Err("missing merge for " + tableName + "." + columnName) - } - } - - return nil -} diff --git a/templates/singleton/boil_table_names.tpl b/templates/singleton/boil_table_names.tpl deleted file mode 100644 index 062bcad..0000000 --- a/templates/singleton/boil_table_names.tpl +++ /dev/null @@ -1,9 +0,0 @@ -var TableNames = struct { - {{range $table := .Tables -}} - {{titleCase $table.Name}} string - {{end -}} -}{ - {{range $table := .Tables -}} - {{titleCase $table.Name}}: "{{$table.Name}}", - {{end -}} -} diff --git a/templates/singleton/boil_types.tpl b/templates/singleton/boil_types.tpl index 48a85e2..9bf13e8 100644 --- a/templates/singleton/boil_types.tpl +++ b/templates/singleton/boil_types.tpl @@ -1,26 +1,10 @@ // M type is for providing columns and column values to UpdateAll. type M map[string]interface{} -// foreignKey connects two tables. When merging records, foreign keys from secondary record must -// be reassigned to primary record. -type foreignKey struct { - foreignTable string - foreignColumn string -} - -// conflictingUniqueKey records a merge conflict. If two rows exist with the same value in the -// conflicting column for two records being merged, one row must be deleted. -type conflictingUniqueKey struct { - table string - objectIdColumn string - columns []string -} - - // ErrSyncFail occurs during insert when the record could not be retrieved in // order to populate default value information. This usually happens when LastInsertId // fails or there was a primary key configuration that was not resolvable. -var ErrSyncFail = errors.Base("{{.PkgName}}: failed to synchronize data after insert") +var ErrSyncFail = errors.New("{{.PkgName}}: failed to synchronize data after insert") type insertCache struct { query string diff --git a/templates_test/main_test/mssql_main.tpl b/templates_test/main_test/mssql_main.tpl index 5b0b5e1..ba46be7 100644 --- a/templates_test/main_test/mssql_main.tpl +++ b/templates_test/main_test/mssql_main.tpl @@ -25,17 +25,17 @@ func (m *mssqlTester) setup() error { m.testDBName = randomize.StableDBName(m.dbName) if err = m.dropTestDB(); err != nil { - return errors.Err(err) + return err } if err = m.createTestDB(); err != nil { - return errors.Err(err) + return err } createCmd := exec.Command("sqlcmd", "-S", m.host, "-U", m.user, "-P", m.pass, "-d", m.testDBName) f, err := os.Open("tables_schema.sql") if err != nil { - return errors.Prefix("failed to open tables_schema.sql file", err) + return errors.Wrap(err, "failed to open tables_schema.sql file") } defer f.Close() @@ -43,12 +43,12 @@ func (m *mssqlTester) setup() error { createCmd.Stdin = newFKeyDestroyer(rgxMSSQLkey, f) if err = createCmd.Start(); err != nil { - return errors.Prefix("failed to start sqlcmd command", err) + return errors.Wrap(err, "failed to start sqlcmd command") } if err = createCmd.Wait(); err != nil { fmt.Println(err) - return errors.Prefix("failed to wait for sqlcmd command", err) + return errors.Wrap(err, "failed to wait for sqlcmd command") } return nil @@ -92,7 +92,7 @@ func (m *mssqlTester) teardown() error { } if err := m.dropTestDB(); err != nil { - return errors.Err(err) + return err } return nil @@ -110,7 +110,7 @@ func (m *mssqlTester) runCmd(stdin, command string, args ...string) error { fmt.Println("failed running:", command, args) fmt.Println(stdout.String()) fmt.Println(stderr.String()) - return errors.Err(err) + return err } return nil diff --git a/templates_test/main_test/mysql_main.tpl b/templates_test/main_test/mysql_main.tpl index ef735e2..b95b32c 100644 --- a/templates_test/main_test/mysql_main.tpl +++ b/templates_test/main_test/mysql_main.tpl @@ -30,14 +30,14 @@ func (m *mysqlTester) setup() error { m.testDBName = randomize.StableDBName(m.dbName) if err = m.makeOptionFile(); err != nil { - return errors.Prefix("couldn't make option file", err) + return errors.Wrap(err, "couldn't make option file") } if err = m.dropTestDB(); err != nil { - return errors.Err(err) + return err } if err = m.createTestDB(); err != nil { - return errors.Err(err) + return err } dumpCmd := exec.Command("mysqldump", m.defaultsFile(), "--no-data", m.dbName) @@ -48,22 +48,22 @@ func (m *mysqlTester) setup() error { createCmd.Stdin = newFKeyDestroyer(rgxMySQLkey, r) if err = dumpCmd.Start(); err != nil { - return errors.Prefix("failed to start mysqldump command", err) + return errors.Wrap(err, "failed to start mysqldump command") } if err = createCmd.Start(); err != nil { - return errors.Prefix("failed to start mysql command", err) + return errors.Wrap(err, "failed to start mysql command") } if err = dumpCmd.Wait(); err != nil { fmt.Println(err) - return errors.Prefix("failed to wait for mysqldump command", err) + return errors.Wrap(err, "failed to wait for mysqldump command") } w.Close() // After dumpCmd is done, close the write end of the pipe if err = createCmd.Wait(); err != nil { fmt.Println(err) - return errors.Prefix("failed to wait for mysql command", err) + return errors.Wrap(err, "failed to wait for mysql command") } return nil @@ -87,7 +87,7 @@ func (m *mysqlTester) defaultsFile() string { func (m *mysqlTester) makeOptionFile() error { tmp, err := ioutil.TempFile("", "optionfile") if err != nil { - return errors.Prefix("failed to create option file", err) + return errors.Wrap(err, "failed to create option file") } isTCP := false @@ -95,7 +95,7 @@ func (m *mysqlTester) makeOptionFile() error { if os.IsNotExist(err) { isTCP = true } else if err != nil { - return errors.Prefix("could not stat m.host", err) + return errors.Wrap(err, "could not stat m.host") } fmt.Fprintln(tmp, "[client]") @@ -139,7 +139,7 @@ func (m *mysqlTester) teardown() error { } if err := m.dropTestDB(); err != nil { - return errors.Err(err) + return err } return os.Remove(m.optionFile) @@ -159,7 +159,7 @@ func (m *mysqlTester) runCmd(stdin, command string, args ...string) error { fmt.Println("failed running:", command, args) fmt.Println(stdout.String()) fmt.Println(stderr.String()) - return errors.Err(err) + return err } return nil diff --git a/templates_test/main_test/postgres_main.tpl b/templates_test/main_test/postgres_main.tpl index 3110325..0abcba3 100644 --- a/templates_test/main_test/postgres_main.tpl +++ b/templates_test/main_test/postgres_main.tpl @@ -33,14 +33,14 @@ func (p *pgTester) setup() error { p.testDBName = randomize.StableDBName(p.dbName) if err = p.makePGPassFile(); err != nil { - return errors.Err(err) + return err } if err = p.dropTestDB(); err != nil { - return errors.Err(err) + return err } if err = p.createTestDB(); err != nil { - return errors.Err(err) + return err } dumpCmd := exec.Command("pg_dump", "--schema-only", p.dbName) @@ -53,22 +53,22 @@ func (p *pgTester) setup() error { createCmd.Stdin = newFKeyDestroyer(rgxPGFkey, r) if err = dumpCmd.Start(); err != nil { - return errors.Prefix("failed to start pg_dump command", err) + return errors.Wrap(err, "failed to start pg_dump command") } if err = createCmd.Start(); err != nil { - return errors.Prefix("failed to start psql command", err) + return errors.Wrap(err, "failed to start psql command") } if err = dumpCmd.Wait(); err != nil { fmt.Println(err) - return errors.Prefix("failed to wait for pg_dump command", err) + return errors.Wrap(err, "failed to wait for pg_dump command") } w.Close() // After dumpCmd is done, close the write end of the pipe if err = createCmd.Wait(); err != nil { fmt.Println(err) - return errors.Prefix("failed to wait for psql command", err) + return errors.Wrap(err, "failed to wait for psql command") } return nil @@ -90,7 +90,7 @@ func (p *pgTester) runCmd(stdin, command string, args ...string) error { fmt.Println("failed running:", command, args) fmt.Println(stdout.String()) fmt.Println(stderr.String()) - return errors.Err(err) + return err } return nil @@ -108,7 +108,7 @@ func (p *pgTester) pgEnv() []string { func (p *pgTester) makePGPassFile() error { tmp, err := ioutil.TempFile("", "pgpass") if err != nil { - return errors.Prefix("failed to create option file", err) + return errors.Wrap(err, "failed to create option file") } fmt.Fprintf(tmp, "%s:%d:postgres:%s", p.host, p.port, p.user) @@ -145,12 +145,12 @@ func (p *pgTester) dropTestDB() error { func (p *pgTester) teardown() error { var err error if err = p.dbConn.Close(); err != nil { - return errors.Err(err) + return err } p.dbConn = nil if err = p.dropTestDB(); err != nil { - return errors.Err(err) + return err } return os.Remove(p.pgPassFile) diff --git a/templates_test/relationship_to_one.tpl b/templates_test/relationship_to_one.tpl index 9211284..e95c61a 100644 --- a/templates_test/relationship_to_one.tpl +++ b/templates_test/relationship_to_one.tpl @@ -13,10 +13,10 @@ func test{{$txt.LocalTable.NameGo}}ToOne{{$txt.ForeignTable.NameGo}}Using{{$txt. var foreign {{$txt.ForeignTable.NameGo}} seed := randomize.NewSeed() - if err := randomize.Struct(seed, &local, {{$varNameSingular}}DBTypes, {{if .Nullable}}true{{else}}false{{end}}, {{$varNameSingular}}ColumnsWithDefault...); err != nil { + if err := randomize.Struct(seed, &local, {{$varNameSingular}}DBTypes, true, {{$varNameSingular}}ColumnsWithDefault...); err != nil { t.Errorf("Unable to randomize {{$txt.LocalTable.NameGo}} struct: %s", err) } - if err := randomize.Struct(seed, &foreign, {{$foreignVarNameSingular}}DBTypes, {{if .ForeignColumnNullable}}true{{else}}false{{end}}, {{$foreignVarNameSingular}}ColumnsWithDefault...); err != nil { + if err := randomize.Struct(seed, &foreign, {{$foreignVarNameSingular}}DBTypes, true, {{$foreignVarNameSingular}}ColumnsWithDefault...); err != nil { t.Errorf("Unable to randomize {{$txt.ForeignTable.NameGo}} struct: %s", err) } diff --git a/templates_test/singleton/boil_main_test.tpl b/templates_test/singleton/boil_main_test.tpl index 3cf466d..ebb4758 100644 --- a/templates_test/singleton/boil_main_test.tpl +++ b/templates_test/singleton/boil_main_test.tpl @@ -143,5 +143,5 @@ func validateConfig(driverName string) error { ).Check() } - return errors.Err("not a valid driver name") + return errors.New("not a valid driver name") }