Skip to content

Commit 149fb37

Browse files
authoredJan 23, 2025
feat: [#579] Go Migrator Support Custom Column Types (#830)
* feat: [#579] Go Migrator Support for Custom Column Types * fix auth test
1 parent dfc4083 commit 149fb37

File tree

7 files changed

+104
-8
lines changed

7 files changed

+104
-8
lines changed
 

‎auth/auth_test.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -276,11 +276,12 @@ func (s *AuthTestSuite) TestParse_Success() {
276276
s.mockCache.EXPECT().GetBool("jwt:disabled:"+token, false).Return(false).Once()
277277

278278
payload, err := s.auth.Parse(token)
279+
now := carbon.Now()
279280
s.Equal(&contractsauth.Payload{
280281
Guard: testUserGuard,
281282
Key: "1",
282-
ExpireAt: jwt.NewNumericDate(carbon.Now().AddMinutes(2).StdTime()).Local(),
283-
IssuedAt: jwt.NewNumericDate(carbon.Now().StdTime()).Local(),
283+
ExpireAt: jwt.NewNumericDate(now.AddMinutes(2).StdTime()).Local(),
284+
IssuedAt: jwt.NewNumericDate(now.StdTime()).Local(),
284285
}, payload)
285286
s.Nil(err)
286287
}
@@ -296,11 +297,12 @@ func (s *AuthTestSuite) TestParse_SuccessWithPrefix() {
296297
s.mockCache.EXPECT().GetBool("jwt:disabled:"+token, false).Return(false).Once()
297298

298299
payload, err := s.auth.Parse("Bearer " + token)
300+
now := carbon.Now()
299301
s.Equal(&contractsauth.Payload{
300302
Guard: testUserGuard,
301303
Key: "1",
302-
ExpireAt: jwt.NewNumericDate(carbon.Now().AddMinutes(2).StdTime()).Local(),
303-
IssuedAt: jwt.NewNumericDate(carbon.Now().StdTime()).Local(),
304+
ExpireAt: jwt.NewNumericDate(now.AddMinutes(2).StdTime()).Local(),
305+
IssuedAt: jwt.NewNumericDate(now.StdTime()).Local(),
304306
}, payload)
305307
s.Nil(err)
306308

‎contracts/database/schema/blueprint.go

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ type Blueprint interface {
1515
Build(query orm.Query, grammar Grammar) error
1616
// Char Create a new char column on the table.
1717
Char(column string, length ...int) ColumnDefinition
18+
// Column Create a new custom type column on the table.
19+
Column(column string, ttype string) ColumnDefinition
1820
// Create Indicate that the table needs to be created.
1921
Create()
2022
// Date Create a new date column on the table.

‎database/schema/blueprint.go

+4
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ func (r *Blueprint) Char(column string, length ...int) schema.ColumnDefinition {
6060
return columnImpl
6161
}
6262

63+
func (r *Blueprint) Column(column, ttype string) schema.ColumnDefinition {
64+
return r.createAndAddColumn(ttype, column)
65+
}
66+
6367
func (r *Blueprint) Create() {
6468
r.addCommand(&schema.Command{
6569
Name: constants.CommandCreate,

‎database/schema/grammars/utils.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,5 @@ func getType(grammar schema.Grammar, column schema.ColumnDefinition) string {
5959
return callResult[0].String()
6060
}
6161

62-
return ""
62+
return column.GetType()
6363
}

‎database/schema/grammars/utils_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ func TestGetType(t *testing.T) {
5555

5656
// invalid type
5757
mockColumn1 := mocksschema.NewColumnDefinition(t)
58-
mockColumn1.EXPECT().GetType().Return("invalid").Once()
58+
mockColumn1.EXPECT().GetType().Return("invalid").Twice()
5959

6060
mockGrammar1 := mocksschema.NewGrammar(t)
6161

62-
assert.Empty(t, getType(mockGrammar1, mockColumn1))
62+
assert.Equal(t, "invalid", getType(mockGrammar1, mockColumn1))
6363
}

‎database/schema/schema_test.go

+40-1
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,14 @@ func (s *SchemaSuite) TestColumnTypes_Postgres() {
219219
s.Equal("timestamp(2) without time zone", column.Type)
220220
s.Equal("timestamp", column.TypeName)
221221
}
222+
if column.Name == "custom_type" {
223+
s.False(column.Autoincrement)
224+
s.Equal("This is a custom type column", column.Comment)
225+
s.Empty(column.Default)
226+
s.False(column.Nullable)
227+
s.Equal("macaddr", column.Type)
228+
s.Equal("macaddr", column.TypeName)
229+
}
222230
if column.Name == "date" {
223231
s.False(column.Autoincrement)
224232
s.Empty(column.Collation)
@@ -547,6 +555,14 @@ func (s *SchemaSuite) TestColumnTypes_Sqlite() {
547555
s.Equal("datetime", column.Type)
548556
s.Equal("datetime", column.TypeName)
549557
}
558+
if column.Name == "custom_type" {
559+
s.False(column.Autoincrement)
560+
s.Empty(column.Comment)
561+
s.Empty(column.Default)
562+
s.False(column.Nullable)
563+
s.Equal("geometry", column.Type)
564+
s.Equal("geometry", column.TypeName)
565+
}
550566
if column.Name == "date" {
551567
s.False(column.Autoincrement)
552568
s.Empty(column.Comment)
@@ -841,6 +857,14 @@ func (s *SchemaSuite) TestColumnTypes_Mysql() {
841857
s.Equal("timestamp(2)", column.Type)
842858
s.Equal("timestamp", column.TypeName)
843859
}
860+
if column.Name == "custom_type" {
861+
s.False(column.Autoincrement)
862+
s.Equal("This is a custom type column", column.Comment)
863+
s.Empty(column.Default)
864+
s.False(column.Nullable)
865+
s.Equal("geometry", column.Type)
866+
s.Equal("geometry", column.TypeName)
867+
}
844868
if column.Name == "date" {
845869
s.False(column.Autoincrement)
846870
s.Empty(column.Collation)
@@ -1164,6 +1188,14 @@ func (s *SchemaSuite) TestColumnTypes_Sqlserver() {
11641188
s.Equal("datetime2(22)", column.Type)
11651189
s.Equal("datetime2", column.TypeName)
11661190
}
1191+
if column.Name == "custom_type" {
1192+
s.False(column.Autoincrement)
1193+
s.Empty(column.Comment)
1194+
s.Empty(column.Default)
1195+
s.False(column.Nullable)
1196+
s.Equal("geometry", column.Type)
1197+
s.Equal("geometry", column.TypeName)
1198+
}
11671199
if column.Name == "date" {
11681200
s.False(column.Autoincrement)
11691201
s.Empty(column.Collation)
@@ -2362,6 +2394,11 @@ func (s *SchemaSuite) createTableAndAssertColumnsForColumnMethods(schema contrac
23622394
table.BigInteger("big_integer").Comment("This is a big_integer column")
23632395
table.Boolean("boolean_default").Default(true).Comment("This is a boolean column with default value")
23642396
table.Char("char").Comment("This is a char column")
2397+
if schema.GetConnection() != database.DriverPostgres.String() {
2398+
table.Column("custom_type", "geometry").Comment("This is a custom type column")
2399+
} else {
2400+
table.Column("custom_type", "macaddr").Comment("This is a custom type column")
2401+
}
23652402
table.Date("date").Comment("This is a date column")
23662403
table.DateTime("date_time", 3).Comment("This is a date time column")
23672404
table.DateTimeTz("date_time_tz", 3).Comment("This is a date time with time zone column")
@@ -2401,11 +2438,13 @@ func (s *SchemaSuite) createTableAndAssertColumnsForColumnMethods(schema contrac
24012438

24022439
columnListing := schema.GetColumnListing(table)
24032440

2404-
s.Equal(34, len(columnListing))
2441+
s.Equal(35, len(columnListing))
24052442
s.Contains(columnListing, "another_deleted_at")
24062443
s.Contains(columnListing, "big_integer")
2444+
s.Contains(columnListing, "boolean_default")
24072445
s.Contains(columnListing, "char")
24082446
s.Contains(columnListing, "created_at")
2447+
s.Contains(columnListing, "custom_type")
24092448
s.Contains(columnListing, "date")
24102449
s.Contains(columnListing, "date_time")
24112450
s.Contains(columnListing, "date_time_tz")

‎mocks/database/schema/Blueprint.go

+49
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.