diff --git a/cmd/jet/main.go b/cmd/jet/main.go index 7e8e299..4f29a07 100644 --- a/cmd/jet/main.go +++ b/cmd/jet/main.go @@ -3,6 +3,9 @@ package main import ( "flag" "fmt" + "os" + "strings" + "github.com/go-jet/jet/v2/generator/metadata" sqlitegen "github.com/go-jet/jet/v2/generator/sqlite" "github.com/go-jet/jet/v2/generator/template" @@ -11,8 +14,6 @@ import ( "github.com/go-jet/jet/v2/mysql" postgres2 "github.com/go-jet/jet/v2/postgres" "github.com/go-jet/jet/v2/sqlite" - "os" - "strings" mysqlgen "github.com/go-jet/jet/v2/generator/mysql" postgresgen "github.com/go-jet/jet/v2/generator/postgres" @@ -112,8 +113,9 @@ func main() { switch source { case "postgresql", "postgres": + generatorTemplate := genTemplate(postgres2.Dialect, ignoreTablesList, ignoreViewsList, ignoreEnumsList) if dsn != "" { - err = postgresgen.GenerateDSN(dsn, schemaName, destDir) + err = postgresgen.GenerateDSN(dsn, schemaName, destDir, generatorTemplate) break } dbConn := postgresgen.DBConnection{ @@ -131,12 +133,13 @@ func main() { err = postgresgen.Generate( destDir, dbConn, - genTemplate(postgres2.Dialect, ignoreTablesList, ignoreViewsList, ignoreEnumsList), + generatorTemplate, ) case "mysql", "mysqlx", "mariadb": + generatorTemplate := genTemplate(mysql.Dialect, ignoreTablesList, ignoreViewsList, ignoreEnumsList) if dsn != "" { - err = mysqlgen.GenerateDSN(dsn, destDir) + err = mysqlgen.GenerateDSN(dsn, destDir, generatorTemplate) break } dbConn := mysqlgen.DBConnection{ @@ -151,7 +154,7 @@ func main() { err = mysqlgen.Generate( destDir, dbConn, - genTemplate(mysql.Dialect, ignoreTablesList, ignoreViewsList, ignoreEnumsList), + generatorTemplate, ) case "sqlite": if dsn == "" { diff --git a/tests/mysql/generator_test.go b/tests/mysql/generator_test.go index a414df3..5bbe01a 100644 --- a/tests/mysql/generator_test.go +++ b/tests/mysql/generator_test.go @@ -88,45 +88,70 @@ func TestCmdGenerator(t *testing.T) { } func TestIgnoreTablesViewsEnums(t *testing.T) { - cmd := exec.Command("jet", - "-source=MySQL", - "-dbname=dvds", - "-host="+dbconfig.MySqLHost, - "-port="+strconv.Itoa(dbconfig.MySQLPort), - "-user="+dbconfig.MySQLUser, - "-password="+dbconfig.MySQLPassword, - "-ignore-tables=actor,ADDRESS,Category, city ,country,staff,store,rental", - "-ignore-views=actor_info,CUSTomER_LIST, film_list", - "-ignore-enums=film_list_rating,film_rating", - "-path="+genTestDir3) + tests := []struct { + name string + args []string + }{ + { + name: "with dsn", + args: []string{ + "-dsn=mysql://" + dbconfig.MySQLConnectionString(sourceIsMariaDB(), "dvds"), + "-ignore-tables=actor,ADDRESS,Category, city ,country,staff,store,rental", + "-ignore-views=actor_info,CUSTomER_LIST, film_list", + "-ignore-enums=film_list_rating,film_rating", + "-path=" + genTestDir3, + }, + }, + { + name: "without dsn", + args: []string{ + "-source=MySQL", + "-dbname=dvds", + "-host=" + dbconfig.MySqLHost, + "-port=" + strconv.Itoa(dbconfig.MySQLPort), + "-user=" + dbconfig.MySQLUser, + "-password=" + dbconfig.MySQLPassword, + "-ignore-tables=actor,ADDRESS,Category, city ,country,staff,store,rental", + "-ignore-views=actor_info,CUSTomER_LIST, film_list", + "-ignore-enums=film_list_rating,film_rating", + "-path=" + genTestDir3, + }, + }, + } - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := exec.Command("jet", tt.args...) - err := cmd.Run() - require.NoError(t, err) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout - 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") + err := cmd.Run() + require.NoError(t, err) - 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") + 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") - enumFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/enum") - require.NoError(t, err) - testutils.AssertFileNamesEqual(t, enumFiles, "nicer_but_slower_film_list_rating.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") - modelFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/model") - require.NoError(t, err) + enumFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/enum") + require.NoError(t, err) + testutils.AssertFileNamesEqual(t, enumFiles, "nicer_but_slower_film_list_rating.go") - testutils.AssertFileNamesEqual(t, modelFiles, - "customer.go", "film.go", "film_actor.go", "film_category.go", "film_text.go", "inventory.go", "language.go", - "payment.go", "nicer_but_slower_film_list_rating.go", "nicer_but_slower_film_list.go", "sales_by_film_category.go", - "sales_by_store.go", "staff_list.go") + modelFiles, err := ioutil.ReadDir(genTestDir3 + "/dvds/model") + require.NoError(t, err) + + testutils.AssertFileNamesEqual(t, modelFiles, + "customer.go", "film.go", "film_actor.go", "film_category.go", "film_text.go", "inventory.go", "language.go", + "payment.go", "nicer_but_slower_film_list_rating.go", "nicer_but_slower_film_list.go", "sales_by_film_category.go", + "sales_by_store.go", "staff_list.go") + }) + } } func assertGeneratedFiles(t *testing.T) { diff --git a/tests/postgres/generator_test.go b/tests/postgres/generator_test.go index 852745b..27fdb8e 100644 --- a/tests/postgres/generator_test.go +++ b/tests/postgres/generator_test.go @@ -93,56 +93,88 @@ func TestCmdGenerator(t *testing.T) { } func TestGeneratorIgnoreTables(t *testing.T) { - err := os.RemoveAll(genTestDir2) - require.NoError(t, err) + tests := []struct { + name string + args []string + }{ + { + name: "with dsn", + args: []string{ + "-dsn=" + fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable", + dbconfig.PgUser, + dbconfig.PgPassword, + dbconfig.PgHost, + dbconfig.PgPort, + "jetdb", + ), + "-schema=dvds", + "-ignore-tables=actor,ADDRESS,country, Film , cITY,", + "-ignore-views=Actor_info, FILM_LIST ,staff_list", + "-ignore-enums=mpaa_rating", + "-path=" + genTestDir2, + }, + }, + { + name: "without dsn", + args: []string{ + "-source=PostgreSQL", + "-host=localhost", + "-port=" + strconv.Itoa(dbconfig.PgPort), + "-user=jet", + "-password=jet", + "-dbname=jetdb", + "-schema=dvds", + "-ignore-tables=actor,ADDRESS,country, Film , cITY,", + "-ignore-views=Actor_info, FILM_LIST ,staff_list", + "-ignore-enums=mpaa_rating", + "-path=" + genTestDir2, + }, + }, + } - cmd := exec.Command("jet", - "-source=PostgreSQL", - "-host=localhost", - "-port="+strconv.Itoa(dbconfig.PgPort), - "-user=jet", - "-password=jet", - "-dbname=jetdb", - "-schema=dvds", - "-ignore-tables=actor,ADDRESS,country, Film , cITY,", - "-ignore-views=Actor_info, FILM_LIST ,staff_list", - "-ignore-enums=mpaa_rating", - "-path="+genTestDir2) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := os.RemoveAll(genTestDir2) + require.NoError(t, err) - fmt.Println(cmd.Args) - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout + cmd := exec.Command("jet", tt.args...) - err = cmd.Run() - require.NoError(t, err) + fmt.Println(cmd.Args) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout - // Table SQL Builder files - tableSQLBuilderFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/table") - require.NoError(t, err) + err = cmd.Run() + require.NoError(t, err) - 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") + // Table SQL Builder files + tableSQLBuilderFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/table") + require.NoError(t, err) - // View SQL Builder files - viewSQLBuilderFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/view") - require.NoError(t, err) + 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") - testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "nicer_but_slower_film_list.go", - "sales_by_film_category.go", "customer_list.go", "sales_by_store.go") + // View SQL Builder files + viewSQLBuilderFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/view") + require.NoError(t, err) - // Enums SQL Builder files - _, err = ioutil.ReadDir("./.gentestdata2/jetdb/dvds/enum") - require.Error(t, err, "open ./.gentestdata2/jetdb/dvds/enum: no such file or directory") + testutils.AssertFileNamesEqual(t, viewSQLBuilderFiles, "nicer_but_slower_film_list.go", + "sales_by_film_category.go", "customer_list.go", "sales_by_store.go") - modelFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/model") - require.NoError(t, err) + // Enums SQL Builder files + _, err = ioutil.ReadDir("./.gentestdata2/jetdb/dvds/enum") + require.Error(t, err, "open ./.gentestdata2/jetdb/dvds/enum: no such file or directory") - testutils.AssertFileNamesEqual(t, modelFiles, "category.go", - "customer.go", "film_actor.go", "film_category.go", "inventory.go", "language.go", - "payment.go", "rental.go", "staff.go", "store.go", - "nicer_but_slower_film_list.go", "sales_by_film_category.go", - "customer_list.go", "sales_by_store.go") + modelFiles, err := ioutil.ReadDir("./.gentestdata2/jetdb/dvds/model") + require.NoError(t, err) + + testutils.AssertFileNamesEqual(t, modelFiles, "category.go", + "customer.go", "film_actor.go", "film_category.go", "inventory.go", "language.go", + "payment.go", "rental.go", "staff.go", "store.go", + "nicer_but_slower_film_list.go", "sales_by_film_category.go", + "customer_list.go", "sales_by_store.go") + }) + } } func TestGenerator(t *testing.T) {