diff --git a/generator/mysql/query_set.go b/generator/mysql/query_set.go index 5063f7c..4dcf9f5 100644 --- a/generator/mysql/query_set.go +++ b/generator/mysql/query_set.go @@ -29,7 +29,8 @@ SELECT col.DATA_TYPE) ) AS "dataType.Name", IF (col.DATA_TYPE = 'enum', 'enum', 'base') AS "dataType.Kind", - col.COLUMN_TYPE LIKE '%unsigned%' AS "dataType.IsUnsigned" + col.COLUMN_TYPE LIKE '%unsigned%' AS "dataType.IsUnsigned", + col.EXTRA LIKE '%VIRTUAL GENERATED%' AS "column.isGenerated" FROM INFORMATION_SCHEMA.tables AS t INNER JOIN information_schema.columns AS col diff --git a/tests/mysql/generator_test.go b/tests/mysql/generator_test.go index c037c6f..763a310 100644 --- a/tests/mysql/generator_test.go +++ b/tests/mysql/generator_test.go @@ -621,12 +621,12 @@ func TestGeneratedTestSampleDatabase(t *testing.T) { testutils.AssertFileNamesEqual(t, modelDir, "all_types.go", "all_types_enum.go", "all_types_enum_ptr.go", "all_types_view.go", "all_types_view_enum.go", "all_types_view_enum_ptr.go", "link.go", "link2.go", - "floats.go", "user.go") + "floats.go", "user.go", "people.go") testutils.AssertFileContent(t, modelDir+"/all_types.go", allTypesModelContent) testutils.AssertFileNamesEqual(t, tableDir, "all_types.go", - "link.go", "link2.go", "user.go", "floats.go", "table_use_schema.go") + "link.go", "link2.go", "user.go", "floats.go", "table_use_schema.go", "people.go") testutils.AssertFileContent(t, tableDir+"/all_types.go", allTypesTableContent) testutils.AssertFileNamesEqual(t, viewDir, "all_types_view.go", "view_use_schema.go") diff --git a/tests/mysql/sample_test.go b/tests/mysql/sample_test.go new file mode 100644 index 0000000..afdbc4d --- /dev/null +++ b/tests/mysql/sample_test.go @@ -0,0 +1,94 @@ +package mysql + +import ( + "github.com/go-jet/jet/v2/internal/testutils" + "github.com/go-jet/jet/v2/internal/utils/ptr" + "github.com/go-jet/jet/v2/qrm" + "github.com/stretchr/testify/require" + "testing" + + . "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 TestMutableColumnsExcludeGeneratedColumn(t *testing.T) { + + t.Run("should not have the generated column in mutableColumns", func(t *testing.T) { + require.Equal(t, 2, len(People.MutableColumns)) + require.Equal(t, People.PeopleName, People.MutableColumns[0]) + require.Equal(t, People.PeopleHeightCm, People.MutableColumns[1]) + }) + + t.Run("should query with all columns", func(t *testing.T) { + query := SELECT( + People.AllColumns, + ).FROM( + People, + ).WHERE( + People.PeopleID.EQ(Int(3)), + ) + + var result model.People + + err := query.Query(db, &result) + require.NoError(t, err) + + require.Equal(t, "Carla", result.PeopleName) + require.Equal(t, 155., *result.PeopleHeightCm) + require.InEpsilon(t, 61.02, *result.PeopleHeightIn, 1e-3) + }) + + t.Run("should insert without generated columns", func(t *testing.T) { + testutils.ExecuteInTxAndRollback(t, db, func(tx qrm.DB) { + insertQuery := People.INSERT( + People.MutableColumns, + ).MODEL( + model.People{ + PeopleName: "Dario", + PeopleHeightCm: ptr.Of(120.0), + }, + ) + + testutils.AssertDebugStatementSql(t, insertQuery, ` +INSERT INTO test_sample.people (people_name, people_height_cm) +VALUES ('Dario', 120); +`) + _, err := insertQuery.Exec(tx) + require.NoError(t, err) + + var result model.People + selectQuery := SELECT( + People.MutableColumns, + ).FROM( + People, + ).ORDER_BY( + People.PeopleID.DESC(), + ).LIMIT(1) + + err = selectQuery.Query(tx, &result) + require.NoError(t, err) + + require.Equal(t, "Dario", result.PeopleName) + require.Equal(t, 120., *result.PeopleHeightCm) + + query := SELECT( + People.AllColumns, + ).FROM( + People, + ).ORDER_BY( + People.PeopleID.DESC(), + ).LIMIT(1) + + result = model.People{} + + err = query.Query(tx, &result) + require.NoError(t, err) + + require.Equal(t, "Dario", result.PeopleName) + require.Equal(t, 120., *result.PeopleHeightCm) + require.InEpsilon(t, 47.24, *result.PeopleHeightIn, 1e-3) + }) + }) +} \ No newline at end of file diff --git a/tests/testdata b/tests/testdata index 89dc2c6..7352904 160000 --- a/tests/testdata +++ b/tests/testdata @@ -1 +1 @@ -Subproject commit 89dc2c61a2419a281eeed5d95174eab0ca192fb4 +Subproject commit 7352904710003f5ae9e96f9132816f4b11b0a4cb