Cleanup / audit

This commit is contained in:
jdl
2026-06-25 13:35:41 +02:00
parent 9a0beaf9cb
commit 58adb4b2a6
8 changed files with 49 additions and 25 deletions

View File

@@ -139,14 +139,11 @@ func {{.LowerType}}_Get(
tx TX, tx TX,
{{.PKFunctionArgs -}} {{.PKFunctionArgs -}}
) ( ) (
row *{{.Type}}, row {{.Type}},
err error, err error,
) { ) {
row = &{{.Type}}{}
r := tx.QueryRow("{{.GetQuery}}", {{.DeleteArgs}}) r := tx.QueryRow("{{.GetQuery}}", {{.DeleteArgs}})
if err = r.Scan({{.ScanArgs}}); err != nil { err = r.Scan({{.ScanArgs}})
row = nil
}
return return
} }
@@ -155,14 +152,11 @@ func {{.LowerType}}_GetWhere(
query string, query string,
args ...any, args ...any,
) ( ) (
row *{{.Type}}, row {{.Type}},
err error, err error,
) { ) {
row = &{{.Type}}{}
r := tx.QueryRow(query, args...) r := tx.QueryRow(query, args...)
if err = r.Scan({{.ScanArgs}}); err != nil { err = r.Scan({{.ScanArgs}})
row = nil
}
return return
} }
@@ -176,7 +170,7 @@ func {{.LowerType}}_Iterate(
rows, err := tx.Query(query, args...) rows, err := tx.Query(query, args...)
if err != nil { if err != nil {
return func(yield func({{.Type}}, error) bool) { return func(yield func({{.Type}}, error) bool) {
yield(nil, err) yield({{.Type}}{}, err)
} }
} }

View File

@@ -77,7 +77,14 @@ func parseTable(driver string, schema *schema, tokens []string) ([]string, error
table.NoDelete = true table.NoDelete = true
tokens = tokens[1:] tokens = tokens[1:]
case "(": case "(":
return parseTableBody(table, tokens[1:]) tokens, err := parseTableBody(table, tokens[1:])
if err != nil {
return tokens, err
}
if len(table.pkCols()) == 0 {
return tokens, errors.New("table " + table.Name + " has no PK column")
}
return tokens, nil
default: default:
return tokens, errors.New("unexpected token in table definition: " + tokens[0]) return tokens, errors.New("unexpected token in table definition: " + tokens[0])
} }
@@ -87,17 +94,25 @@ func parseTable(driver string, schema *schema, tokens []string) ([]string, error
} }
func parseTableBody(table *table, tokens []string) ([]string, error) { func parseTableBody(table *table, tokens []string) ([]string, error) {
var err error if len(tokens) > 0 && tokens[0] == ")" {
return tokens, errors.New("empty table body")
}
for len(tokens) > 0 && tokens[0] != ";" { var err error
for len(tokens) > 0 && tokens[0] != ")" {
tokens, err = parseTableColumn(table, tokens) tokens, err = parseTableColumn(table, tokens)
if err != nil { if err != nil {
return tokens, err return tokens, err
} }
} }
if len(tokens) < 1 || tokens[0] != ";" { if len(tokens) == 0 || tokens[0] != ")" {
return tokens, errors.New("incomplete table column definitions") return tokens, errors.New("missing closing ) in table definition")
}
tokens = tokens[1:] // consume ")"
if len(tokens) == 0 || tokens[0] != ";" {
return tokens, errors.New("missing ; after table definition")
} }
return tokens[1:], nil return tokens[1:], nil
@@ -141,5 +156,10 @@ func parseTableColumn(table *table, tokens []string) ([]string, error) {
return tokens, errors.New("incomplete column definition") return tokens, errors.New("incomplete column definition")
} }
return tokens[1:], nil // Leave the closing ")" for parseTableBody; consume a "," separator.
// A trailing comma before ")" is allowed.
if tokens[0] == "," {
return tokens[1:], nil
}
return tokens, nil
} }

View File

@@ -1,9 +1,11 @@
package sqlgen package sqlgen
import ( import (
"bytes"
_ "embed" _ "embed"
"fmt"
"go/format"
"os" "os"
"os/exec"
"path/filepath" "path/filepath"
"text/template" "text/template"
) )
@@ -22,13 +24,9 @@ func render(driver, schemaPath, outputPath string) (err error) {
} }
tmpl := template.Must(template.New("").Parse(fileTemplate)) tmpl := template.Must(template.New("").Parse(fileTemplate))
fOut, err := os.Create(outputPath)
if err != nil {
return err
}
defer fOut.Close()
err = tmpl.Execute(fOut, struct { buf := &bytes.Buffer{}
err = tmpl.Execute(buf, struct {
PackageName string PackageName string
Schema *schema Schema *schema
}{filepath.Base(filepath.Dir(outputPath)), sch}) }{filepath.Base(filepath.Dir(outputPath)), sch})
@@ -36,5 +34,10 @@ func render(driver, schemaPath, outputPath string) (err error) {
return err return err
} }
return exec.Command("gofmt", "-w", outputPath).Run() formatted, err := format.Source(buf.Bytes())
if err != nil {
return fmt.Errorf("formatting generated code: %w", err)
}
return os.WriteFile(outputPath, formatted, 0o644)
} }

View File

@@ -3,6 +3,7 @@
{ {
"Name": "users", "Name": "users",
"Type": "User", "Type": "User",
"LowerType": "user",
"NoDelete": true, "NoDelete": true,
"Columns": [ "Columns": [
{ {

View File

@@ -3,6 +3,7 @@
{ {
"Name": "users", "Name": "users",
"Type": "User", "Type": "User",
"LowerType": "user",
"NoDelete": true, "NoDelete": true,
"Columns": [ "Columns": [
{ {

View File

@@ -3,6 +3,7 @@
{ {
"Name": "users", "Name": "users",
"Type": "User", "Type": "User",
"LowerType": "user",
"NoDelete": true, "NoDelete": true,
"Columns": [ "Columns": [
{ {

View File

@@ -3,6 +3,7 @@
{ {
"Name": "users", "Name": "users",
"Type": "User", "Type": "User",
"LowerType": "user",
"NoDelete": true, "NoDelete": true,
"Columns": [ "Columns": [
{ {
@@ -35,6 +36,7 @@
{ {
"Name": "users_view", "Name": "users_view",
"Type": "UserView", "Type": "UserView",
"LowerType": "userView",
"NoInsert": true, "NoInsert": true,
"NoUpdate": true, "NoUpdate": true,
"NoDelete": true, "NoDelete": true,

View File

@@ -3,6 +3,7 @@
{ {
"Name": "users", "Name": "users",
"Type": "User", "Type": "User",
"LowerType": "user",
"NoDelete": true, "NoDelete": true,
"Columns": [ "Columns": [
{ {
@@ -40,6 +41,7 @@
{ {
"Name": "users_view", "Name": "users_view",
"Type": "UserView", "Type": "UserView",
"LowerType": "userView",
"NoInsert": true, "NoInsert": true,
"NoUpdate": true, "NoUpdate": true,
"NoDelete": true, "NoDelete": true,