Cleanup / audit
This commit is contained in:
16
gen.go.tmpl
16
gen.go.tmpl
@@ -139,14 +139,11 @@ func {{.LowerType}}_Get(
|
||||
tx TX,
|
||||
{{.PKFunctionArgs -}}
|
||||
) (
|
||||
row *{{.Type}},
|
||||
row {{.Type}},
|
||||
err error,
|
||||
) {
|
||||
row = &{{.Type}}{}
|
||||
r := tx.QueryRow("{{.GetQuery}}", {{.DeleteArgs}})
|
||||
if err = r.Scan({{.ScanArgs}}); err != nil {
|
||||
row = nil
|
||||
}
|
||||
err = r.Scan({{.ScanArgs}})
|
||||
return
|
||||
}
|
||||
|
||||
@@ -155,14 +152,11 @@ func {{.LowerType}}_GetWhere(
|
||||
query string,
|
||||
args ...any,
|
||||
) (
|
||||
row *{{.Type}},
|
||||
row {{.Type}},
|
||||
err error,
|
||||
) {
|
||||
row = &{{.Type}}{}
|
||||
r := tx.QueryRow(query, args...)
|
||||
if err = r.Scan({{.ScanArgs}}); err != nil {
|
||||
row = nil
|
||||
}
|
||||
err = r.Scan({{.ScanArgs}})
|
||||
return
|
||||
}
|
||||
|
||||
@@ -176,7 +170,7 @@ func {{.LowerType}}_Iterate(
|
||||
rows, err := tx.Query(query, args...)
|
||||
if err != nil {
|
||||
return func(yield func({{.Type}}, error) bool) {
|
||||
yield(nil, err)
|
||||
yield({{.Type}}{}, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
30
parse.go
30
parse.go
@@ -77,7 +77,14 @@ func parseTable(driver string, schema *schema, tokens []string) ([]string, error
|
||||
table.NoDelete = true
|
||||
tokens = tokens[1:]
|
||||
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:
|
||||
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) {
|
||||
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)
|
||||
if err != nil {
|
||||
return tokens, err
|
||||
}
|
||||
}
|
||||
|
||||
if len(tokens) < 1 || tokens[0] != ";" {
|
||||
return tokens, errors.New("incomplete table column definitions")
|
||||
if len(tokens) == 0 || tokens[0] != ")" {
|
||||
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
|
||||
@@ -141,5 +156,10 @@ func parseTableColumn(table *table, tokens []string) ([]string, error) {
|
||||
return tokens, errors.New("incomplete column definition")
|
||||
}
|
||||
|
||||
// Leave the closing ")" for parseTableBody; consume a "," separator.
|
||||
// A trailing comma before ")" is allowed.
|
||||
if tokens[0] == "," {
|
||||
return tokens[1:], nil
|
||||
}
|
||||
return tokens, nil
|
||||
}
|
||||
|
||||
19
template.go
19
template.go
@@ -1,9 +1,11 @@
|
||||
package sqlgen
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"text/template"
|
||||
)
|
||||
@@ -22,13 +24,9 @@ func render(driver, schemaPath, outputPath string) (err error) {
|
||||
}
|
||||
|
||||
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
|
||||
Schema *schema
|
||||
}{filepath.Base(filepath.Dir(outputPath)), sch})
|
||||
@@ -36,5 +34,10 @@ func render(driver, schemaPath, outputPath string) (err error) {
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
{
|
||||
"Name": "users",
|
||||
"Type": "User",
|
||||
"LowerType": "user",
|
||||
"NoDelete": true,
|
||||
"Columns": [
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
{
|
||||
"Name": "users",
|
||||
"Type": "User",
|
||||
"LowerType": "user",
|
||||
"NoDelete": true,
|
||||
"Columns": [
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
{
|
||||
"Name": "users",
|
||||
"Type": "User",
|
||||
"LowerType": "user",
|
||||
"NoDelete": true,
|
||||
"Columns": [
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
{
|
||||
"Name": "users",
|
||||
"Type": "User",
|
||||
"LowerType": "user",
|
||||
"NoDelete": true,
|
||||
"Columns": [
|
||||
{
|
||||
@@ -35,6 +36,7 @@
|
||||
{
|
||||
"Name": "users_view",
|
||||
"Type": "UserView",
|
||||
"LowerType": "userView",
|
||||
"NoInsert": true,
|
||||
"NoUpdate": true,
|
||||
"NoDelete": true,
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
{
|
||||
"Name": "users",
|
||||
"Type": "User",
|
||||
"LowerType": "user",
|
||||
"NoDelete": true,
|
||||
"Columns": [
|
||||
{
|
||||
@@ -40,6 +41,7 @@
|
||||
{
|
||||
"Name": "users_view",
|
||||
"Type": "UserView",
|
||||
"LowerType": "userView",
|
||||
"NoInsert": true,
|
||||
"NoUpdate": true,
|
||||
"NoDelete": true,
|
||||
|
||||
Reference in New Issue
Block a user