@@ -66,27 +66,7 @@ type SerializerStruct struct {
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
@@ -154,6 +134,7 @@ func TestSerializer(t *testing.T) {
154134 data := SerializerStruct {
155135 Name : []byte ("jinzhu" ),
156136 Roles : []string {"r1" , "r2" },
137+ Roles3 : & Roles {},
157138 Contracts : map [string ]interface {}{"name" : "jinzhu" , "age" : 10 },
158139 EncryptedString : EncryptedString ("pass" ),
159140 CreatedTime : createdAt .Unix (),
@@ -166,19 +147,21 @@ func TestSerializer(t *testing.T) {
166147 },
167148 CustomSerializerString : "world" ,
168149 }
150+ // empty := Roles{}
151+ // data.Roles3 = &empty
169152
170153 if err := DB .Create (& data ).Error ; err != nil {
171154 t .Fatalf ("failed to create data, got error %v" , err )
172155 }
173156
174157 var result SerializerStruct
175- if err := DB .Where ("roles2 IS NULL AND roles3 = ?" , "" ).First (& result , data .ID ).Error ; err != nil {
158+ if err := DB .Where ("\" roles2\" IS NULL AND \" roles3\" = ?" , "[] " ).First (& result , data .ID ).Error ; err != nil {
176159 t .Fatalf ("failed to query data, got error %v" , err )
177160 }
178161
179162 tests .AssertEqual (t , result , data )
180163
181- if err := DB .Model (& result ).Update ("roles" , "" ).Error ; err != nil {
164+ if err := DB .Model (& result ).Update ("roles" , [] string {} ).Error ; err != nil {
182165 t .Fatalf ("failed to update data's roles, got error %v" , err )
183166 }
184167
@@ -195,6 +178,8 @@ func TestSerializerZeroValue(t *testing.T) {
195178 }
196179
197180 data := SerializerStruct {}
181+ // If left as is Roles3 value will be "" which will be translated by OracleDB to NULL which is not allowed for Role3 column
182+ data .Roles3 = & Roles {}
198183
199184 if err := DB .Create (& data ).Error ; err != nil {
200185 t .Fatalf ("failed to create data, got error %v" , err )
@@ -207,7 +192,7 @@ func TestSerializerZeroValue(t *testing.T) {
207192
208193 tests .AssertEqual (t , result , data )
209194
210- if err := DB .Model (& result ).Update ("roles" , "" ).Error ; err != nil {
195+ if err := DB .Model (& result ).Update ("roles" , [] string {} ).Error ; err != nil {
211196 t .Fatalf ("failed to update data's roles, got error %v" , err )
212197 }
213198
@@ -228,6 +213,7 @@ func TestSerializerAssignFirstOrCreate(t *testing.T) {
228213 data := SerializerStruct {
229214 Name : []byte ("ag9920" ),
230215 Roles : []string {"r1" , "r2" },
216+ Roles3 : & Roles {},
231217 Contracts : map [string ]interface {}{"name" : "jing1" , "age" : 11 },
232218 EncryptedString : EncryptedString ("pass" ),
233219 CreatedTime : createdAt .Unix (),
0 commit comments