@@ -60,33 +60,13 @@ type SerializerStruct struct {
60
60
Roles3 * Roles `gorm:"serializer:json;not null"`
61
61
Contracts map [string ]interface {} `gorm:"serializer:json"`
62
62
JobInfo Job `gorm:"type:bytes;serializer:gob"`
63
- CreatedTime int64 `gorm:"serializer:unixtime;type:datetime "` // store time in db, use int as field type
64
- UpdatedTime * int64 `gorm:"serializer:unixtime;type:datetime "` // store time in db, use int as field type
63
+ CreatedTime int64 `gorm:"serializer:unixtime;type:timestamp "` // store time in db, use int as field type
64
+ UpdatedTime * int64 `gorm:"serializer:unixtime;type:timestamp "` // store time in db, use int as field type
65
65
CustomSerializerString string `gorm:"serializer:custom"`
66
66
EncryptedString EncryptedString
67
67
}
68
68
69
- type SerializerPostgresStruct struct {
70
- gorm.Model
71
- Name []byte `gorm:"json"`
72
- Roles Roles `gorm:"serializer:json"`
73
- Roles2 * Roles `gorm:"serializer:json"`
74
- Roles3 * Roles `gorm:"serializer:json;not null"`
75
- Contracts map [string ]interface {} `gorm:"serializer:json"`
76
- JobInfo Job `gorm:"type:bytes;serializer:gob"`
77
- CreatedTime int64 `gorm:"serializer:unixtime;type:timestamptz"` // store time in db, use int as field type
78
- UpdatedTime * int64 `gorm:"serializer:unixtime;type:timestamptz"` // store time in db, use int as field type
79
- CustomSerializerString string `gorm:"serializer:custom"`
80
- EncryptedString EncryptedString
81
- }
82
-
83
- func (* SerializerPostgresStruct ) TableName () string { return "serializer_structs" }
84
-
85
69
func adaptorSerializerModel (s * SerializerStruct ) interface {} {
86
- if DB .Dialector .Name () == "postgres" {
87
- sps := SerializerPostgresStruct (* s )
88
- return & sps
89
- }
90
70
return s
91
71
}
92
72
@@ -142,7 +122,6 @@ func (c *CustomSerializer) Value(ctx context.Context, field *schema.Field, dst r
142
122
}
143
123
144
124
func TestSerializer (t * testing.T ) {
145
- t .Skip ()
146
125
schema .RegisterSerializer ("custom" , NewCustomSerializer ("hello" ))
147
126
DB .Migrator ().DropTable (adaptorSerializerModel (& SerializerStruct {}))
148
127
if err := DB .Migrator ().AutoMigrate (adaptorSerializerModel (& SerializerStruct {})); err != nil {
@@ -155,6 +134,7 @@ func TestSerializer(t *testing.T) {
155
134
data := SerializerStruct {
156
135
Name : []byte ("jinzhu" ),
157
136
Roles : []string {"r1" , "r2" },
137
+ Roles3 : & Roles {},
158
138
Contracts : map [string ]interface {}{"name" : "jinzhu" , "age" : 10 },
159
139
EncryptedString : EncryptedString ("pass" ),
160
140
CreatedTime : createdAt .Unix (),
@@ -173,13 +153,13 @@ func TestSerializer(t *testing.T) {
173
153
}
174
154
175
155
var result SerializerStruct
176
- if err := DB .Where ("roles2 IS NULL AND roles3 = ?" , "" ).First (& result , data .ID ).Error ; err != nil {
156
+ if err := DB .Where ("\" roles2\" IS NULL AND \" roles3\" = ?" , "[] " ).First (& result , data .ID ).Error ; err != nil {
177
157
t .Fatalf ("failed to query data, got error %v" , err )
178
158
}
179
159
180
160
tests .AssertEqual (t , result , data )
181
161
182
- if err := DB .Model (& result ).Update ("roles" , "" ).Error ; err != nil {
162
+ if err := DB .Model (& result ).Update ("roles" , [] string {} ).Error ; err != nil {
183
163
t .Fatalf ("failed to update data's roles, got error %v" , err )
184
164
}
185
165
@@ -189,14 +169,15 @@ func TestSerializer(t *testing.T) {
189
169
}
190
170
191
171
func TestSerializerZeroValue (t * testing.T ) {
192
- t .Skip ()
193
172
schema .RegisterSerializer ("custom" , NewCustomSerializer ("hello" ))
194
173
DB .Migrator ().DropTable (adaptorSerializerModel (& SerializerStruct {}))
195
174
if err := DB .Migrator ().AutoMigrate (adaptorSerializerModel (& SerializerStruct {})); err != nil {
196
175
t .Fatalf ("no error should happen when migrate scanner, valuer struct, got error %v" , err )
197
176
}
198
177
199
178
data := SerializerStruct {}
179
+ // If left as is Roles3 value will be "" which will be translated by OracleDB to NULL which is not allowed for Role3 column
180
+ data .Roles3 = & Roles {}
200
181
201
182
if err := DB .Create (& data ).Error ; err != nil {
202
183
t .Fatalf ("failed to create data, got error %v" , err )
@@ -209,7 +190,7 @@ func TestSerializerZeroValue(t *testing.T) {
209
190
210
191
tests .AssertEqual (t , result , data )
211
192
212
- if err := DB .Model (& result ).Update ("roles" , "" ).Error ; err != nil {
193
+ if err := DB .Model (& result ).Update ("roles" , [] string {} ).Error ; err != nil {
213
194
t .Fatalf ("failed to update data's roles, got error %v" , err )
214
195
}
215
196
@@ -219,7 +200,6 @@ func TestSerializerZeroValue(t *testing.T) {
219
200
}
220
201
221
202
func TestSerializerAssignFirstOrCreate (t * testing.T ) {
222
- t .Skip ()
223
203
schema .RegisterSerializer ("custom" , NewCustomSerializer ("hello" ))
224
204
DB .Migrator ().DropTable (adaptorSerializerModel (& SerializerStruct {}))
225
205
if err := DB .Migrator ().AutoMigrate (adaptorSerializerModel (& SerializerStruct {})); err != nil {
@@ -231,6 +211,7 @@ func TestSerializerAssignFirstOrCreate(t *testing.T) {
231
211
data := SerializerStruct {
232
212
Name : []byte ("ag9920" ),
233
213
Roles : []string {"r1" , "r2" },
214
+ Roles3 : & Roles {},
234
215
Contracts : map [string ]interface {}{"name" : "jing1" , "age" : 11 },
235
216
EncryptedString : EncryptedString ("pass" ),
236
217
CreatedTime : createdAt .Unix (),
0 commit comments