@@ -51,6 +51,7 @@ import (
51
51
52
52
"time"
53
53
54
+ "github.com/godror/godror"
54
55
. "github.com/oracle-samples/gorm-oracle/tests/utils"
55
56
56
57
"gorm.io/gorm"
@@ -59,7 +60,6 @@ import (
59
60
)
60
61
61
62
func TestFind (t * testing.T ) {
62
- t .Skip ()
63
63
users := []User {
64
64
* GetUser ("find" , Config {}),
65
65
* GetUser ("find" , Config {}),
@@ -114,8 +114,10 @@ func TestFind(t *testing.T) {
114
114
t .Errorf ("invalid data type for %v, got %#v" , dbName , first [dbName ])
115
115
}
116
116
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 )
119
121
}
120
122
case "Birthday" :
121
123
if _ , ok := first [dbName ].(* time.Time ); ! ok {
@@ -146,8 +148,10 @@ func TestFind(t *testing.T) {
146
148
t .Errorf ("invalid data type for %v, got %v %#v" , dbName , resultType , first [dbName ])
147
149
}
148
150
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 )
151
155
}
152
156
case "Birthday" :
153
157
if ! strings .Contains (resultType , "Time" ) {
@@ -194,8 +198,10 @@ func TestFind(t *testing.T) {
194
198
t .Errorf ("invalid data type for %v, got %#v" , dbName , allMap [idx ][dbName ])
195
199
}
196
200
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 )
199
205
}
200
206
case "Birthday" :
201
207
if _ , ok := allMap [idx ][dbName ].(* time.Time ); ! ok {
@@ -230,8 +236,10 @@ func TestFind(t *testing.T) {
230
236
t .Errorf ("invalid data type for %v, got %v %#v" , dbName , resultType , allMap [idx ][dbName ])
231
237
}
232
238
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 )
235
243
}
236
244
case "Birthday" :
237
245
if ! strings .Contains (resultType , "Time" ) {
@@ -714,13 +722,23 @@ func (v Int64) Value() (driver.Value, error) {
714
722
}
715
723
716
724
func (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 )
719
728
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
+ }
720
739
}
721
740
722
741
func TestPluck (t * testing.T ) {
723
- t .Skip ()
724
742
users := []* User {
725
743
GetUser ("pluck-user1" , Config {}),
726
744
GetUser ("pluck-user2" , Config {}),
@@ -730,25 +748,25 @@ func TestPluck(t *testing.T) {
730
748
DB .Create (& users )
731
749
732
750
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 {
734
752
t .Errorf ("got error when pluck name: %v" , err )
735
753
}
736
754
737
755
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 {
739
757
t .Errorf ("got error when pluck name: %v" , err )
740
758
}
741
759
742
760
sort .Slice (names2 , func (i , j int ) bool { return names2 [i ] < names2 [j ] })
743
761
tests .AssertEqual (t , names , names2 )
744
762
745
763
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 {
747
765
t .Errorf ("got error when pluck id: %v" , err )
748
766
}
749
767
750
768
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 {
752
770
t .Errorf ("got error when pluck id: %v" , err )
753
771
}
754
772
@@ -771,7 +789,7 @@ func TestPluck(t *testing.T) {
771
789
}
772
790
773
791
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 {
775
793
t .Errorf ("got error when pluck time: %v" , err )
776
794
}
777
795
@@ -780,7 +798,7 @@ func TestPluck(t *testing.T) {
780
798
}
781
799
782
800
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 {
784
802
t .Errorf ("got error when pluck time: %v" , err )
785
803
}
786
804
@@ -789,7 +807,7 @@ func TestPluck(t *testing.T) {
789
807
}
790
808
791
809
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 {
793
811
t .Errorf ("got error when pluck time: %v" , err )
794
812
}
795
813
@@ -941,16 +959,15 @@ func TestPluckWithSelect(t *testing.T) {
941
959
}
942
960
943
961
func TestSelectWithVariables (t * testing.T ) {
944
- t .Skip ()
945
962
DB .Save (& User {Name : "select_with_variables" })
946
963
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 ()
948
965
949
966
if ! rows .Next () {
950
967
t .Errorf ("Should have returned at least one row" )
951
968
} else {
952
969
columns , _ := rows .Columns ()
953
- tests .AssertEqual (t , columns , []string {"fake " })
970
+ tests .AssertEqual (t , columns , []string {"FAKE " })
954
971
}
955
972
956
973
rows .Close ()
0 commit comments