From 39f9996b345137fc34499d6c9e406b3e9691f31b Mon Sep 17 00:00:00 2001 From: quirell Date: Wed, 2 Aug 2023 10:03:59 +0900 Subject: [PATCH] Add DefaultAlias option to TableSQLBuilder --- generator/template/file_templates.go | 2 +- generator/template/sql_builder_template.go | 8 ++++++++ tests/mysql/generator_template_test.go | 23 ++++++++++++++++++++++ tests/postgres/generator_template_test.go | 23 ++++++++++++++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index c2dc33b..731b1af 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -24,7 +24,7 @@ import ( "github.com/go-jet/jet/v2/{{dialect.PackageName}}" ) -var {{tableTemplate.InstanceName}} = new{{tableTemplate.TypeName}}("{{schemaName}}", "{{.Name}}", "") +var {{tableTemplate.InstanceName}} = new{{tableTemplate.TypeName}}("{{schemaName}}", "{{.Name}}", "{{tableTemplate.DefaultAlias}}") type {{structImplName}} struct { {{dialect.PackageName}}.Table diff --git a/generator/template/sql_builder_template.go b/generator/template/sql_builder_template.go index 4b68f21..c9ba7c4 100644 --- a/generator/template/sql_builder_template.go +++ b/generator/template/sql_builder_template.go @@ -59,6 +59,7 @@ type TableSQLBuilder struct { FileName string InstanceName string TypeName string + DefaultAlias string Column func(columnMetaData metadata.Column) TableSQLBuilderColumn } @@ -72,6 +73,7 @@ func DefaultTableSQLBuilder(tableMetaData metadata.Table) TableSQLBuilder { FileName: dbidentifier.ToGoFileName(tableMetaData.Name), InstanceName: dbidentifier.ToGoIdentifier(tableMetaData.Name), TypeName: dbidentifier.ToGoIdentifier(tableMetaData.Name) + "Table", + DefaultAlias: "", Column: DefaultTableSQLBuilderColumn, } } @@ -112,6 +114,12 @@ func (tb TableSQLBuilder) UseTypeName(name string) TableSQLBuilder { return tb } +// UseDefaultAlias returns new TableSQLBuilder with new default alias set +func (tb TableSQLBuilder) UseDefaultAlias(defaultAlias string) TableSQLBuilder { + tb.DefaultAlias = defaultAlias + return tb +} + // UseColumn returns new TableSQLBuilder with new column template function set func (tb TableSQLBuilder) UseColumn(columnsFunc func(column metadata.Column) TableSQLBuilderColumn) TableSQLBuilder { tb.Column = columnsFunc diff --git a/tests/mysql/generator_template_test.go b/tests/mysql/generator_template_test.go index a47a21d..a257f31 100644 --- a/tests/mysql/generator_template_test.go +++ b/tests/mysql/generator_template_test.go @@ -285,6 +285,29 @@ func TestGeneratorTemplate_SQLBuilder_ChangeTypeAndFileName(t *testing.T) { require.Contains(t, mpaaRating, "var FilmRatingEnumSQLBuilder = &struct {") } +func TestGeneratorTemplate_SQLBuilder_DefaultAlias(t *testing.T) { + err := mysql2.Generate( + tempTestDir, + dbConnection("dvds"), + template.Default(postgres2.Dialect). + UseSchema(func(schemaMetaData metadata.Schema) template.Schema { + return template.DefaultSchema(schemaMetaData). + UseSQLBuilder(template.DefaultSQLBuilder(). + UseTable(func(table metadata.Table) template.TableSQLBuilder { + if table.Name == "actor" { + return template.DefaultTableSQLBuilder(table).UseDefaultAlias("actors") + } + return template.DefaultTableSQLBuilder(table) + }), + ) + }), + ) + require.Nil(t, err) + + actor := file2.Exists(t, defaultTableSQLBuilderFilePath, "actor.go") + require.Contains(t, actor, "var Actor = newActorTable(\"dvds\", \"actor\", \"actors\")") +} + func TestGeneratorTemplate_Model_AddTags(t *testing.T) { err := mysql2.Generate( diff --git a/tests/postgres/generator_template_test.go b/tests/postgres/generator_template_test.go index 4f2f0da..2bc2d32 100644 --- a/tests/postgres/generator_template_test.go +++ b/tests/postgres/generator_template_test.go @@ -341,6 +341,29 @@ func UseSchema(schema string) { `) } +func TestGeneratorTemplate_SQLBuilder_DefaultAlias(t *testing.T) { + err := postgres.Generate( + tempTestDir, + dbConnection, + template.Default(postgres2.Dialect). + UseSchema(func(schemaMetaData metadata.Schema) template.Schema { + return template.DefaultSchema(schemaMetaData). + UseSQLBuilder(template.DefaultSQLBuilder(). + UseTable(func(table metadata.Table) template.TableSQLBuilder { + if table.Name == "actor" { + return template.DefaultTableSQLBuilder(table).UseDefaultAlias("actors") + } + return template.DefaultTableSQLBuilder(table) + }), + ) + }), + ) + require.Nil(t, err) + + actor := file2.Exists(t, defaultTableSQLBuilderFilePath, "actor.go") + require.Contains(t, actor, "var Actor = newActorTable(\"dvds\", \"actor\", \"actors\")") +} + func TestGeneratorTemplate_Model_AddTags(t *testing.T) { err := postgres.Generate(