Compare commits
3 Commits
5cbb657666
...
93b589d1b2
| Author | SHA1 | Date | |
|---|---|---|---|
| 93b589d1b2 | |||
| b0d95c5948 | |||
| 85d544152f |
@ -43,38 +43,43 @@ var generate_model = &cobra.Command{
|
||||
file2 := modelgenerate.GenerateModelTestAST(table, modname)
|
||||
PanicIf(printer.Fprint(os.Stdout, fset, file2))
|
||||
} else {
|
||||
file := &ast.File{
|
||||
Name: ast.NewIdent("db"), // TODO: parameterize
|
||||
|
||||
Decls: []ast.Decl{
|
||||
&ast.GenDecl{
|
||||
Tok: token.IMPORT,
|
||||
Specs: []ast.Spec{
|
||||
&ast.ImportSpec{Path: &ast.BasicLit{Kind: token.STRING, Value: `"database/sql"`}},
|
||||
&ast.ImportSpec{Path: &ast.BasicLit{Kind: token.STRING, Value: `"errors"`}},
|
||||
&ast.ImportSpec{Path: &ast.BasicLit{Kind: token.STRING, Value: `"fmt"`}},
|
||||
&ast.ImportSpec{
|
||||
Name: ast.NewIdent("."),
|
||||
Path: &ast.BasicLit{Kind: token.STRING, Value: `"git.offline-twitter.com/offline-labs/gas-stack/pkg/db"`},
|
||||
},
|
||||
&ast.ImportSpec{
|
||||
Name: ast.NewIdent("."),
|
||||
Path: &ast.BasicLit{
|
||||
Kind: token.STRING,
|
||||
Value: `"git.offline-twitter.com/offline-labs/gas-stack/pkg/flowutils"`,
|
||||
},
|
||||
decls := []ast.Decl{
|
||||
&ast.GenDecl{
|
||||
Tok: token.IMPORT,
|
||||
Specs: []ast.Spec{
|
||||
&ast.ImportSpec{Path: &ast.BasicLit{Kind: token.STRING, Value: `"database/sql"`}},
|
||||
&ast.ImportSpec{Path: &ast.BasicLit{Kind: token.STRING, Value: `"errors"`}},
|
||||
&ast.ImportSpec{Path: &ast.BasicLit{Kind: token.STRING, Value: `"fmt"`}},
|
||||
&ast.ImportSpec{
|
||||
Name: ast.NewIdent("."),
|
||||
Path: &ast.BasicLit{Kind: token.STRING, Value: `"git.offline-twitter.com/offline-labs/gas-stack/pkg/db"`},
|
||||
},
|
||||
&ast.ImportSpec{
|
||||
Name: ast.NewIdent("."),
|
||||
Path: &ast.BasicLit{
|
||||
Kind: token.STRING,
|
||||
Value: `"git.offline-twitter.com/offline-labs/gas-stack/pkg/flowutils"`,
|
||||
},
|
||||
},
|
||||
},
|
||||
modelgenerate.GenerateIDType(table),
|
||||
modelgenerate.GenerateModelAST(table),
|
||||
modelgenerate.GenerateSQLFieldsConst(table),
|
||||
modelgenerate.GenerateSaveItemFunc(table),
|
||||
modelgenerate.GenerateDeleteItemFunc(table),
|
||||
modelgenerate.GenerateGetItemByIDFunc(table),
|
||||
modelgenerate.GenerateGetAllItemsFunc(table),
|
||||
},
|
||||
}
|
||||
if !table.IsWithoutRowid {
|
||||
decls = append(decls, modelgenerate.GenerateIDType(table))
|
||||
}
|
||||
decls = append(decls,
|
||||
modelgenerate.GenerateModelAST(table),
|
||||
modelgenerate.GenerateSQLFieldsConst(table),
|
||||
modelgenerate.GenerateSaveItemFunc(table),
|
||||
modelgenerate.GenerateDeleteItemFunc(table),
|
||||
modelgenerate.GenerateGetItemByIDFunc(table),
|
||||
modelgenerate.GenerateGetAllItemsFunc(table),
|
||||
)
|
||||
|
||||
file := &ast.File{
|
||||
Name: ast.NewIdent("db"), // TODO: parameterize
|
||||
Decls: decls,
|
||||
}
|
||||
|
||||
PanicIf(printer.Fprint(os.Stdout, fset, file))
|
||||
}
|
||||
|
||||
@ -154,19 +154,14 @@ func GenerateSaveItemFunc(tbl schema.Table) *ast.FuncDecl {
|
||||
Tok: token.DEFINE,
|
||||
Rhs: []ast.Expr{
|
||||
&ast.CallExpr{
|
||||
Fun: &ast.SelectorExpr{X: ast.NewIdent("db"), Sel: ast.NewIdent(getByIDFuncName(col.ForeignKeyTargetTable))},
|
||||
Args: []ast.Expr{
|
||||
structField,
|
||||
},
|
||||
Fun: &ast.SelectorExpr{X: ast.NewIdent("db"), Sel: ast.NewIdent(getByIDFuncName(col.ForeignKeyTargetTable))},
|
||||
Args: []ast.Expr{structField},
|
||||
},
|
||||
},
|
||||
},
|
||||
Cond: &ast.CallExpr{
|
||||
Fun: &ast.SelectorExpr{X: ast.NewIdent("errors"), Sel: ast.NewIdent("Is")},
|
||||
Args: []ast.Expr{
|
||||
ast.NewIdent("err"),
|
||||
ast.NewIdent("ErrNotInDB"),
|
||||
},
|
||||
Fun: &ast.SelectorExpr{X: ast.NewIdent("errors"), Sel: ast.NewIdent("Is")},
|
||||
Args: []ast.Expr{ast.NewIdent("err"), ast.NewIdent("ErrNotInDB")},
|
||||
},
|
||||
Body: &ast.BlockStmt{
|
||||
List: []ast.Stmt{
|
||||
@ -189,9 +184,7 @@ func GenerateSaveItemFunc(tbl schema.Table) *ast.FuncDecl {
|
||||
// Code table value. Query the table to see if it exists
|
||||
ret = append(ret, &ast.IfStmt{
|
||||
Init: &ast.AssignStmt{
|
||||
Lhs: []ast.Expr{
|
||||
ast.NewIdent("err"),
|
||||
},
|
||||
Lhs: []ast.Expr{ast.NewIdent("err")},
|
||||
Tok: token.ASSIGN,
|
||||
Rhs: []ast.Expr{
|
||||
&ast.CallExpr{
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"git.offline-twitter.com/offline-labs/gas-stack/pkg/textutils"
|
||||
@ -83,6 +84,23 @@ type Table struct {
|
||||
GoTypeName string
|
||||
}
|
||||
|
||||
// PrimaryKeyColumns returns the ordered list of columns in this table's primary key.
|
||||
// This can be useful for "without rowid" tables with composite primary keys.
|
||||
//
|
||||
// TODO: needs test
|
||||
func (t Table) PrimaryKeyColumns() []Column {
|
||||
pks := make([]Column, 0)
|
||||
for _, c := range t.Columns {
|
||||
if c.IsPrimaryKey {
|
||||
pks = append(pks, c)
|
||||
}
|
||||
}
|
||||
sort.Slice(pks, func(i, j int) bool {
|
||||
return pks[i].PrimaryKeyRank < pks[j].PrimaryKeyRank
|
||||
})
|
||||
return pks
|
||||
}
|
||||
|
||||
func (t Table) HasAutoTimestamps() (hasCreatedAt bool, hasUpdatedAt bool) {
|
||||
for _, c := range t.Columns {
|
||||
if c.Name == "created_at" && c.Type == "integer" {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user