From 471499ea0063e3d341bc7a9f90da94d439da0ac6 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 1 Dec 2022 11:54:14 +0530 Subject: [PATCH 01/10] Added a global method to table generation (#79) --- generator/template/file_templates.go | 8 ++++++ generator/template/process.go | 42 ++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index 35b4dcd..6ef375d 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -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}} {{ with modelImports }} diff --git a/generator/template/process.go b/generator/template/process.go index 09636dc..7643aaf 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -3,13 +3,15 @@ package template import ( "bytes" "fmt" + "os" + "path" + "strings" + "text/template" + "github.com/go-jet/jet/v2/generator/metadata" "github.com/go-jet/jet/v2/internal/jet" "github.com/go-jet/jet/v2/internal/utils" "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 @@ -61,6 +63,40 @@ func processSQLBuilder(dirPath string, dialect jet.Dialect, schemaMetaData metad processTableSQLBuilder("table", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.TablesMetaData, sqlBuilderTemplate) processTableSQLBuilder("view", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.ViewsMetaData, 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) { From a792fe6e0ac0ff14ebf6253a22beda3aa01602bf Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 1 Dec 2022 12:46:42 +0530 Subject: [PATCH 02/10] Renamed generated SetSchema to SetSchema --- generator/template/file_templates.go | 2 +- generator/template/process.go | 16 +++++++++++----- tests/mysql/generator_test.go | 22 +++++++++++++++++++++- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index 6ef375d..7eadcd8 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -98,7 +98,7 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st ` var tableSqlBuilderSetSchemaTemplate = ` -func SetSchema(schema string) { +func {{setSchemaMethodName}}(schema string) { {{- range .}} {{ .InstanceName }} = {{ .InstanceName }}.FromSchema(schema) {{- end}} diff --git a/generator/template/process.go b/generator/template/process.go index 7643aaf..eb10f60 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -63,11 +63,11 @@ func processSQLBuilder(dirPath string, dialect jet.Dialect, schemaMetaData metad processTableSQLBuilder("table", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.TablesMetaData, sqlBuilderTemplate) processTableSQLBuilder("view", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.ViewsMetaData, sqlBuilderTemplate) processEnumSQLBuilder(sqlBuilderPath, dialect, schemaMetaData.EnumsMetaData, sqlBuilderTemplate) - processTableSQLBuilderSetSchema(sqlBuilderPath, schemaMetaData.TablesMetaData, sqlBuilderTemplate) + processTableSQLBuilderSetSchema(sqlBuilderPath, schemaMetaData, sqlBuilderTemplate) } -func processTableSQLBuilderSetSchema(dirPath string, tablesMetadata []metadata.Table, builderTemplate SQLBuilder) { - if len(tablesMetadata) == 0 { +func processTableSQLBuilderSetSchema(dirPath string, schemaMetadata metadata.Schema, builderTemplate SQLBuilder) { + if schemaMetadata.IsEmpty() { return } @@ -77,10 +77,12 @@ func processTableSQLBuilderSetSchema(dirPath string, tablesMetadata []metadata.T throw.OnError(err) var builders []TableSQLBuilder - for _, tm := range tablesMetadata { + for _, tm := range schemaMetadata.TablesMetaData { builders = append(builders, builderTemplate.Table(tm)) } + schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) + funcPath := path.Join(dirPath, builders[0].Path) origText, err := os.ReadFile(path.Join(funcPath, builders[0].FileName+".go")) @@ -89,7 +91,11 @@ func processTableSQLBuilderSetSchema(dirPath string, tablesMetadata []metadata.T text, err := generateTemplate( tableSqlBuilderSetSchemaTemplate, builders, - nil, + template.FuncMap{ + "setSchemaMethodName": func() string { + return "Set" + schemaIdentifier + "Schema" + }, + }, ) throw.OnError(err) diff --git a/tests/mysql/generator_test.go b/tests/mysql/generator_test.go index acbe04b..5c57be9 100644 --- a/tests/mysql/generator_test.go +++ b/tests/mysql/generator_test.go @@ -7,10 +7,11 @@ import ( "strconv" "testing" + "github.com/stretchr/testify/require" + "github.com/go-jet/jet/v2/generator/mysql" "github.com/go-jet/jet/v2/internal/testutils" "github.com/go-jet/jet/v2/tests/dbconfig" - "github.com/stretchr/testify/require" ) const genTestDirRoot = "./.gentestdata3" @@ -307,6 +308,25 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable { MutableColumns: mutableColumns, } } + +func SetDvdsSchema(schema string) { + Actor = Actor.FromSchema(schema) + Address = Address.FromSchema(schema) + Category = Category.FromSchema(schema) + City = City.FromSchema(schema) + Country = Country.FromSchema(schema) + Customer = Customer.FromSchema(schema) + Film = Film.FromSchema(schema) + FilmActor = FilmActor.FromSchema(schema) + FilmCategory = FilmCategory.FromSchema(schema) + FilmText = FilmText.FromSchema(schema) + Inventory = Inventory.FromSchema(schema) + Language = Language.FromSchema(schema) + Payment = Payment.FromSchema(schema) + Rental = Rental.FromSchema(schema) + Staff = Staff.FromSchema(schema) + Store = Store.FromSchema(schema) +} ` var actorModelFile = ` From 882d5562f3270bd3ba3b980593380d5c4acf398e Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 1 Dec 2022 15:15:35 +0530 Subject: [PATCH 03/10] added a check for skipping generation of table SQL builder code --- generator/template/process.go | 10 +++++++--- tests/postgres/generator_test.go | 14 +++++++++++++- tests/sqlite/generator_test.go | 22 +++++++++++++++++++++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/generator/template/process.go b/generator/template/process.go index eb10f60..01ba1b1 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -71,16 +71,20 @@ func processTableSQLBuilderSetSchema(dirPath string, schemaMetadata metadata.Sch return } - fmt.Println("Generating global `SetSchema` method...") - err := utils.EnsureDirPath(dirPath) throw.OnError(err) var builders []TableSQLBuilder for _, tm := range schemaMetadata.TablesMetaData { - builders = append(builders, builderTemplate.Table(tm)) + table := builderTemplate.Table(tm) + builders = append(builders, table) + + if table.Skip { + return + } } + fmt.Println("Generating global `SetSchema` method...") schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) funcPath := path.Join(dirPath, builders[0].Path) diff --git a/tests/postgres/generator_test.go b/tests/postgres/generator_test.go index 328de17..0824103 100644 --- a/tests/postgres/generator_test.go +++ b/tests/postgres/generator_test.go @@ -10,10 +10,11 @@ import ( "strconv" "testing" + "github.com/stretchr/testify/require" + "github.com/go-jet/jet/v2/generator/postgres" "github.com/go-jet/jet/v2/internal/testutils" "github.com/go-jet/jet/v2/tests/dbconfig" - "github.com/stretchr/testify/require" "github.com/go-jet/jet/v2/tests/.gentestdata/jetdb/dvds/model" ) @@ -913,4 +914,15 @@ func newAllTypesTableImpl(schemaName, tableName, alias string) allTypesTable { MutableColumns: mutableColumns, } } + +func SetTestSampleSchema(schema string) { + AllTypes = AllTypes.FromSchema(schema) + Link = Link.FromSchema(schema) + Employee = Employee.FromSchema(schema) + Person = Person.FromSchema(schema) + PersonPhone = PersonPhone.FromSchema(schema) + WeirdNamesTable = WeirdNamesTable.FromSchema(schema) + User = User.FromSchema(schema) + Floats = Floats.FromSchema(schema) +} ` diff --git a/tests/sqlite/generator_test.go b/tests/sqlite/generator_test.go index 9665387..9b711a3 100644 --- a/tests/sqlite/generator_test.go +++ b/tests/sqlite/generator_test.go @@ -7,11 +7,12 @@ import ( "reflect" "testing" + "github.com/stretchr/testify/require" + "github.com/go-jet/jet/v2/generator/sqlite" "github.com/go-jet/jet/v2/internal/testutils" "github.com/go-jet/jet/v2/tests/.gentestdata/sqlite/sakila/model" "github.com/go-jet/jet/v2/tests/internal/utils/repo" - "github.com/stretchr/testify/require" ) func TestGeneratedModel(t *testing.T) { @@ -224,6 +225,25 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable { MutableColumns: mutableColumns, } } + +func SetSchema(schema string) { + Actor = Actor.FromSchema(schema) + Address = Address.FromSchema(schema) + Category = Category.FromSchema(schema) + City = City.FromSchema(schema) + Country = Country.FromSchema(schema) + Customer = Customer.FromSchema(schema) + Film = Film.FromSchema(schema) + FilmActor = FilmActor.FromSchema(schema) + FilmCategory = FilmCategory.FromSchema(schema) + FilmText = FilmText.FromSchema(schema) + Inventory = Inventory.FromSchema(schema) + Language = Language.FromSchema(schema) + Payment = Payment.FromSchema(schema) + Rental = Rental.FromSchema(schema) + Staff = Staff.FromSchema(schema) + Store = Store.FromSchema(schema) +} ` const filmListSQLBuilderFile = ` From bda94469ea49e221e28920867af20be39e8b31ac Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 1 Dec 2022 17:46:14 +0530 Subject: [PATCH 04/10] Corrected an issue where skipping any table skips SetSchema --- generator/template/process.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/generator/template/process.go b/generator/template/process.go index 01ba1b1..102c7c0 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -80,10 +80,14 @@ func processTableSQLBuilderSetSchema(dirPath string, schemaMetadata metadata.Sch builders = append(builders, table) if table.Skip { - return + continue } } + if len(builders) == 0 { + return + } + fmt.Println("Generating global `SetSchema` method...") schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) From 199bb2a20adc614c666179241d823fd1a942cff9 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 1 Dec 2022 22:28:28 +0530 Subject: [PATCH 05/10] corrected 'skip table generation' check --- .gitignore | 4 +++- generator/template/process.go | 16 +++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 4d7da45..a627142 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,6 @@ gen .tests/testdata/ .gen .docker -.env \ No newline at end of file +.env +.tempTestDir +.gentestdata3 \ No newline at end of file diff --git a/generator/template/process.go b/generator/template/process.go index 102c7c0..edac0cb 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -67,28 +67,26 @@ func processSQLBuilder(dirPath string, dialect jet.Dialect, schemaMetaData metad } func processTableSQLBuilderSetSchema(dirPath string, schemaMetadata metadata.Schema, builderTemplate SQLBuilder) { - if schemaMetadata.IsEmpty() { - return - } - - err := utils.EnsureDirPath(dirPath) - throw.OnError(err) var builders []TableSQLBuilder for _, tm := range schemaMetadata.TablesMetaData { - table := builderTemplate.Table(tm) - builders = append(builders, table) + table := builderTemplate.Table(tm) if table.Skip { continue } + + builders = append(builders, table) } if len(builders) == 0 { return } - fmt.Println("Generating global `SetSchema` method...") + err := utils.EnsureDirPath(dirPath) + throw.OnError(err) + + fmt.Println("Generating global `SetSchema` method") schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) funcPath := path.Join(dirPath, builders[0].Path) From 7db99b10bcab196854bccda787e10ad2f08ba306 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 2 Dec 2022 23:02:44 +0530 Subject: [PATCH 06/10] Made 'SetSchema' to be generated in a dedicated file for views and tables. --- generator/template/file_templates.go | 3 +- generator/template/process.go | 80 ++++++++++++---------------- tests/mysql/generator_test.go | 41 ++++++++++++-- tests/postgres/generator_test.go | 73 +++++++++++++++++++------ tests/sqlite/generator_test.go | 39 ++++++++++++-- 5 files changed, 164 insertions(+), 72 deletions(-) diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index 7eadcd8..209113e 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -97,7 +97,8 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st } ` -var tableSqlBuilderSetSchemaTemplate = ` +var tableSqlBuilderSetSchemaTemplate = `package {{package}} + func {{setSchemaMethodName}}(schema string) { {{- range .}} {{ .InstanceName }} = {{ .InstanceName }}.FromSchema(schema) diff --git a/generator/template/process.go b/generator/template/process.go index edac0cb..de85d71 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -3,7 +3,6 @@ package template import ( "bytes" "fmt" - "os" "path" "strings" "text/template" @@ -63,52 +62,6 @@ func processSQLBuilder(dirPath string, dialect jet.Dialect, schemaMetaData metad processTableSQLBuilder("table", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.TablesMetaData, sqlBuilderTemplate) processTableSQLBuilder("view", sqlBuilderPath, dialect, schemaMetaData, schemaMetaData.ViewsMetaData, sqlBuilderTemplate) processEnumSQLBuilder(sqlBuilderPath, dialect, schemaMetaData.EnumsMetaData, sqlBuilderTemplate) - processTableSQLBuilderSetSchema(sqlBuilderPath, schemaMetaData, sqlBuilderTemplate) -} - -func processTableSQLBuilderSetSchema(dirPath string, schemaMetadata metadata.Schema, builderTemplate SQLBuilder) { - - var builders []TableSQLBuilder - for _, tm := range schemaMetadata.TablesMetaData { - - table := builderTemplate.Table(tm) - if table.Skip { - continue - } - - builders = append(builders, table) - } - - if len(builders) == 0 { - return - } - - err := utils.EnsureDirPath(dirPath) - throw.OnError(err) - - fmt.Println("Generating global `SetSchema` method") - schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) - - 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, - template.FuncMap{ - "setSchemaMethodName": func() string { - return "Set" + schemaIdentifier + "Schema" - }, - }, - ) - 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) { @@ -166,6 +119,8 @@ func processTableSQLBuilder(fileTypes, dirPath string, fmt.Printf("Generating %s sql builder files\n", fileTypes) + var generatedBuilders []TableSQLBuilder + for _, tableMetaData := range tablesMetaData { var tableSQLBuilder TableSQLBuilder @@ -217,7 +172,38 @@ func processTableSQLBuilder(fileTypes, dirPath string, err = utils.SaveGoFile(tableSQLBuilderPath, tableSQLBuilder.FileName, text) throw.OnError(err) + + generatedBuilders = append(generatedBuilders, tableSQLBuilder) } + + if len(generatedBuilders) > 0 { + generateSetSchema(dirPath, fileTypes, schemaMetaData, generatedBuilders) + } +} + +func generateSetSchema(dirPath, fileTypes string, schemaMetadata metadata.Schema, builders []TableSQLBuilder) { + + basePath := path.Join(dirPath, builders[0].Path) + err := utils.EnsureDirPath(basePath) + throw.OnError(err) + + schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) + methodName := fmt.Sprintf("Set%sSchema", schemaIdentifier) + + fmt.Printf("Generating global `%s` method for %s\n", methodName, fileTypes) + + text, err := generateTemplate( + autoGenWarningTemplate+tableSqlBuilderSetSchemaTemplate, + builders, + template.FuncMap{ + "package": func() string { return builders[0].PackageName() }, + "setSchemaMethodName": func() string { return methodName }, + }, + ) + throw.OnError(err) + + err = utils.SaveGoFile(basePath, fileTypes, text) + throw.OnError(err) } func insertedRowAlias(dialect jet.Dialect) string { diff --git a/tests/mysql/generator_test.go b/tests/mysql/generator_test.go index 5c57be9..8f2c3b7 100644 --- a/tests/mysql/generator_test.go +++ b/tests/mysql/generator_test.go @@ -133,12 +133,12 @@ func TestIgnoreTablesViewsEnums(t *testing.T) { tableSQLBuilderFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/table") require.NoError(t, err) testutils.AssertFileNamesEqual(t, tableSQLBuilderFiles, "customer.go", "film.go", "film_actor.go", - "film_category.go", "film_text.go", "inventory.go", "language.go", "payment.go") + "film_category.go", "film_text.go", "inventory.go", "language.go", "payment.go", "table.go") viewSQLBuilderFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/view") require.NoError(t, err) testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "nicer_but_slower_film_list.go", - "sales_by_film_category.go", "sales_by_store.go", "staff_list.go") + "sales_by_film_category.go", "sales_by_store.go", "staff_list.go", "view.go") enumFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/enum") require.NoError(t, err) @@ -162,18 +162,20 @@ func assertGeneratedFiles(t *testing.T) { testutils.AssertFileNamesEqual(t, tableSQLBuilderFiles, "actor.go", "address.go", "category.go", "city.go", "country.go", "customer.go", "film.go", "film_actor.go", "film_category.go", "film_text.go", "inventory.go", "language.go", - "payment.go", "rental.go", "staff.go", "store.go") + "payment.go", "rental.go", "staff.go", "store.go", "table.go") testutils.AssertFileContent(t, genTestDir3+"/dvds/table/actor.go", actorSQLBuilderFile) + testutils.AssertFileContent(t, genTestDir3+"/dvds/table/table.go", tableSetSchemaFile) // View SQL Builder files viewSQLBuilderFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/view") require.NoError(t, err) testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "actor_info.go", "film_list.go", "nicer_but_slower_film_list.go", - "sales_by_film_category.go", "customer_list.go", "sales_by_store.go", "staff_list.go") + "sales_by_film_category.go", "customer_list.go", "sales_by_store.go", "staff_list.go", "view.go") testutils.AssertFileContent(t, genTestDir3+"/dvds/view/actor_info.go", actorInfoSQLBuilderFile) + testutils.AssertFileContent(t, genTestDir3+"/dvds/view/view.go", viewSetSchemaFile) // Enums SQL Builder files enumFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/enum") @@ -308,6 +310,17 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable { MutableColumns: mutableColumns, } } +` + +var tableSetSchemaFile = ` +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table func SetDvdsSchema(schema string) { Actor = Actor.FromSchema(schema) @@ -437,3 +450,23 @@ func newActorInfoTableImpl(schemaName, tableName, alias string) actorInfoTable { } } ` +var viewSetSchemaFile = ` +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package view + +func SetDvdsSchema(schema string) { + ActorInfo = ActorInfo.FromSchema(schema) + CustomerList = CustomerList.FromSchema(schema) + FilmList = FilmList.FromSchema(schema) + NicerButSlowerFilmList = NicerButSlowerFilmList.FromSchema(schema) + SalesByFilmCategory = SalesByFilmCategory.FromSchema(schema) + SalesByStore = SalesByStore.FromSchema(schema) + StaffList = StaffList.FromSchema(schema) +} +` diff --git a/tests/postgres/generator_test.go b/tests/postgres/generator_test.go index 0824103..7222b81 100644 --- a/tests/postgres/generator_test.go +++ b/tests/postgres/generator_test.go @@ -153,14 +153,14 @@ func TestGeneratorIgnoreTables(t *testing.T) { testutils.AssertFileNamesEqual(t, tableSQLBuilderFiles, "category.go", "customer.go", "film_actor.go", "film_category.go", "inventory.go", "language.go", - "payment.go", "rental.go", "staff.go", "store.go") + "payment.go", "rental.go", "staff.go", "store.go", "table.go") // View SQL Builder files viewSQLBuilderFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/view") require.NoError(t, err) testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "nicer_but_slower_film_list.go", - "sales_by_film_category.go", "customer_list.go", "sales_by_store.go") + "sales_by_film_category.go", "customer_list.go", "sales_by_store.go", "view.go") // Enums SQL Builder files _, err = ioutil.ReadDir("./.gentestdata2/jetdb/dvds/enum") @@ -241,18 +241,20 @@ func assertGeneratedFiles(t *testing.T) { testutils.AssertFileNamesEqual(t, tableSQLBuilderFiles, "actor.go", "address.go", "category.go", "city.go", "country.go", "customer.go", "film.go", "film_actor.go", "film_category.go", "inventory.go", "language.go", - "payment.go", "rental.go", "staff.go", "store.go") + "payment.go", "rental.go", "staff.go", "store.go", "table.go") testutils.AssertFileContent(t, "./.gentestdata2/jetdb/dvds/table/actor.go", actorSQLBuilderFile) + testutils.AssertFileContent(t, "./.gentestdata2/jetdb/dvds/table/table.go", actorSQLBuilderTableFile) // View SQL Builder files viewSQLBuilderFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/view") require.NoError(t, err) testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "actor_info.go", "film_list.go", "nicer_but_slower_film_list.go", - "sales_by_film_category.go", "customer_list.go", "sales_by_store.go", "staff_list.go") + "sales_by_film_category.go", "customer_list.go", "sales_by_store.go", "staff_list.go", "view.go") testutils.AssertFileContent(t, "./.gentestdata2/jetdb/dvds/view/actor_info.go", actorInfoSQLBuilderFile) + testutils.AssertFileContent(t, "./.gentestdata2/jetdb/dvds/view/view.go", actorInfoSQLBuilderViewFile) // Enums SQL Builder files enumFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/enum") @@ -388,6 +390,35 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable { } ` +var actorSQLBuilderTableFile = ` +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +func SetDvdsSchema(schema string) { + Film = Film.FromSchema(schema) + Address = Address.FromSchema(schema) + Actor = Actor.FromSchema(schema) + Category = Category.FromSchema(schema) + City = City.FromSchema(schema) + Country = Country.FromSchema(schema) + Customer = Customer.FromSchema(schema) + FilmActor = FilmActor.FromSchema(schema) + FilmCategory = FilmCategory.FromSchema(schema) + Inventory = Inventory.FromSchema(schema) + Language = Language.FromSchema(schema) + Rental = Rental.FromSchema(schema) + Staff = Staff.FromSchema(schema) + Payment = Payment.FromSchema(schema) + Store = Store.FromSchema(schema) +} +` + var actorModelFile = ` // // Code generated by go-jet DO NOT EDIT. @@ -497,6 +528,27 @@ func newActorInfoTableImpl(schemaName, tableName, alias string) actorInfoTable { } ` +var actorInfoSQLBuilderViewFile = ` +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package view + +func SetDvdsSchema(schema string) { + ActorInfo = ActorInfo.FromSchema(schema) + CustomerList = CustomerList.FromSchema(schema) + FilmList = FilmList.FromSchema(schema) + NicerButSlowerFilmList = NicerButSlowerFilmList.FromSchema(schema) + SalesByFilmCategory = SalesByFilmCategory.FromSchema(schema) + SalesByStore = SalesByStore.FromSchema(schema) + StaffList = StaffList.FromSchema(schema) +} +` + func TestGeneratedAllTypesSQLBuilderFiles(t *testing.T) { skipForCockroachDB(t) @@ -523,7 +575,7 @@ func TestGeneratedAllTypesSQLBuilderFiles(t *testing.T) { require.NoError(t, err) testutils.AssertFileNamesEqual(t, tableFiles, "all_types.go", "employee.go", "link.go", - "person.go", "person_phone.go", "weird_names_table.go", "user.go", "floats.go") + "person.go", "person_phone.go", "weird_names_table.go", "user.go", "floats.go", "table.go") testutils.AssertFileContent(t, tableDir+"/all_types.go", allTypesTableContent) } @@ -914,15 +966,4 @@ func newAllTypesTableImpl(schemaName, tableName, alias string) allTypesTable { MutableColumns: mutableColumns, } } - -func SetTestSampleSchema(schema string) { - AllTypes = AllTypes.FromSchema(schema) - Link = Link.FromSchema(schema) - Employee = Employee.FromSchema(schema) - Person = Person.FromSchema(schema) - PersonPhone = PersonPhone.FromSchema(schema) - WeirdNamesTable = WeirdNamesTable.FromSchema(schema) - User = User.FromSchema(schema) - Floats = Floats.FromSchema(schema) -} ` diff --git a/tests/sqlite/generator_test.go b/tests/sqlite/generator_test.go index 9b711a3..46ec50b 100644 --- a/tests/sqlite/generator_test.go +++ b/tests/sqlite/generator_test.go @@ -92,12 +92,12 @@ func TestCmdGeneratorIgnoreTablesViewsEnums(t *testing.T) { require.NoError(t, err) testutils.AssertFileNamesEqual(t, tableSQLBuilderFiles, "country.go", "customer.go", "film_actor.go", "film_category.go", "film_text.go", "inventory.go", "language.go", - "payment.go", "staff.go") + "payment.go", "staff.go", "table.go") viewSQLBuilderFiles, err := ioutil.ReadDir(genDestDir + "/view") require.NoError(t, err) testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "sales_by_film_category.go", - "sales_by_store.go") + "sales_by_store.go", "view.go") modelFiles, err := ioutil.ReadDir(genDestDir + "/model") require.NoError(t, err) @@ -114,18 +114,20 @@ func assertGeneratedFiles(t *testing.T) { testutils.AssertFileNamesEqual(t, tableSQLBuilderFiles, "actor.go", "address.go", "category.go", "city.go", "country.go", "customer.go", "film.go", "film_actor.go", "film_category.go", "film_text.go", "inventory.go", "language.go", - "payment.go", "rental.go", "staff.go", "store.go") + "payment.go", "rental.go", "staff.go", "store.go", "table.go") testutils.AssertFileContent(t, genDestDir+"/table/actor.go", actorSQLBuilderFile) + testutils.AssertFileContent(t, genDestDir+"/table/table.go", actorSQLBuilderTableFile) // View SQL Builder files viewSQLBuilderFiles, err := ioutil.ReadDir(genDestDir + "/view") require.NoError(t, err) testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "film_list.go", "sales_by_film_category.go", - "customer_list.go", "sales_by_store.go", "staff_list.go") + "customer_list.go", "sales_by_store.go", "staff_list.go", "view.go") testutils.AssertFileContent(t, genDestDir+"/view/film_list.go", filmListSQLBuilderFile) + testutils.AssertFileContent(t, genDestDir+"/view/view.go", filmListSQLBuilderViewFile) // Model files modelFiles, err := ioutil.ReadDir(genDestDir + "/model") @@ -225,6 +227,16 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable { MutableColumns: mutableColumns, } } +` +const actorSQLBuilderTableFile = ` +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table func SetSchema(schema string) { Actor = Actor.FromSchema(schema) @@ -345,6 +357,25 @@ func newFilmListTableImpl(schemaName, tableName, alias string) filmListTable { } ` +const filmListSQLBuilderViewFile = ` +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package view + +func SetSchema(schema string) { + CustomerList = CustomerList.FromSchema(schema) + FilmList = FilmList.FromSchema(schema) + SalesByFilmCategory = SalesByFilmCategory.FromSchema(schema) + SalesByStore = SalesByStore.FromSchema(schema) + StaffList = StaffList.FromSchema(schema) +} +` + const addressModelFile = ` // // Code generated by go-jet DO NOT EDIT. From 3f9ae1cabb0b775125c8cb168ce03b372a6291ff Mon Sep 17 00:00:00 2001 From: Jay Date: Sun, 4 Dec 2022 20:22:07 +0530 Subject: [PATCH 07/10] Removed unnecessary EnsureDirPath call --- generator/template/process.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/generator/template/process.go b/generator/template/process.go index de85d71..a37b374 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -184,8 +184,6 @@ func processTableSQLBuilder(fileTypes, dirPath string, func generateSetSchema(dirPath, fileTypes string, schemaMetadata metadata.Schema, builders []TableSQLBuilder) { basePath := path.Join(dirPath, builders[0].Path) - err := utils.EnsureDirPath(basePath) - throw.OnError(err) schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) methodName := fmt.Sprintf("Set%sSchema", schemaIdentifier) From 04c1a51ba7d709eb6ec2ef833a3667f509375011 Mon Sep 17 00:00:00 2001 From: Jay Date: Sun, 4 Dec 2022 20:33:55 +0530 Subject: [PATCH 08/10] Changed SetSchema to UseSchema --- generator/template/file_templates.go | 5 ++++- generator/template/process.go | 10 +++++----- tests/mysql/generator_test.go | 10 ++++++++-- tests/postgres/generator_test.go | 10 ++++++++-- tests/sqlite/generator_test.go | 10 ++++++++-- 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index 209113e..3a4eae9 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -99,7 +99,10 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st var tableSqlBuilderSetSchemaTemplate = `package {{package}} -func {{setSchemaMethodName}}(schema string) { +// {{schemaMethodName}} changes all global tables/views with the value returned +// returned by calling FromSchema on them. Passing an empty string to this function +// will cause queries to be generated without any table/view alias. +func {{schemaMethodName}}(schema string) { {{- range .}} {{ .InstanceName }} = {{ .InstanceName }}.FromSchema(schema) {{- end}} diff --git a/generator/template/process.go b/generator/template/process.go index a37b374..c661ebd 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -177,16 +177,16 @@ func processTableSQLBuilder(fileTypes, dirPath string, } if len(generatedBuilders) > 0 { - generateSetSchema(dirPath, fileTypes, schemaMetaData, generatedBuilders) + generateUseSchemaFunc(dirPath, fileTypes, schemaMetaData, generatedBuilders) } } -func generateSetSchema(dirPath, fileTypes string, schemaMetadata metadata.Schema, builders []TableSQLBuilder) { +func generateUseSchemaFunc(dirPath, fileTypes string, schemaMetadata metadata.Schema, builders []TableSQLBuilder) { basePath := path.Join(dirPath, builders[0].Path) schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) - methodName := fmt.Sprintf("Set%sSchema", schemaIdentifier) + methodName := fmt.Sprintf("Use%sSchema", schemaIdentifier) fmt.Printf("Generating global `%s` method for %s\n", methodName, fileTypes) @@ -194,8 +194,8 @@ func generateSetSchema(dirPath, fileTypes string, schemaMetadata metadata.Schema autoGenWarningTemplate+tableSqlBuilderSetSchemaTemplate, builders, template.FuncMap{ - "package": func() string { return builders[0].PackageName() }, - "setSchemaMethodName": func() string { return methodName }, + "package": func() string { return builders[0].PackageName() }, + "schemaMethodName": func() string { return methodName }, }, ) throw.OnError(err) diff --git a/tests/mysql/generator_test.go b/tests/mysql/generator_test.go index 8f2c3b7..ebf795c 100644 --- a/tests/mysql/generator_test.go +++ b/tests/mysql/generator_test.go @@ -322,7 +322,10 @@ var tableSetSchemaFile = ` package table -func SetDvdsSchema(schema string) { +// UseDvdsSchema changes all global tables/views with the value returned +// returned by calling FromSchema on them. Passing an empty string to this function +// will cause queries to be generated without any table/view alias. +func UseDvdsSchema(schema string) { Actor = Actor.FromSchema(schema) Address = Address.FromSchema(schema) Category = Category.FromSchema(schema) @@ -460,7 +463,10 @@ var viewSetSchemaFile = ` package view -func SetDvdsSchema(schema string) { +// UseDvdsSchema changes all global tables/views with the value returned +// returned by calling FromSchema on them. Passing an empty string to this function +// will cause queries to be generated without any table/view alias. +func UseDvdsSchema(schema string) { ActorInfo = ActorInfo.FromSchema(schema) CustomerList = CustomerList.FromSchema(schema) FilmList = FilmList.FromSchema(schema) diff --git a/tests/postgres/generator_test.go b/tests/postgres/generator_test.go index 7222b81..0a4f92a 100644 --- a/tests/postgres/generator_test.go +++ b/tests/postgres/generator_test.go @@ -400,7 +400,10 @@ var actorSQLBuilderTableFile = ` package table -func SetDvdsSchema(schema string) { +// UseDvdsSchema changes all global tables/views with the value returned +// returned by calling FromSchema on them. Passing an empty string to this function +// will cause queries to be generated without any table/view alias. +func UseDvdsSchema(schema string) { Film = Film.FromSchema(schema) Address = Address.FromSchema(schema) Actor = Actor.FromSchema(schema) @@ -538,7 +541,10 @@ var actorInfoSQLBuilderViewFile = ` package view -func SetDvdsSchema(schema string) { +// UseDvdsSchema changes all global tables/views with the value returned +// returned by calling FromSchema on them. Passing an empty string to this function +// will cause queries to be generated without any table/view alias. +func UseDvdsSchema(schema string) { ActorInfo = ActorInfo.FromSchema(schema) CustomerList = CustomerList.FromSchema(schema) FilmList = FilmList.FromSchema(schema) diff --git a/tests/sqlite/generator_test.go b/tests/sqlite/generator_test.go index 46ec50b..c987fc1 100644 --- a/tests/sqlite/generator_test.go +++ b/tests/sqlite/generator_test.go @@ -238,7 +238,10 @@ const actorSQLBuilderTableFile = ` package table -func SetSchema(schema string) { +// UseSchema changes all global tables/views with the value returned +// returned by calling FromSchema on them. Passing an empty string to this function +// will cause queries to be generated without any table/view alias. +func UseSchema(schema string) { Actor = Actor.FromSchema(schema) Address = Address.FromSchema(schema) Category = Category.FromSchema(schema) @@ -367,7 +370,10 @@ const filmListSQLBuilderViewFile = ` package view -func SetSchema(schema string) { +// UseSchema changes all global tables/views with the value returned +// returned by calling FromSchema on them. Passing an empty string to this function +// will cause queries to be generated without any table/view alias. +func UseSchema(schema string) { CustomerList = CustomerList.FromSchema(schema) FilmList = FilmList.FromSchema(schema) SalesByFilmCategory = SalesByFilmCategory.FromSchema(schema) From 1bf48d640a22fd5b4531bb90a9be9c19a4fb7fcb Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 5 Dec 2022 17:26:52 +0530 Subject: [PATCH 09/10] Renamed generated schema func to UseSchema. --- generator/template/file_templates.go | 4 ++-- generator/template/process.go | 13 ++++--------- tests/mysql/generator_test.go | 8 ++++---- tests/mysql/update_dvds_test.go | 25 ++++++++++++++++++++++++ tests/mysql/update_test.go | 29 +++++++--------------------- tests/postgres/generator_test.go | 8 ++++---- 6 files changed, 46 insertions(+), 41 deletions(-) create mode 100644 tests/mysql/update_dvds_test.go diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index 3a4eae9..db30ab7 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -99,10 +99,10 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st var tableSqlBuilderSetSchemaTemplate = `package {{package}} -// {{schemaMethodName}} changes all global tables/views with the value returned +// UseSchema changes all global tables/views with the value returned // returned by calling FromSchema on them. Passing an empty string to this function // will cause queries to be generated without any table/view alias. -func {{schemaMethodName}}(schema string) { +func UseSchema(schema string) { {{- range .}} {{ .InstanceName }} = {{ .InstanceName }}.FromSchema(schema) {{- end}} diff --git a/generator/template/process.go b/generator/template/process.go index c661ebd..417c0b2 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -177,25 +177,20 @@ func processTableSQLBuilder(fileTypes, dirPath string, } if len(generatedBuilders) > 0 { - generateUseSchemaFunc(dirPath, fileTypes, schemaMetaData, generatedBuilders) + generateUseSchemaFunc(dirPath, fileTypes, generatedBuilders) } } -func generateUseSchemaFunc(dirPath, fileTypes string, schemaMetadata metadata.Schema, builders []TableSQLBuilder) { +func generateUseSchemaFunc(dirPath, fileTypes string, builders []TableSQLBuilder) { basePath := path.Join(dirPath, builders[0].Path) - schemaIdentifier := utils.ToGoIdentifier(schemaMetadata.Name) - methodName := fmt.Sprintf("Use%sSchema", schemaIdentifier) - - fmt.Printf("Generating global `%s` method for %s\n", methodName, fileTypes) - + fmt.Printf("Generating global `UseSchema` method for %s\n", fileTypes) text, err := generateTemplate( autoGenWarningTemplate+tableSqlBuilderSetSchemaTemplate, builders, template.FuncMap{ - "package": func() string { return builders[0].PackageName() }, - "schemaMethodName": func() string { return methodName }, + "package": func() string { return builders[0].PackageName() }, }, ) throw.OnError(err) diff --git a/tests/mysql/generator_test.go b/tests/mysql/generator_test.go index ebf795c..9e1403d 100644 --- a/tests/mysql/generator_test.go +++ b/tests/mysql/generator_test.go @@ -322,10 +322,10 @@ var tableSetSchemaFile = ` package table -// UseDvdsSchema changes all global tables/views with the value returned +// UseSchema changes all global tables/views with the value returned // returned by calling FromSchema on them. Passing an empty string to this function // will cause queries to be generated without any table/view alias. -func UseDvdsSchema(schema string) { +func UseSchema(schema string) { Actor = Actor.FromSchema(schema) Address = Address.FromSchema(schema) Category = Category.FromSchema(schema) @@ -463,10 +463,10 @@ var viewSetSchemaFile = ` package view -// UseDvdsSchema changes all global tables/views with the value returned +// UseSchema changes all global tables/views with the value returned // returned by calling FromSchema on them. Passing an empty string to this function // will cause queries to be generated without any table/view alias. -func UseDvdsSchema(schema string) { +func UseSchema(schema string) { ActorInfo = ActorInfo.FromSchema(schema) CustomerList = CustomerList.FromSchema(schema) FilmList = FilmList.FromSchema(schema) diff --git a/tests/mysql/update_dvds_test.go b/tests/mysql/update_dvds_test.go new file mode 100644 index 0000000..ea9149d --- /dev/null +++ b/tests/mysql/update_dvds_test.go @@ -0,0 +1,25 @@ +package mysql + +import ( + "testing" + + "github.com/go-jet/jet/v2/internal/testutils" + . "github.com/go-jet/jet/v2/mysql" + . "github.com/go-jet/jet/v2/tests/.gentestdata/mysql/dvds/table" +) + +func TestUpdateWithJoin(t *testing.T) { + statement := Staff.INNER_JOIN(Address, Address.AddressID.EQ(Staff.AddressID)). + UPDATE(Staff.LastName). + SET(String("New staff name")). + WHERE(Staff.StaffID.EQ(Int(1))) + + testutils.AssertStatementSql(t, statement, ` +UPDATE dvds.staff +INNER JOIN dvds.address ON (address.address_id = staff.address_id) +SET last_name = ? +WHERE staff.staff_id = ?; +`, "New staff name", int64(1)) + + testutils.AssertExecAndRollback(t, statement, db) +} diff --git a/tests/mysql/update_test.go b/tests/mysql/update_test.go index 76844eb..909d884 100644 --- a/tests/mysql/update_test.go +++ b/tests/mysql/update_test.go @@ -3,14 +3,15 @@ package mysql import ( "context" "database/sql" - "github.com/go-jet/jet/v2/internal/testutils" - . "github.com/go-jet/jet/v2/mysql" - . "github.com/go-jet/jet/v2/tests/.gentestdata/mysql/dvds/table" - "github.com/go-jet/jet/v2/tests/.gentestdata/mysql/test_sample/model" - . "github.com/go-jet/jet/v2/tests/.gentestdata/mysql/test_sample/table" - "github.com/stretchr/testify/require" "testing" "time" + + "github.com/stretchr/testify/require" + + "github.com/go-jet/jet/v2/internal/testutils" + . "github.com/go-jet/jet/v2/mysql" + "github.com/go-jet/jet/v2/tests/.gentestdata/mysql/test_sample/model" + . "github.com/go-jet/jet/v2/tests/.gentestdata/mysql/test_sample/table" ) func TestUpdateValues(t *testing.T) { @@ -259,22 +260,6 @@ func TestUpdateExecContext(t *testing.T) { require.Error(t, err, "context deadline exceeded") } -func TestUpdateWithJoin(t *testing.T) { - statement := Staff.INNER_JOIN(Address, Address.AddressID.EQ(Staff.AddressID)). - UPDATE(Staff.LastName). - SET(String("New staff name")). - WHERE(Staff.StaffID.EQ(Int(1))) - - testutils.AssertStatementSql(t, statement, ` -UPDATE dvds.staff -INNER JOIN dvds.address ON (address.address_id = staff.address_id) -SET last_name = ? -WHERE staff.staff_id = ?; -`, "New staff name", int64(1)) - - testutils.AssertExecAndRollback(t, statement, db) -} - func TestUpdateOptimizerHints(t *testing.T) { stmt := Link.UPDATE(Link.AllColumns). diff --git a/tests/postgres/generator_test.go b/tests/postgres/generator_test.go index 0a4f92a..2139c82 100644 --- a/tests/postgres/generator_test.go +++ b/tests/postgres/generator_test.go @@ -400,10 +400,10 @@ var actorSQLBuilderTableFile = ` package table -// UseDvdsSchema changes all global tables/views with the value returned +// UseSchema changes all global tables/views with the value returned // returned by calling FromSchema on them. Passing an empty string to this function // will cause queries to be generated without any table/view alias. -func UseDvdsSchema(schema string) { +func UseSchema(schema string) { Film = Film.FromSchema(schema) Address = Address.FromSchema(schema) Actor = Actor.FromSchema(schema) @@ -541,10 +541,10 @@ var actorInfoSQLBuilderViewFile = ` package view -// UseDvdsSchema changes all global tables/views with the value returned +// UseSchema changes all global tables/views with the value returned // returned by calling FromSchema on them. Passing an empty string to this function // will cause queries to be generated without any table/view alias. -func UseDvdsSchema(schema string) { +func UseSchema(schema string) { ActorInfo = ActorInfo.FromSchema(schema) CustomerList = CustomerList.FromSchema(schema) FilmList = FilmList.FromSchema(schema) From 9185bb8a76d05c93ccd909fad0f13c0fffd271e3 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 5 Dec 2022 22:45:45 +0530 Subject: [PATCH 10/10] added order by table_name clause to mysql and postgres query sets --- generator/mysql/query_set.go | 6 ++++-- generator/postgres/query_set.go | 4 +++- tests/postgres/generator_test.go | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/generator/mysql/query_set.go b/generator/mysql/query_set.go index 5847be4..8da3f9c 100644 --- a/generator/mysql/query_set.go +++ b/generator/mysql/query_set.go @@ -3,10 +3,11 @@ package mysql import ( "context" "database/sql" + "strings" + "github.com/go-jet/jet/v2/generator/metadata" "github.com/go-jet/jet/v2/internal/utils/throw" "github.com/go-jet/jet/v2/qrm" - "strings" ) // mySqlQuerySet is dialect query set for MySQL @@ -16,7 +17,8 @@ func (m mySqlQuerySet) GetTablesMetaData(db *sql.DB, schemaName string, tableTyp query := ` SELECT table_name as "table.name" FROM INFORMATION_SCHEMA.tables -WHERE table_schema = ? and table_type = ?; +WHERE table_schema = ? and table_type = ? +ORDER BY table_name; ` var tables []metadata.Table diff --git a/generator/postgres/query_set.go b/generator/postgres/query_set.go index da48505..0785ac4 100644 --- a/generator/postgres/query_set.go +++ b/generator/postgres/query_set.go @@ -3,6 +3,7 @@ package postgres import ( "context" "database/sql" + "github.com/go-jet/jet/v2/generator/metadata" "github.com/go-jet/jet/v2/internal/utils/throw" "github.com/go-jet/jet/v2/qrm" @@ -15,7 +16,8 @@ func (p postgresQuerySet) GetTablesMetaData(db *sql.DB, schemaName string, table query := ` SELECT table_name as "table.name" FROM information_schema.tables -WHERE table_schema = $1 and table_type = $2; +WHERE table_schema = $1 and table_type = $2 +ORDER BY table_name; ` var tables []metadata.Table diff --git a/tests/postgres/generator_test.go b/tests/postgres/generator_test.go index 2139c82..fb757ae 100644 --- a/tests/postgres/generator_test.go +++ b/tests/postgres/generator_test.go @@ -404,20 +404,20 @@ package table // returned by calling FromSchema on them. Passing an empty string to this function // will cause queries to be generated without any table/view alias. func UseSchema(schema string) { - Film = Film.FromSchema(schema) - Address = Address.FromSchema(schema) Actor = Actor.FromSchema(schema) + Address = Address.FromSchema(schema) Category = Category.FromSchema(schema) City = City.FromSchema(schema) Country = Country.FromSchema(schema) Customer = Customer.FromSchema(schema) + Film = Film.FromSchema(schema) FilmActor = FilmActor.FromSchema(schema) FilmCategory = FilmCategory.FromSchema(schema) Inventory = Inventory.FromSchema(schema) Language = Language.FromSchema(schema) + Payment = Payment.FromSchema(schema) Rental = Rental.FromSchema(schema) Staff = Staff.FromSchema(schema) - Payment = Payment.FromSchema(schema) Store = Store.FromSchema(schema) } `