Skip to content

Commit f8c1cc0

Browse files
authored
Merge pull request #21 from plopezm/develop
Fixed native queries test, added random struct to check if any struct…
2 parents 4ba5a7a + c6bf356 commit f8c1cc0

File tree

2 files changed

+51
-25
lines changed

2 files changed

+51
-25
lines changed

manager/SQLStandardManager.go

+16-16
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,22 @@ func (sqld *GoedbSQLDriver) First(instance interface{}, where string, params map
173173
return err
174174
}
175175

176+
// NativeFirst returns the first record found
177+
func (sqld *GoedbSQLDriver) NativeFirst(instance interface{}, sql string, params map[string]interface{}) error {
178+
rows, err := sqld.db.NamedQuery(sql, params)
179+
if err != nil {
180+
return err
181+
}
182+
defer rows.Close()
183+
if rows.Next() {
184+
instanceValuesAddresses := metadata.StructToSliceOfAddresses(instance)
185+
err = rows.Scan(instanceValuesAddresses...)
186+
} else {
187+
err = errors.New("Not found")
188+
}
189+
return err
190+
}
191+
176192
// Find returns all records found
177193
func (sqld *GoedbSQLDriver) Find(resultEntitySlice interface{}, where string, params map[string]interface{}) error {
178194

@@ -223,22 +239,6 @@ func (sqld *GoedbSQLDriver) Find(resultEntitySlice interface{}, where string, pa
223239
return nil
224240
}
225241

226-
// NativeFirst returns the first record found
227-
func (sqld *GoedbSQLDriver) NativeFirst(instance interface{}, sql string, params map[string]interface{}) error {
228-
rows, err := sqld.db.NamedQuery(sql, params)
229-
if err != nil {
230-
return err
231-
}
232-
defer rows.Close()
233-
if rows.Next() {
234-
instanceValuesAddresses := metadata.StructToSliceOfAddresses(instance)
235-
err = rows.Scan(instanceValuesAddresses...)
236-
} else {
237-
err = errors.New("Not found")
238-
}
239-
return err
240-
}
241-
242242
// NativeFind returns all records found
243243
func (sqld *GoedbSQLDriver) NativeFind(resultEntitySlice interface{}, sql string, params map[string]interface{}) error {
244244

tests/IT_complex_test.go

+35-9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ type TestSoldier struct {
2121
Troop TestTroop `goedb:"fk=TestTroop(ID)"`
2222
}
2323

24+
type TestCustomSoldier struct {
25+
ID int
26+
Name string
27+
TroopName string
28+
}
29+
2430
const persistenceUnitItComplexTest = "testSQLite3"
2531

2632
func init() {
@@ -134,29 +140,47 @@ func Test_Goedb_First_By_Name(t *testing.T) {
134140
assert.Equal(t, 1, soldier1.Troop.ID)
135141
}
136142

143+
func Test_Goedb_Native_First_By_Name(t *testing.T) {
144+
145+
em, err := goedb.GetEntityManager(persistenceUnitItComplexTest)
146+
assert.Nil(t, err)
147+
assert.NotNil(t, em)
148+
149+
var customSoldier TestCustomSoldier
150+
151+
err = em.NativeFirst(&customSoldier, "SELECT ts.ID, ts.Name, tt.Name FROM TestSoldier ts, TestTroop tt WHERE ts.Name = :name AND ts.Troop = tt.ID", map[string]interface{}{"name": "Ryan"})
152+
assert.Nil(t, err)
153+
assert.Equal(t, 1, customSoldier.ID)
154+
assert.Equal(t, "TheBestTeam", customSoldier.TroopName)
155+
}
156+
137157
func weaponCall() (*TestSoldier, *TestSoldier, *TestSoldier, *TestSoldier) {
138158
soldier2 := &TestSoldier{
139159
Name: "Bryan",
140160
Troop: TestTroop{
141-
ID: 1,
161+
ID: 1,
162+
Name: "ExampleTroop",
142163
},
143164
}
144165
soldier3 := &TestSoldier{
145166
Name: "Steve",
146167
Troop: TestTroop{
147-
ID: 1,
168+
ID: 1,
169+
Name: "ExampleTroop",
148170
},
149171
}
150172
soldier4 := &TestSoldier{
151173
Name: "Eduard",
152174
Troop: TestTroop{
153-
ID: 1,
175+
ID: 1,
176+
Name: "ExampleTroop",
154177
},
155178
}
156179
soldier5 := &TestSoldier{
157180
Name: "Chuck",
158181
Troop: TestTroop{
159-
ID: 1,
182+
ID: 1,
183+
Name: "ExampleTroop",
160184
},
161185
}
162186
return soldier2, soldier3, soldier4, soldier5
@@ -192,9 +216,9 @@ func Test_Native_Find_All_Soldiers(t *testing.T) {
192216
em.Insert(s3)
193217
em.Insert(s4)
194218

195-
foundSoldiers := make([]TestSoldier, 0)
219+
foundSoldiers := make([]TestCustomSoldier, 0)
196220

197-
err = em.NativeFind(&foundSoldiers, "select * from TestSoldier", nil)
221+
err = em.NativeFind(&foundSoldiers, "SELECT ts.ID, ts.Name, tt.Name FROM TestSoldier ts, TestTroop tt WHERE ts.Troop = tt.ID", nil)
198222
assert.Nil(t, err)
199223
assert.NotNil(t, foundSoldiers)
200224
assert.Equal(t, 5, len(foundSoldiers))
@@ -206,22 +230,24 @@ func Test_Find_One_Soldier(t *testing.T) {
206230
assert.NotNil(t, em)
207231

208232
foundSoldiers := make([]TestSoldier, 0)
209-
err = em.Find(&foundSoldiers, "TestSoldier.ID = :soldier_id", map[string]interface{}{"soldier_id": 3})
233+
err = em.Find(&foundSoldiers, "TestSoldier.Name = :soldier_name", map[string]interface{}{"soldier_name": "Steve"})
210234
assert.Nil(t, err)
211235
assert.NotNil(t, foundSoldiers)
212236
assert.Equal(t, 1, len(foundSoldiers))
237+
assert.Equal(t, "Steve", foundSoldiers[0].Name)
213238
}
214239

215240
func Test_Native_Find_One_Soldier(t *testing.T) {
216241
em, err := goedb.GetEntityManager(persistenceUnitItComplexTest)
217242
assert.Nil(t, err)
218243
assert.NotNil(t, em)
219244

220-
foundSoldiers := make([]TestSoldier, 0)
221-
err = em.NativeFind(&foundSoldiers, "select * from TestSoldier where TestSoldier.ID = :soldier_id", map[string]interface{}{"soldier_id": 3})
245+
foundSoldiers := make([]TestCustomSoldier, 0)
246+
err = em.NativeFind(&foundSoldiers, "SELECT ts.ID, ts.Name, tt.Name FROM TestSoldier ts, TestTroop tt WHERE ts.Name = :soldier_name AND ts.Troop = tt.ID", map[string]interface{}{"soldier_name": "Steve"})
222247
assert.Nil(t, err)
223248
assert.NotNil(t, foundSoldiers)
224249
assert.Equal(t, 1, len(foundSoldiers))
250+
assert.Equal(t, "Steve", foundSoldiers[0].Name)
225251
}
226252

227253
func Test_Update_Soldier_By_PrimaryKey(t *testing.T) {

0 commit comments

Comments
 (0)