@@ -60,33 +60,13 @@ type SerializerStruct struct {
6060 Roles3 * Roles `gorm:"serializer:json;not null"`
6161 Contracts map [string ]interface {} `gorm:"serializer:json"`
6262 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
6565 CustomSerializerString string `gorm:"serializer:custom"`
6666 EncryptedString EncryptedString
6767}
6868
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-
8569func adaptorSerializerModel (s * SerializerStruct ) interface {} {
86- if DB .Dialector .Name () == "postgres" {
87- sps := SerializerPostgresStruct (* s )
88- return & sps
89- }
9070 return s
9171}
9272
@@ -142,7 +122,6 @@ func (c *CustomSerializer) Value(ctx context.Context, field *schema.Field, dst r
142122}
143123
144124func TestSerializer (t * testing.T ) {
145- t .Skip ()
146125 schema .RegisterSerializer ("custom" , NewCustomSerializer ("hello" ))
147126 DB .Migrator ().DropTable (adaptorSerializerModel (& SerializerStruct {}))
148127 if err := DB .Migrator ().AutoMigrate (adaptorSerializerModel (& SerializerStruct {})); err != nil {
@@ -155,6 +134,7 @@ func TestSerializer(t *testing.T) {
155134 data := SerializerStruct {
156135 Name : []byte ("jinzhu" ),
157136 Roles : []string {"r1" , "r2" },
137+ Roles3 : & Roles {},
158138 Contracts : map [string ]interface {}{"name" : "jinzhu" , "age" : 10 },
159139 EncryptedString : EncryptedString ("pass" ),
160140 CreatedTime : createdAt .Unix (),
@@ -173,13 +153,13 @@ func TestSerializer(t *testing.T) {
173153 }
174154
175155 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 {
177157 t .Fatalf ("failed to query data, got error %v" , err )
178158 }
179159
180160 tests .AssertEqual (t , result , data )
181161
182- if err := DB .Model (& result ).Update ("roles" , "" ).Error ; err != nil {
162+ if err := DB .Model (& result ).Update ("roles" , [] string {} ).Error ; err != nil {
183163 t .Fatalf ("failed to update data's roles, got error %v" , err )
184164 }
185165
@@ -189,14 +169,15 @@ func TestSerializer(t *testing.T) {
189169}
190170
191171func TestSerializerZeroValue (t * testing.T ) {
192- t .Skip ()
193172 schema .RegisterSerializer ("custom" , NewCustomSerializer ("hello" ))
194173 DB .Migrator ().DropTable (adaptorSerializerModel (& SerializerStruct {}))
195174 if err := DB .Migrator ().AutoMigrate (adaptorSerializerModel (& SerializerStruct {})); err != nil {
196175 t .Fatalf ("no error should happen when migrate scanner, valuer struct, got error %v" , err )
197176 }
198177
199178 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 {}
200181
201182 if err := DB .Create (& data ).Error ; err != nil {
202183 t .Fatalf ("failed to create data, got error %v" , err )
@@ -209,7 +190,7 @@ func TestSerializerZeroValue(t *testing.T) {
209190
210191 tests .AssertEqual (t , result , data )
211192
212- if err := DB .Model (& result ).Update ("roles" , "" ).Error ; err != nil {
193+ if err := DB .Model (& result ).Update ("roles" , [] string {} ).Error ; err != nil {
213194 t .Fatalf ("failed to update data's roles, got error %v" , err )
214195 }
215196
@@ -219,7 +200,6 @@ func TestSerializerZeroValue(t *testing.T) {
219200}
220201
221202func TestSerializerAssignFirstOrCreate (t * testing.T ) {
222- t .Skip ()
223203 schema .RegisterSerializer ("custom" , NewCustomSerializer ("hello" ))
224204 DB .Migrator ().DropTable (adaptorSerializerModel (& SerializerStruct {}))
225205 if err := DB .Migrator ().AutoMigrate (adaptorSerializerModel (& SerializerStruct {})); err != nil {
@@ -231,6 +211,7 @@ func TestSerializerAssignFirstOrCreate(t *testing.T) {
231211 data := SerializerStruct {
232212 Name : []byte ("ag9920" ),
233213 Roles : []string {"r1" , "r2" },
214+ Roles3 : & Roles {},
234215 Contracts : map [string ]interface {}{"name" : "jing1" , "age" : 11 },
235216 EncryptedString : EncryptedString ("pass" ),
236217 CreatedTime : createdAt .Unix (),
0 commit comments