codegen: generate getters for compound indexes
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"go/ast"
|
||||
"go/token"
|
||||
"os"
|
||||
"slices"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
@@ -30,14 +31,14 @@ var generate_model = &cobra.Command{
|
||||
return fmt.Errorf("reading path %s: %w", path, err)
|
||||
}
|
||||
db := schema.InitDB(string(sql))
|
||||
schema := schema.SchemaFromDB(db)
|
||||
table, isOk := schema.Tables[args[0]]
|
||||
sch := schema.SchemaFromDB(db)
|
||||
table, isOk := sch.Tables[args[0]]
|
||||
if !isOk {
|
||||
return ErrNoSuchTable
|
||||
}
|
||||
|
||||
if must.Get(cmd.Flags().GetBool("test")) {
|
||||
file2 := modelgenerate.GenerateModelTestAST(table, schema, modname)
|
||||
file2 := modelgenerate.GenerateModelTestAST(table, sch, modname)
|
||||
must.Do(modelgenerate.FprintWithComments(os.Stdout, file2))
|
||||
} else {
|
||||
decls := []ast.Decl{
|
||||
@@ -77,19 +78,23 @@ var generate_model = &cobra.Command{
|
||||
modelgenerate.GenerateGetItemByIDFunc(table),
|
||||
)
|
||||
}
|
||||
for _, index := range schema.Indexes {
|
||||
for _, index := range sch.Indexes {
|
||||
if index.TableName != table.TableName {
|
||||
// Skip indexes on other tables
|
||||
continue
|
||||
}
|
||||
if len(index.Columns) != 1 || index.Columns[0] == "" {
|
||||
// Skip multi-column and expression indexes
|
||||
if slices.Contains(index.Columns, "") {
|
||||
// Skip expression indexes; there's no way to resolve an expression to a real column
|
||||
continue
|
||||
}
|
||||
cols := make([]schema.Column, len(index.Columns))
|
||||
for i, colName := range index.Columns {
|
||||
cols[i] = table.GetColumnByName(colName)
|
||||
}
|
||||
if index.IsUnique {
|
||||
decls = append(decls, modelgenerate.GenerateGetItemByUniqColFunc(table, table.GetColumnByName(index.Columns[0])))
|
||||
decls = append(decls, modelgenerate.GenerateGetItemBy(table, cols))
|
||||
} else {
|
||||
decls = append(decls, modelgenerate.GenerateGetItemsByColFunc(table, table.GetColumnByName(index.Columns[0])))
|
||||
decls = append(decls, modelgenerate.GenerateGetItemsBy(table, cols))
|
||||
}
|
||||
}
|
||||
decls = append(decls, modelgenerate.GenerateGetAllItemsFunc(table))
|
||||
|
||||
Reference in New Issue
Block a user