Added a global method to table generation (#79)

This commit is contained in:
Jay 2022-12-01 11:54:14 +05:30
parent c9e627d333
commit 471499ea00
2 changed files with 47 additions and 3 deletions

View file

@ -97,6 +97,14 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st
} }
` `
var tableSqlBuilderSetSchemaTemplate = `
func SetSchema(schema string) {
{{- range .}}
{{ .InstanceName }} = {{ .InstanceName }}.FromSchema(schema)
{{- end}}
}
`
var tableModelFileTemplate = `package {{package}} var tableModelFileTemplate = `package {{package}}
{{ with modelImports }} {{ with modelImports }}

View file

@ -3,13 +3,15 @@ package template
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"os"
"path"
"strings"
"text/template"
"github.com/go-jet/jet/v2/generator/metadata" "github.com/go-jet/jet/v2/generator/metadata"
"github.com/go-jet/jet/v2/internal/jet" "github.com/go-jet/jet/v2/internal/jet"
"github.com/go-jet/jet/v2/internal/utils" "github.com/go-jet/jet/v2/internal/utils"
"github.com/go-jet/jet/v2/internal/utils/throw" "github.com/go-jet/jet/v2/internal/utils/throw"
"path"
"strings"
"text/template"
) )
// ProcessSchema will process schema metadata and constructs go files using generator Template // ProcessSchema will process schema metadata and constructs go files using generator Template
@ -61,6 +63,40 @@ func processSQLBuilder(dirPath string, dialect jet.Dialect, schemaMetaData metad
processTableSQLBuilder("table", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.TablesMetaData, sqlBuilderTemplate) processTableSQLBuilder("table", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.TablesMetaData, sqlBuilderTemplate)
processTableSQLBuilder("view", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.ViewsMetaData, sqlBuilderTemplate) processTableSQLBuilder("view", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.ViewsMetaData, sqlBuilderTemplate)
processEnumSQLBuilder(sqlBuilderPath, dialect, schemaMetaData.EnumsMetaData, sqlBuilderTemplate) processEnumSQLBuilder(sqlBuilderPath, dialect, schemaMetaData.EnumsMetaData, sqlBuilderTemplate)
processTableSQLBuilderSetSchema(sqlBuilderPath, schemaMetaData.TablesMetaData, sqlBuilderTemplate)
}
func processTableSQLBuilderSetSchema(dirPath string, tablesMetadata []metadata.Table, builderTemplate SQLBuilder) {
if len(tablesMetadata) == 0 {
return
}
fmt.Println("Generating global `SetSchema` method...")
err := utils.EnsureDirPath(dirPath)
throw.OnError(err)
var builders []TableSQLBuilder
for _, tm := range tablesMetadata {
builders = append(builders, builderTemplate.Table(tm))
}
funcPath := path.Join(dirPath, builders[0].Path)
origText, err := os.ReadFile(path.Join(funcPath, builders[0].FileName+".go"))
throw.OnError(err)
text, err := generateTemplate(
tableSqlBuilderSetSchemaTemplate,
builders,
nil,
)
throw.OnError(err)
text = append(origText, text...)
err = utils.SaveGoFile(funcPath, builders[0].FileName, text)
throw.OnError(err)
} }
func processEnumSQLBuilder(dirPath string, dialect jet.Dialect, enumsMetaData []metadata.Enum, sqlBuilder SQLBuilder) { func processEnumSQLBuilder(dirPath string, dialect jet.Dialect, enumsMetaData []metadata.Enum, sqlBuilder SQLBuilder) {