From 436a72ae5c4ddde12ae0b637d4ea0bdee66e32fa Mon Sep 17 00:00:00 2001 From: Josh Kaplinsky <37640086+joshkaplinsky@users.noreply.github.com> Date: Thu, 10 Apr 2025 09:02:23 -0400 Subject: [PATCH 1/4] feat: skip model and sql gen options in cli --- cmd/jet/main.go | 34 +++++++++++++--------- generator/template/model_template.go | 16 +++++++--- generator/template/sql_builder_template.go | 11 +++++-- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/cmd/jet/main.go b/cmd/jet/main.go index 243a40d..8512e43 100644 --- a/cmd/jet/main.go +++ b/cmd/jet/main.go @@ -5,24 +5,24 @@ package main import ( "flag" "fmt" - "github.com/go-jet/jet/v2/internal/utils/errfmt" - "github.com/go-jet/jet/v2/internal/utils/strslice" "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" - "github.com/go-jet/jet/v2/internal/jet" - "github.com/go-jet/jet/v2/mysql" - postgres2 "github.com/go-jet/jet/v2/postgres" - "github.com/go-jet/jet/v2/sqlite" - - mysqlgen "github.com/go-jet/jet/v2/generator/mysql" - postgresgen "github.com/go-jet/jet/v2/generator/postgres" _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" _ "github.com/mattn/go-sqlite3" + + "github.com/go-jet/jet/v2/generator/metadata" + mysqlgen "github.com/go-jet/jet/v2/generator/mysql" + postgresgen "github.com/go-jet/jet/v2/generator/postgres" + sqlitegen "github.com/go-jet/jet/v2/generator/sqlite" + "github.com/go-jet/jet/v2/generator/template" + "github.com/go-jet/jet/v2/internal/jet" + "github.com/go-jet/jet/v2/internal/utils/errfmt" + "github.com/go-jet/jet/v2/internal/utils/strslice" + "github.com/go-jet/jet/v2/mysql" + postgres2 "github.com/go-jet/jet/v2/postgres" + "github.com/go-jet/jet/v2/sqlite" ) var ( @@ -42,6 +42,9 @@ var ( ignoreViews string ignoreEnums string + skipModel bool + skipSQLBuilder bool + destDir string modelPkg string tablePkg string @@ -73,6 +76,8 @@ func init() { flag.StringVar(&ignoreTables, "ignore-tables", "", `Comma-separated list of tables to ignore.`) flag.StringVar(&ignoreViews, "ignore-views", "", `Comma-separated list of views to ignore.`) flag.StringVar(&ignoreEnums, "ignore-enums", "", `Comma-separated list of enums to ignore.`) + flag.BoolVar(&skipModel, "skip-model", false, `Skip model generation.`) + flag.BoolVar(&skipSQLBuilder, "skip-sql-builder", false, `Skip SQL builder generation.`) flag.StringVar(&destDir, "path", "", "Destination directory for files generated.") flag.StringVar(&modelPkg, "rel-model-path", "model", "Relative path for the Model files package from the destination directory.") @@ -178,6 +183,7 @@ func usage() { "source", "dsn", "host", "port", "user", "password", "dbname", "schema", "params", "sslmode", "path", "ignore-tables", "ignore-views", "ignore-enums", + "skip-model", "skip-sql-builder", "rel-model-path", "rel-table-path", "rel-view-path", "rel-enum-path", } @@ -256,7 +262,7 @@ func genTemplate(dialect jet.Dialect, ignoreTables []string, ignoreViews []strin return template.Default(dialect). UseSchema(func(schemaMetaData metadata.Schema) template.Schema { return template.DefaultSchema(schemaMetaData). - UseModel(template.DefaultModel().UsePath(modelPkg). + UseModel(template.DefaultModel().ShouldSkip(skipModel).UsePath(modelPkg). UseTable(func(table metadata.Table) template.TableModel { if shouldSkipTable(table) { return template.TableModel{Skip: true} @@ -276,7 +282,7 @@ func genTemplate(dialect jet.Dialect, ignoreTables []string, ignoreViews []strin return template.DefaultEnumModel(enum) }), ). - UseSQLBuilder(template.DefaultSQLBuilder(). + UseSQLBuilder(template.DefaultSQLBuilder().ShouldSkip(skipSQLBuilder). UseTable(func(table metadata.Table) template.TableSQLBuilder { if shouldSkipTable(table) { return template.TableSQLBuilder{Skip: true} diff --git a/generator/template/model_template.go b/generator/template/model_template.go index 2b4ec8a..cd5c5f1 100644 --- a/generator/template/model_template.go +++ b/generator/template/model_template.go @@ -2,14 +2,16 @@ package template import ( "fmt" - "github.com/go-jet/jet/v2/generator/metadata" - "github.com/go-jet/jet/v2/internal/utils/dbidentifier" - "github.com/google/uuid" - "github.com/jackc/pgtype" "path/filepath" "reflect" "strings" "time" + + "github.com/google/uuid" + "github.com/jackc/pgtype" + + "github.com/go-jet/jet/v2/generator/metadata" + "github.com/go-jet/jet/v2/internal/utils/dbidentifier" ) // Model is template for model files generation @@ -50,6 +52,12 @@ func (m Model) UseEnum(enumFunc func(enumMetaData metadata.Enum) EnumModel) Mode return m } +// ShouldSkip returns new Model template with new skip flag set +func (m Model) ShouldSkip(skip bool) Model { + m.Skip = skip + return m +} + // DefaultModel returns default Model template implementation func DefaultModel() Model { return Model{ diff --git a/generator/template/sql_builder_template.go b/generator/template/sql_builder_template.go index dcb4e97..a06faed 100644 --- a/generator/template/sql_builder_template.go +++ b/generator/template/sql_builder_template.go @@ -2,12 +2,13 @@ package template import ( "fmt" - "github.com/go-jet/jet/v2/generator/metadata" - "github.com/go-jet/jet/v2/internal/utils/dbidentifier" "path/filepath" "slices" "strings" "unicode" + + "github.com/go-jet/jet/v2/generator/metadata" + "github.com/go-jet/jet/v2/internal/utils/dbidentifier" ) // SQLBuilder is template for generating sql builder files @@ -53,6 +54,12 @@ func (sb SQLBuilder) UseEnum(enumFunc func(enum metadata.Enum) EnumSQLBuilder) S return sb } +// ShouldSkip returns new SQLBuilder with new skip flag set +func (sb SQLBuilder) ShouldSkip(skip bool) SQLBuilder { + sb.Skip = skip + return sb +} + // TableSQLBuilder is template for generating table SQLBuilder files type TableSQLBuilder struct { Skip bool From e8e4cfc1e0f7a7dde5cfa6e8fe1821a6aa354685 Mon Sep 17 00:00:00 2001 From: Josh Kaplinsky <37640086+joshkaplinsky@users.noreply.github.com> Date: Thu, 10 Apr 2025 09:28:51 -0400 Subject: [PATCH 2/4] chore: add unit tests for code cov --- generator/template/model_template_test.go | 32 +++++++++++++++++-- .../template/sql_builder_template_test.go | 32 +++++++++++++++++-- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/generator/template/model_template_test.go b/generator/template/model_template_test.go index a7bbe28..0fce487 100644 --- a/generator/template/model_template_test.go +++ b/generator/template/model_template_test.go @@ -1,9 +1,11 @@ package template import ( - "github.com/go-jet/jet/v2/generator/metadata" - "github.com/stretchr/testify/require" "testing" + + "github.com/stretchr/testify/require" + + "github.com/go-jet/jet/v2/generator/metadata" ) func Test_TableModelField(t *testing.T) { @@ -43,3 +45,29 @@ func Test_TableModelField(t *testing.T) { Tags: nil, }) } + +func Test_Model_ShouldSkip(t *testing.T) { + tests := []struct { + name string + initial Model + skip bool + }{ + { + name: "True", + initial: Model{Skip: false}, + skip: true, + }, + { + name: "False", + initial: Model{Skip: true}, + skip: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + updatedModel := tt.initial.ShouldSkip(tt.skip) + require.Equal(t, tt.skip, updatedModel.Skip) + }) + } +} diff --git a/generator/template/sql_builder_template_test.go b/generator/template/sql_builder_template_test.go index b980a60..9d6dcdb 100644 --- a/generator/template/sql_builder_template_test.go +++ b/generator/template/sql_builder_template_test.go @@ -1,9 +1,11 @@ package template import ( - "github.com/go-jet/jet/v2/generator/metadata" - "github.com/stretchr/testify/require" "testing" + + "github.com/stretchr/testify/require" + + "github.com/go-jet/jet/v2/generator/metadata" ) func TestToGoEnumValueIdentifier(t *testing.T) { @@ -35,3 +37,29 @@ func TestColumnRenameReserved(t *testing.T) { }) } } + +func Test_SQLBuilder_ShouldSkip(t *testing.T) { + tests := []struct { + name string + initial SQLBuilder + skip bool + }{ + { + name: "True", + initial: SQLBuilder{Skip: false}, + skip: true, + }, + { + name: "False", + initial: SQLBuilder{Skip: true}, + skip: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + updatedBuilder := tt.initial.ShouldSkip(tt.skip) + require.Equal(t, tt.skip, updatedBuilder.Skip) + }) + } +} From 0d361c88637ad0e947c284955eed3c7e12464224 Mon Sep 17 00:00:00 2001 From: Josh Kaplinsky <37640086+joshkaplinsky@users.noreply.github.com> Date: Mon, 14 Apr 2025 08:36:13 -0400 Subject: [PATCH 3/4] chore: remove unit tests --- generator/template/model_template_test.go | 32 ++----------------- .../template/sql_builder_template_test.go | 32 ++----------------- 2 files changed, 4 insertions(+), 60 deletions(-) diff --git a/generator/template/model_template_test.go b/generator/template/model_template_test.go index 0fce487..a7bbe28 100644 --- a/generator/template/model_template_test.go +++ b/generator/template/model_template_test.go @@ -1,11 +1,9 @@ package template import ( - "testing" - - "github.com/stretchr/testify/require" - "github.com/go-jet/jet/v2/generator/metadata" + "github.com/stretchr/testify/require" + "testing" ) func Test_TableModelField(t *testing.T) { @@ -45,29 +43,3 @@ func Test_TableModelField(t *testing.T) { Tags: nil, }) } - -func Test_Model_ShouldSkip(t *testing.T) { - tests := []struct { - name string - initial Model - skip bool - }{ - { - name: "True", - initial: Model{Skip: false}, - skip: true, - }, - { - name: "False", - initial: Model{Skip: true}, - skip: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - updatedModel := tt.initial.ShouldSkip(tt.skip) - require.Equal(t, tt.skip, updatedModel.Skip) - }) - } -} diff --git a/generator/template/sql_builder_template_test.go b/generator/template/sql_builder_template_test.go index 9d6dcdb..b980a60 100644 --- a/generator/template/sql_builder_template_test.go +++ b/generator/template/sql_builder_template_test.go @@ -1,11 +1,9 @@ package template import ( - "testing" - - "github.com/stretchr/testify/require" - "github.com/go-jet/jet/v2/generator/metadata" + "github.com/stretchr/testify/require" + "testing" ) func TestToGoEnumValueIdentifier(t *testing.T) { @@ -37,29 +35,3 @@ func TestColumnRenameReserved(t *testing.T) { }) } } - -func Test_SQLBuilder_ShouldSkip(t *testing.T) { - tests := []struct { - name string - initial SQLBuilder - skip bool - }{ - { - name: "True", - initial: SQLBuilder{Skip: false}, - skip: true, - }, - { - name: "False", - initial: SQLBuilder{Skip: true}, - skip: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - updatedBuilder := tt.initial.ShouldSkip(tt.skip) - require.Equal(t, tt.skip, updatedBuilder.Skip) - }) - } -} From 5c4068dec3260cafd050345869f86682c19c3794 Mon Sep 17 00:00:00 2001 From: Josh Kaplinsky <37640086+joshkaplinsky@users.noreply.github.com> Date: Fri, 18 Apr 2025 08:21:02 -0400 Subject: [PATCH 4/4] chore: add ShouldSkip to generator template tests --- tests/postgres/generator_template_test.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tests/postgres/generator_template_test.go b/tests/postgres/generator_template_test.go index a63c3d2..b295862 100644 --- a/tests/postgres/generator_template_test.go +++ b/tests/postgres/generator_template_test.go @@ -3,6 +3,11 @@ package postgres import ( "database/sql" "fmt" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "github.com/go-jet/jet/v2/generator/metadata" "github.com/go-jet/jet/v2/generator/postgres" "github.com/go-jet/jet/v2/generator/template" @@ -12,9 +17,6 @@ import ( postgres2 "github.com/go-jet/jet/v2/postgres" "github.com/go-jet/jet/v2/tests/dbconfig" file2 "github.com/go-jet/jet/v2/tests/internal/utils/file" - "github.com/stretchr/testify/require" - "path/filepath" - "testing" ) const tempTestDir = "./.tempTestDir" @@ -62,9 +64,7 @@ func TestGeneratorTemplate_Model_SkipGeneration(t *testing.T) { template.Default(postgres2.Dialect). UseSchema(func(schemaMetaData metadata.Schema) template.Schema { return template.DefaultSchema(schemaMetaData). - UseModel(template.Model{ - Skip: true, - }) + UseModel(template.DefaultModel().ShouldSkip(true)) }), ) @@ -80,9 +80,7 @@ func TestGeneratorTemplate_SQLBuilder_SkipGeneration(t *testing.T) { template.Default(postgres2.Dialect). UseSchema(func(schemaMetaData metadata.Schema) template.Schema { return template.DefaultSchema(schemaMetaData). - UseSQLBuilder(template.SQLBuilder{ - Skip: true, - }) + UseSQLBuilder(template.DefaultSQLBuilder().ShouldSkip(true)) }), )