diff --git a/ddlmod.go b/ddlmod.go index c8db01f..cc593b1 100644 --- a/ddlmod.go +++ b/ddlmod.go @@ -216,7 +216,8 @@ func (d *ddl) getColumns() []string { fUpper := strings.ToUpper(f) if strings.HasPrefix(fUpper, "PRIMARY KEY") || strings.HasPrefix(fUpper, "CHECK") || - strings.HasPrefix(fUpper, "CONSTRAINT") { + strings.HasPrefix(fUpper, "CONSTRAINT") || + strings.Contains(fUpper, "GENERATED ALWAYS AS") { continue } diff --git a/ddlmod_test.go b/ddlmod_test.go index 5e7a840..88d0b35 100644 --- a/ddlmod_test.go +++ b/ddlmod_test.go @@ -37,9 +37,9 @@ func TestParseDDL(t *testing.T) { }, {"no brackets", []string{"create table test"}, 0, nil}, {"with_special_characters", []string{ - "CREATE TABLE `test` (`text` varchar(10) DEFAULT \"测试,\")", + "CREATE TABLE `test` (`text` varchar(10) DEFAULT \"测试, \")", }, 1, []migrator.ColumnType{ - {NameValue: sql.NullString{String: "text", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 10, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(10)", Valid: true}, DefaultValueValue: sql.NullString{String: "测试,", Valid: true}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}}, + {NameValue: sql.NullString{String: "text", Valid: true}, DataTypeValue: sql.NullString{String: "varchar", Valid: true}, LengthValue: sql.NullInt64{Int64: 10, Valid: true}, ColumnTypeValue: sql.NullString{String: "varchar(10)", Valid: true}, DefaultValueValue: sql.NullString{String: "测试, ", Valid: true}, NullableValue: sql.NullBool{Valid: true}, UniqueValue: sql.NullBool{Valid: true}, PrimaryKeyValue: sql.NullBool{Valid: true}}, }, }, { @@ -212,6 +212,11 @@ func TestGetColumns(t *testing.T) { ddl: "CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL DEFAULT \"\",FirstName varchar(255))", columns: []string{"`ID`", "`LastName`", "`FirstName`"}, }, + { + name: "with_generated_column", + ddl: "CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),FullName varchar(255) GENERATED ALWAYS AS (FirstName || ' ' || LastName))", + columns: []string{"`ID`", "`LastName`", "`FirstName`"}, + }, } for _, p := range params {