2021-06-06 12:21:39 +00:00
|
|
|
// Copyright 2021 The Xorm Authors. All rights reserved.
|
2017-03-25 15:21:18 +00:00
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
2023-07-26 10:44:41 +00:00
|
|
|
package tests
|
2017-03-25 15:21:18 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2020-02-21 01:38:47 +00:00
|
|
|
"xorm.io/builder"
|
2017-03-25 15:21:18 +00:00
|
|
|
)
|
|
|
|
|
2017-05-27 12:34:57 +00:00
|
|
|
func TestCount(t *testing.T) {
|
2020-03-27 07:13:04 +00:00
|
|
|
assert.NoError(t, PrepareEngine())
|
2017-05-27 12:34:57 +00:00
|
|
|
|
|
|
|
type UserinfoCount struct {
|
|
|
|
Departname string
|
|
|
|
}
|
2021-08-24 09:13:17 +00:00
|
|
|
assert.NoError(t, testEngine.Sync(new(UserinfoCount)))
|
2017-05-27 12:34:57 +00:00
|
|
|
|
2017-10-16 07:28:13 +00:00
|
|
|
colName := testEngine.GetColumnMapper().Obj2Table("Departname")
|
2017-05-27 12:34:57 +00:00
|
|
|
var cond builder.Cond = builder.Eq{
|
|
|
|
"`" + colName + "`": "dev",
|
|
|
|
}
|
|
|
|
|
|
|
|
total, err := testEngine.Where(cond).Count(new(UserinfoCount))
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 0, total)
|
|
|
|
|
|
|
|
cnt, err := testEngine.Insert(&UserinfoCount{
|
|
|
|
Departname: "dev",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 1, cnt)
|
|
|
|
|
|
|
|
total, err = testEngine.Where(cond).Count(new(UserinfoCount))
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 1, total)
|
2017-07-25 08:50:20 +00:00
|
|
|
|
|
|
|
total, err = testEngine.Where(cond).Table("userinfo_count").Count()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 1, total)
|
|
|
|
|
|
|
|
total, err = testEngine.Table("userinfo_count").Count()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 1, total)
|
2017-05-27 12:34:57 +00:00
|
|
|
}
|
2017-06-06 06:54:59 +00:00
|
|
|
|
|
|
|
func TestSQLCount(t *testing.T) {
|
2020-03-27 07:13:04 +00:00
|
|
|
assert.NoError(t, PrepareEngine())
|
2017-06-06 06:54:59 +00:00
|
|
|
|
|
|
|
type UserinfoCount2 struct {
|
|
|
|
Id int64
|
|
|
|
Departname string
|
|
|
|
}
|
|
|
|
|
|
|
|
type UserinfoBooks struct {
|
|
|
|
Id int64
|
|
|
|
Pid int64
|
|
|
|
IsOpen bool
|
|
|
|
}
|
|
|
|
|
|
|
|
assertSync(t, new(UserinfoCount2), new(UserinfoBooks))
|
|
|
|
|
2021-08-24 05:46:08 +00:00
|
|
|
total, err := testEngine.SQL("SELECT count(`id`) FROM " + testEngine.Quote(testEngine.TableName("userinfo_count2", true))).
|
2017-06-06 06:54:59 +00:00
|
|
|
Count()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 0, total)
|
|
|
|
}
|
2018-04-10 04:52:47 +00:00
|
|
|
|
|
|
|
func TestCountWithOthers(t *testing.T) {
|
2020-03-27 07:13:04 +00:00
|
|
|
assert.NoError(t, PrepareEngine())
|
2018-04-10 04:52:47 +00:00
|
|
|
|
|
|
|
type CountWithOthers struct {
|
|
|
|
Id int64
|
|
|
|
Name string
|
|
|
|
}
|
|
|
|
|
|
|
|
assertSync(t, new(CountWithOthers))
|
|
|
|
|
|
|
|
_, err := testEngine.Insert(&CountWithOthers{
|
|
|
|
Name: "orderby",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
_, err = testEngine.Insert(&CountWithOthers{
|
|
|
|
Name: "limit",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
2023-07-12 07:53:25 +00:00
|
|
|
total, err := testEngine.OrderBy("count(`id`) desc").Limit(1).Count(new(CountWithOthers))
|
2018-04-10 04:52:47 +00:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 2, total)
|
|
|
|
}
|
2019-01-20 09:50:20 +00:00
|
|
|
|
|
|
|
type CountWithTableName struct {
|
|
|
|
Id int64
|
|
|
|
Name string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (CountWithTableName) TableName() string {
|
|
|
|
return "count_with_table_name1"
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWithTableName(t *testing.T) {
|
2020-03-27 07:13:04 +00:00
|
|
|
assert.NoError(t, PrepareEngine())
|
2019-01-20 09:50:20 +00:00
|
|
|
|
|
|
|
assertSync(t, new(CountWithTableName))
|
|
|
|
|
|
|
|
_, err := testEngine.Insert(&CountWithTableName{
|
|
|
|
Name: "orderby",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
_, err = testEngine.Insert(CountWithTableName{
|
|
|
|
Name: "limit",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
2023-09-20 02:07:03 +00:00
|
|
|
total, err := testEngine.Count(new(CountWithTableName))
|
2019-01-20 09:50:20 +00:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 2, total)
|
|
|
|
|
2023-09-20 02:07:03 +00:00
|
|
|
total, err = testEngine.Count(CountWithTableName{})
|
2023-07-25 09:27:25 +00:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 2, total)
|
2019-01-20 09:50:20 +00:00
|
|
|
}
|
2020-03-11 03:29:43 +00:00
|
|
|
|
|
|
|
func TestCountWithSelectCols(t *testing.T) {
|
2020-03-27 07:13:04 +00:00
|
|
|
assert.NoError(t, PrepareEngine())
|
2020-03-11 03:29:43 +00:00
|
|
|
|
|
|
|
assertSync(t, new(CountWithTableName))
|
|
|
|
|
|
|
|
_, err := testEngine.Insert(&CountWithTableName{
|
|
|
|
Name: "orderby",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
_, err = testEngine.Insert(CountWithTableName{
|
|
|
|
Name: "limit",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
total, err := testEngine.Cols("id").Count(new(CountWithTableName))
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 2, total)
|
|
|
|
|
2021-08-24 05:46:08 +00:00
|
|
|
total, err = testEngine.Select("count(`id`)").Count(CountWithTableName{})
|
2020-03-11 03:29:43 +00:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 2, total)
|
|
|
|
}
|
2021-06-06 12:21:39 +00:00
|
|
|
|
|
|
|
func TestCountWithGroupBy(t *testing.T) {
|
|
|
|
assert.NoError(t, PrepareEngine())
|
|
|
|
|
|
|
|
assertSync(t, new(CountWithTableName))
|
|
|
|
|
|
|
|
_, err := testEngine.Insert(&CountWithTableName{
|
|
|
|
Name: "1",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
_, err = testEngine.Insert(CountWithTableName{
|
|
|
|
Name: "2",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
2021-08-24 05:46:08 +00:00
|
|
|
cnt, err := testEngine.GroupBy("`name`").Count(new(CountWithTableName))
|
2021-06-06 12:21:39 +00:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 2, cnt)
|
|
|
|
}
|
2023-10-19 06:39:58 +00:00
|
|
|
|
|
|
|
func TestCountWithLimit(t *testing.T) {
|
|
|
|
assert.NoError(t, PrepareEngine())
|
|
|
|
|
|
|
|
assertSync(t, new(CountWithTableName))
|
|
|
|
|
|
|
|
_, err := testEngine.Insert(&CountWithTableName{
|
|
|
|
Name: "1",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
_, err = testEngine.Insert(CountWithTableName{
|
|
|
|
Name: "2",
|
|
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
cnt, err := testEngine.Limit(100).Count(new(CountWithTableName))
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.EqualValues(t, 2, cnt)
|
|
|
|
}
|