@@ -274,12 +274,14 @@ func (s Product2) BeforeCreate(tx *gorm.DB) (err error) {
274274}
275275
276276func (s * Product2 ) BeforeUpdate (tx * gorm.DB ) (err error ) {
277- tx .Statement .Where ("\" owner\" != ?" , "admin" )
277+ // In Oracle DB, when owner is NULL, the condition "owner" != 'admin' will
278+ // always returns false.
279+ // Hence, we use NVL("owner", 'none') to substitute 'none' when owner is NULL.
280+ tx .Statement .Where ("NVL(\" owner\" , 'none') != ?" , "admin" )
278281 return
279282}
280283
281284func TestUseDBInHooks (t * testing.T ) {
282- t .Skip ()
283285 DB .Migrator ().DropTable (& Product2 {})
284286 DB .AutoMigrate (& Product2 {})
285287
@@ -296,12 +298,12 @@ func TestUseDBInHooks(t *testing.T) {
296298 }
297299
298300 var result Product2
299- if err := DB .First (& result , "name = ?" , "Nice" ).Error ; err != nil {
301+ if err := DB .First (& result , "\" name\" = ?" , "Nice" ).Error ; err != nil {
300302 t .Fatalf ("Failed to query product, got error: %v" , err )
301303 }
302304
303305 var resultClone Product2
304- if err := DB .First (& resultClone , "name = ?" , "Nice_clone" ).Error ; err != nil {
306+ if err := DB .First (& resultClone , "\" name\" = ?" , "Nice_clone" ).Error ; err != nil {
305307 t .Fatalf ("Failed to find cloned product, got error: %v" , err )
306308 }
307309
@@ -311,7 +313,7 @@ func TestUseDBInHooks(t *testing.T) {
311313
312314 DB .Model (& result ).Update ("Price" , 500 )
313315 var result2 Product2
314- DB .First (& result2 , "name = ?" , "Nice" )
316+ DB .First (& result2 , "\" name\" = ?" , "Nice" )
315317
316318 if result2 .Price != 500 {
317319 t .Errorf ("Failed to update product's price, expects: %v, got %v" , 500 , result2 .Price )
@@ -323,13 +325,13 @@ func TestUseDBInHooks(t *testing.T) {
323325 }
324326
325327 var result3 Product2
326- if err := DB .First (& result3 , "name = ?" , "Nice2" ).Error ; err != nil {
328+ if err := DB .First (& result3 , "\" name\" = ?" , "Nice2" ).Error ; err != nil {
327329 t .Fatalf ("Failed to query product, got error: %v" , err )
328330 }
329331
330332 DB .Model (& result3 ).Update ("Price" , 800 )
331333 var result4 Product2
332- DB .First (& result4 , "name = ?" , "Nice2" )
334+ DB .First (& result4 , "\" name\" = ?" , "Nice2" )
333335
334336 if result4 .Price != 600 {
335337 t .Errorf ("Admin product's price should not be changed, expects: %v, got %v" , 600 , result4 .Price )
0 commit comments