Compare commits

..

3 Commits

Author SHA1 Message Date
93b589d1b2 codegen (refactor): compress whitespace
All checks were successful
CI / build-docker (push) Successful in 5s
CI / build-docker-bootstrap (push) Has been skipped
CI / release-test (push) Successful in 15s
2026-02-15 14:10:10 -08:00
b0d95c5948 codegen: skip generating ID type for "without rowid" tables 2026-02-15 14:10:10 -08:00
85d544152f schema: add PrimaryKeyColumns method to Table, useful for 'without rowid' tables 2026-02-15 14:10:06 -08:00
3 changed files with 55 additions and 39 deletions

View File

@ -43,10 +43,7 @@ var generate_model = &cobra.Command{
file2 := modelgenerate.GenerateModelTestAST(table, modname) file2 := modelgenerate.GenerateModelTestAST(table, modname)
PanicIf(printer.Fprint(os.Stdout, fset, file2)) PanicIf(printer.Fprint(os.Stdout, fset, file2))
} else { } else {
file := &ast.File{ decls := []ast.Decl{
Name: ast.NewIdent("db"), // TODO: parameterize
Decls: []ast.Decl{
&ast.GenDecl{ &ast.GenDecl{
Tok: token.IMPORT, Tok: token.IMPORT,
Specs: []ast.Spec{ Specs: []ast.Spec{
@ -66,14 +63,22 @@ var generate_model = &cobra.Command{
}, },
}, },
}, },
modelgenerate.GenerateIDType(table), }
if !table.IsWithoutRowid {
decls = append(decls, modelgenerate.GenerateIDType(table))
}
decls = append(decls,
modelgenerate.GenerateModelAST(table), modelgenerate.GenerateModelAST(table),
modelgenerate.GenerateSQLFieldsConst(table), modelgenerate.GenerateSQLFieldsConst(table),
modelgenerate.GenerateSaveItemFunc(table), modelgenerate.GenerateSaveItemFunc(table),
modelgenerate.GenerateDeleteItemFunc(table), modelgenerate.GenerateDeleteItemFunc(table),
modelgenerate.GenerateGetItemByIDFunc(table), modelgenerate.GenerateGetItemByIDFunc(table),
modelgenerate.GenerateGetAllItemsFunc(table), modelgenerate.GenerateGetAllItemsFunc(table),
}, )
file := &ast.File{
Name: ast.NewIdent("db"), // TODO: parameterize
Decls: decls,
} }
PanicIf(printer.Fprint(os.Stdout, fset, file)) PanicIf(printer.Fprint(os.Stdout, fset, file))

View File

@ -155,18 +155,13 @@ func GenerateSaveItemFunc(tbl schema.Table) *ast.FuncDecl {
Rhs: []ast.Expr{ Rhs: []ast.Expr{
&ast.CallExpr{ &ast.CallExpr{
Fun: &ast.SelectorExpr{X: ast.NewIdent("db"), Sel: ast.NewIdent(getByIDFuncName(col.ForeignKeyTargetTable))}, Fun: &ast.SelectorExpr{X: ast.NewIdent("db"), Sel: ast.NewIdent(getByIDFuncName(col.ForeignKeyTargetTable))},
Args: []ast.Expr{ Args: []ast.Expr{structField},
structField,
},
}, },
}, },
}, },
Cond: &ast.CallExpr{ Cond: &ast.CallExpr{
Fun: &ast.SelectorExpr{X: ast.NewIdent("errors"), Sel: ast.NewIdent("Is")}, Fun: &ast.SelectorExpr{X: ast.NewIdent("errors"), Sel: ast.NewIdent("Is")},
Args: []ast.Expr{ Args: []ast.Expr{ast.NewIdent("err"), ast.NewIdent("ErrNotInDB")},
ast.NewIdent("err"),
ast.NewIdent("ErrNotInDB"),
},
}, },
Body: &ast.BlockStmt{ Body: &ast.BlockStmt{
List: []ast.Stmt{ 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 // Code table value. Query the table to see if it exists
ret = append(ret, &ast.IfStmt{ ret = append(ret, &ast.IfStmt{
Init: &ast.AssignStmt{ Init: &ast.AssignStmt{
Lhs: []ast.Expr{ Lhs: []ast.Expr{ast.NewIdent("err")},
ast.NewIdent("err"),
},
Tok: token.ASSIGN, Tok: token.ASSIGN,
Rhs: []ast.Expr{ Rhs: []ast.Expr{
&ast.CallExpr{ &ast.CallExpr{

View File

@ -1,6 +1,7 @@
package schema package schema
import ( import (
"sort"
"strings" "strings"
"git.offline-twitter.com/offline-labs/gas-stack/pkg/textutils" "git.offline-twitter.com/offline-labs/gas-stack/pkg/textutils"
@ -83,6 +84,23 @@ type Table struct {
GoTypeName string 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) { func (t Table) HasAutoTimestamps() (hasCreatedAt bool, hasUpdatedAt bool) {
for _, c := range t.Columns { for _, c := range t.Columns {
if c.Name == "created_at" && c.Type == "integer" { if c.Name == "created_at" && c.Type == "integer" {