@@ -51,6 +51,7 @@ import (
5151
5252 "time"
5353
54+ "github.com/godror/godror"
5455 . "github.com/oracle-samples/gorm-oracle/tests/utils"
5556
5657 "gorm.io/gorm"
@@ -59,7 +60,6 @@ import (
5960)
6061
6162func TestFind (t * testing.T ) {
62- t .Skip ()
6363 users := []User {
6464 * GetUser ("find" , Config {}),
6565 * GetUser ("find" , Config {}),
@@ -114,8 +114,10 @@ func TestFind(t *testing.T) {
114114 t .Errorf ("invalid data type for %v, got %#v" , dbName , first [dbName ])
115115 }
116116 case "Age" :
117- if _ , ok := first [dbName ].(uint ); ! ok {
118- t .Errorf ("invalid data type for %v, got %#v" , dbName , first [dbName ])
117+ val := fmt .Sprintf ("%v" , first [dbName ])
118+ expected := fmt .Sprint (users [0 ].Age )
119+ if val != expected {
120+ t .Errorf ("expected %v, got %v" , expected , val )
119121 }
120122 case "Birthday" :
121123 if _ , ok := first [dbName ].(* time.Time ); ! ok {
@@ -146,8 +148,10 @@ func TestFind(t *testing.T) {
146148 t .Errorf ("invalid data type for %v, got %v %#v" , dbName , resultType , first [dbName ])
147149 }
148150 case "Age" :
149- if ! strings .Contains (resultType , "int" ) {
150- t .Errorf ("invalid data type for %v, got %v %#v" , dbName , resultType , first [dbName ])
151+ val := fmt .Sprintf ("%v" , first [dbName ])
152+ expected := fmt .Sprint (users [0 ].Age )
153+ if val != expected {
154+ t .Errorf ("expected %v, got %v" , expected , val )
151155 }
152156 case "Birthday" :
153157 if ! strings .Contains (resultType , "Time" ) {
@@ -194,8 +198,10 @@ func TestFind(t *testing.T) {
194198 t .Errorf ("invalid data type for %v, got %#v" , dbName , allMap [idx ][dbName ])
195199 }
196200 case "Age" :
197- if _ , ok := allMap [idx ][dbName ].(uint ); ! ok {
198- t .Errorf ("invalid data type for %v, got %#v" , dbName , allMap [idx ][dbName ])
201+ val := fmt .Sprintf ("%v" , allMap [idx ][dbName ])
202+ expected := fmt .Sprint (users [0 ].Age )
203+ if val != expected {
204+ t .Errorf ("expected %v, got %v" , expected , val )
199205 }
200206 case "Birthday" :
201207 if _ , ok := allMap [idx ][dbName ].(* time.Time ); ! ok {
@@ -230,8 +236,10 @@ func TestFind(t *testing.T) {
230236 t .Errorf ("invalid data type for %v, got %v %#v" , dbName , resultType , allMap [idx ][dbName ])
231237 }
232238 case "Age" :
233- if ! strings .Contains (resultType , "int" ) {
234- t .Errorf ("invalid data type for %v, got %v %#v" , dbName , resultType , allMap [idx ][dbName ])
239+ val := fmt .Sprintf ("%v" , allMap [idx ][dbName ])
240+ expected := fmt .Sprint (users [0 ].Age )
241+ if val != expected {
242+ t .Errorf ("expected %v, got %v" , expected , val )
235243 }
236244 case "Birthday" :
237245 if ! strings .Contains (resultType , "Time" ) {
@@ -714,13 +722,23 @@ func (v Int64) Value() (driver.Value, error) {
714722}
715723
716724func (v * Int64 ) Scan (val interface {}) error {
717- y := val .(int64 )
718- * v = Int64 (y + 1 )
725+ switch x := val .(type ) {
726+ case int64 :
727+ * v = Int64 (x + 1 )
719728 return nil
729+ case godror.Number :
730+ i , err := strconv .ParseInt (string (x ), 10 , 64 )
731+ if err != nil {
732+ return fmt .Errorf ("Int64.Scan: cannot parse godror.Number %q: %w" , string (x ), err )
733+ }
734+ * v = Int64 (i + 1 )
735+ return nil
736+ default :
737+ return fmt .Errorf ("Int64.Scan: unsupported type %T" , val )
738+ }
720739}
721740
722741func TestPluck (t * testing.T ) {
723- t .Skip ()
724742 users := []* User {
725743 GetUser ("pluck-user1" , Config {}),
726744 GetUser ("pluck-user2" , Config {}),
@@ -730,25 +748,25 @@ func TestPluck(t *testing.T) {
730748 DB .Create (& users )
731749
732750 var names []string
733- if err := DB .Model (User {}).Where ("name like ?" , "pluck-user%" ).Order ("name" ).Pluck ("name" , & names ).Error ; err != nil {
751+ if err := DB .Model (User {}).Where ("\" name\" like ?" , "pluck-user%" ).Order ("\" name\" " ).Pluck ("name" , & names ).Error ; err != nil {
734752 t .Errorf ("got error when pluck name: %v" , err )
735753 }
736754
737755 var names2 []string
738- if err := DB .Model (User {}).Where ("name like ?" , "pluck-user%" ).Order ("name desc" ).Pluck ("name" , & names2 ).Error ; err != nil {
756+ if err := DB .Model (User {}).Where ("\" name\" like ?" , "pluck-user%" ).Order ("\" name\" desc" ).Pluck ("name" , & names2 ).Error ; err != nil {
739757 t .Errorf ("got error when pluck name: %v" , err )
740758 }
741759
742760 sort .Slice (names2 , func (i , j int ) bool { return names2 [i ] < names2 [j ] })
743761 tests .AssertEqual (t , names , names2 )
744762
745763 var ids []int
746- if err := DB .Model (User {}).Where ("name like ?" , "pluck-user%" ).Pluck ("id" , & ids ).Error ; err != nil {
764+ if err := DB .Model (User {}).Where ("\" name\" like ?" , "pluck-user%" ).Pluck ("id" , & ids ).Error ; err != nil {
747765 t .Errorf ("got error when pluck id: %v" , err )
748766 }
749767
750768 var ids2 []Int64
751- if err := DB .Model (User {}).Where ("name like ?" , "pluck-user%" ).Pluck ("id" , & ids2 ).Error ; err != nil {
769+ if err := DB .Model (User {}).Where ("\" name\" like ?" , "pluck-user%" ).Pluck ("id" , & ids2 ).Error ; err != nil {
752770 t .Errorf ("got error when pluck id: %v" , err )
753771 }
754772
@@ -771,7 +789,7 @@ func TestPluck(t *testing.T) {
771789 }
772790
773791 var times []time.Time
774- if err := DB .Model (User {}).Where ("name like ?" , "pluck-user%" ).Pluck ("created_at" , & times ).Error ; err != nil {
792+ if err := DB .Model (User {}).Where ("\" name\" like ?" , "pluck-user%" ).Pluck ("created_at" , & times ).Error ; err != nil {
775793 t .Errorf ("got error when pluck time: %v" , err )
776794 }
777795
@@ -780,7 +798,7 @@ func TestPluck(t *testing.T) {
780798 }
781799
782800 var ptrtimes []* time.Time
783- if err := DB .Model (User {}).Where ("name like ?" , "pluck-user%" ).Pluck ("created_at" , & ptrtimes ).Error ; err != nil {
801+ if err := DB .Model (User {}).Where ("\" name\" like ?" , "pluck-user%" ).Pluck ("created_at" , & ptrtimes ).Error ; err != nil {
784802 t .Errorf ("got error when pluck time: %v" , err )
785803 }
786804
@@ -789,7 +807,7 @@ func TestPluck(t *testing.T) {
789807 }
790808
791809 var nulltimes []sql.NullTime
792- if err := DB .Model (User {}).Where ("name like ?" , "pluck-user%" ).Pluck ("created_at" , & nulltimes ).Error ; err != nil {
810+ if err := DB .Model (User {}).Where ("\" name\" like ?" , "pluck-user%" ).Pluck ("created_at" , & nulltimes ).Error ; err != nil {
793811 t .Errorf ("got error when pluck time: %v" , err )
794812 }
795813
@@ -941,16 +959,15 @@ func TestPluckWithSelect(t *testing.T) {
941959}
942960
943961func TestSelectWithVariables (t * testing.T ) {
944- t .Skip ()
945962 DB .Save (& User {Name : "select_with_variables" })
946963
947- rows , _ := DB .Table ("users" ).Where ("name = ?" , "select_with_variables" ).Select ("? as fake" , gorm .Expr ("name" )).Rows ()
964+ rows , _ := DB .Table ("users" ).Where ("\" name\" = ?" , "select_with_variables" ).Select ("? as fake" , gorm .Expr ("\" name\" " )).Rows ()
948965
949966 if ! rows .Next () {
950967 t .Errorf ("Should have returned at least one row" )
951968 } else {
952969 columns , _ := rows .Columns ()
953- tests .AssertEqual (t , columns , []string {"fake " })
970+ tests .AssertEqual (t , columns , []string {"FAKE " })
954971 }
955972
956973 rows .Close ()
0 commit comments