Cleanup / audit
This commit is contained in:
16
gen.go.tmpl
16
gen.go.tmpl
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
30
parse.go
30
parse.go
@@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Leave the closing ")" for parseTableBody; consume a "," separator.
|
||||||
|
// A trailing comma before ")" is allowed.
|
||||||
|
if tokens[0] == "," {
|
||||||
return tokens[1:], nil
|
return tokens[1:], nil
|
||||||
}
|
}
|
||||||
|
return tokens, nil
|
||||||
|
}
|
||||||
|
|||||||
19
template.go
19
template.go
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
{
|
{
|
||||||
"Name": "users",
|
"Name": "users",
|
||||||
"Type": "User",
|
"Type": "User",
|
||||||
|
"LowerType": "user",
|
||||||
"NoDelete": true,
|
"NoDelete": true,
|
||||||
"Columns": [
|
"Columns": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
{
|
{
|
||||||
"Name": "users",
|
"Name": "users",
|
||||||
"Type": "User",
|
"Type": "User",
|
||||||
|
"LowerType": "user",
|
||||||
"NoDelete": true,
|
"NoDelete": true,
|
||||||
"Columns": [
|
"Columns": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
{
|
{
|
||||||
"Name": "users",
|
"Name": "users",
|
||||||
"Type": "User",
|
"Type": "User",
|
||||||
|
"LowerType": "user",
|
||||||
"NoDelete": true,
|
"NoDelete": true,
|
||||||
"Columns": [
|
"Columns": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user