@@ -1237,5 +1237,85 @@ func TestQuerySliceCount(t *testing.T) {
1237
1237
if assert .NoError (t , QuerySliceCount (db , & Options {Where : Where {"attr" : 1 }}, & m , & count )) {
1238
1238
assert .Len (t , m , 4 )
1239
1239
assert .EqualValues (t , 4 , count )
1240
+ assert .EqualValues (t , 4 , m [3 ].ID )
1240
1241
}
1241
1242
}
1243
+
1244
+ type SelectedColumnsSuite struct {
1245
+ suite.Suite
1246
+ db * sql.DB
1247
+ }
1248
+
1249
+ type BigModel struct {
1250
+ ID int `ormlite:"primary"`
1251
+ Attr1 int `ormlite:"col=attr1"`
1252
+ Attr2 int `ormlite:"col=attr2"`
1253
+ Attr3 string `ormlite:"col=attr3"`
1254
+ Attr4 float64 `ormlite:"col=attr4"`
1255
+ Related * relatedModel `ormlite:"has_one,col=rel_id"`
1256
+ }
1257
+
1258
+ func (b BigModel ) Table () string { return "big_model" }
1259
+
1260
+ func (s * SelectedColumnsSuite ) SetupSuite () {
1261
+ db , err := sql .Open ("sqlite3" , ":memory:" )
1262
+ require .NoError (s .T (), err )
1263
+
1264
+ _ , err = db .Exec ("create table big_model(id integer primary key, attr1 int, attr2 int, attr3 string, attr4 float, rel_id int);" +
1265
+ "create table related_model(id integer primary key, field text);" )
1266
+ require .NoError (s .T (), err )
1267
+ s .db = db
1268
+
1269
+ require .NoError (s .T (), Insert (db , & BigModel {Attr1 : 1 , Attr2 : 2 , Attr3 : "first" , Attr4 : 1.0 }))
1270
+ require .NoError (s .T (), Insert (db , & BigModel {Attr1 : 3 , Attr2 : 4 , Attr3 : "second" , Attr4 : 2.0 }))
1271
+ require .NoError (s .T (), Insert (db , & BigModel {Attr1 : 5 , Attr2 : 6 , Attr3 : "third" , Attr4 : 3.0 }))
1272
+ require .NoError (s .T (), Insert (db , & BigModel {Attr1 : 7 , Attr2 : 8 , Attr3 : "forth" , Attr4 : 4.0 }))
1273
+ require .NoError (s .T (), Insert (db , & BigModel {Attr1 : 9 , Attr2 : 10 , Attr3 : "fifth" , Attr4 : 5.0 }))
1274
+
1275
+ require .NoError (s .T (), Upsert (db , & BigModel {
1276
+ Attr1 : 11 ,
1277
+ Attr2 : 11 ,
1278
+ Attr3 : "11" ,
1279
+ Attr4 : 11 ,
1280
+ Related : & relatedModel {Field : "Hello" },
1281
+ }))
1282
+ }
1283
+
1284
+ func (s * SelectedColumnsSuite ) TearDownSuite () {
1285
+ require .NoError (s .T (), s .db .Close ())
1286
+ }
1287
+
1288
+ func (s * SelectedColumnsSuite ) TestQueryStruct () {
1289
+ var m BigModel
1290
+ require .NoError (s .T (), QueryStruct (s .db , & Options {Columns : map [string ]struct {}{
1291
+ "attr1" : {},
1292
+ "attr3" : {},
1293
+ }, Where : Where {"id" : 1 }}, & m ))
1294
+
1295
+ assert .EqualValues (s .T (), 1 , m .ID )
1296
+ assert .EqualValues (s .T (), 1 , m .Attr1 )
1297
+ assert .EqualValues (s .T (), 0 , m .Attr2 )
1298
+ assert .EqualValues (s .T (), "first" , m .Attr3 )
1299
+ assert .EqualValues (s .T (), 0.0 , m .Attr4 )
1300
+ }
1301
+
1302
+ func (s * SelectedColumnsSuite ) TestQuerySlice () {
1303
+ var mm []* BigModel
1304
+ require .NoError (s .T (), QuerySlice (s .db , & Options {Columns : map [string ]struct {}{
1305
+ "attr2" : {},
1306
+ "attr4" : {},
1307
+ }}, & mm ))
1308
+
1309
+ if assert .NotNil (s .T (), mm ) {
1310
+ assert .Len (s .T (), mm , 6 )
1311
+ assert .EqualValues (s .T (), 6 , mm [2 ].Attr2 )
1312
+ assert .EqualValues (s .T (), "" , mm [2 ].Attr3 )
1313
+ assert .EqualValues (s .T (), 3.0 , mm [2 ].Attr4 )
1314
+ assert .EqualValues (s .T (), (* relatedModel )(nil ), mm [5 ].Related )
1315
+ }
1316
+
1317
+ }
1318
+
1319
+ func TestSelectedColumns (t * testing.T ) {
1320
+ suite .Run (t , new (SelectedColumnsSuite ))
1321
+ }
0 commit comments