feat: SelectDataset 新增 Exists/ExistsContext
生成 SELECT 1 FROM ... LIMIT 1 判断是否存在符合条件的行,不用调用方自己拼 COUNT(*) 或者查完整行再判断长度。
This commit is contained in:
@@ -1618,6 +1618,58 @@ func (sds *selectDatasetSuite) TestSetError() {
|
||||
sds.Equal(err1, err)
|
||||
}
|
||||
|
||||
func (sds *selectDatasetSuite) TestExists() {
|
||||
mDB, sqlMock, err := sqlmock.New()
|
||||
sds.NoError(err)
|
||||
sqlMock.ExpectQuery(`SELECT 1 FROM "items" LIMIT 1`).
|
||||
WithArgs().
|
||||
WillReturnRows(sqlmock.NewRows([]string{"1"}).FromCSVString("1"))
|
||||
|
||||
db := dbv2.New("mock", mDB)
|
||||
exists, err := db.From("items").Exists()
|
||||
sds.NoError(err)
|
||||
sds.True(exists)
|
||||
}
|
||||
|
||||
func (sds *selectDatasetSuite) TestExists_NotFound() {
|
||||
mDB, sqlMock, err := sqlmock.New()
|
||||
sds.NoError(err)
|
||||
sqlMock.ExpectQuery(`SELECT 1 FROM "items" LIMIT 1`).
|
||||
WithArgs().
|
||||
WillReturnRows(sqlmock.NewRows([]string{"1"}))
|
||||
|
||||
db := dbv2.New("mock", mDB)
|
||||
exists, err := db.From("items").Exists()
|
||||
sds.NoError(err)
|
||||
sds.False(exists)
|
||||
}
|
||||
|
||||
func (sds *selectDatasetSuite) TestExists_WithWhere() {
|
||||
mDB, sqlMock, err := sqlmock.New()
|
||||
sds.NoError(err)
|
||||
sqlMock.ExpectQuery(`SELECT 1 FROM "items" WHERE \("name" = 'Bob'\) LIMIT 1`).
|
||||
WithArgs().
|
||||
WillReturnRows(sqlmock.NewRows([]string{"1"}).FromCSVString("1"))
|
||||
|
||||
db := dbv2.New("mock", mDB)
|
||||
exists, err := db.From("items").Where(dbv2.C("name").Eq("Bob")).Exists()
|
||||
sds.NoError(err)
|
||||
sds.True(exists)
|
||||
}
|
||||
|
||||
func (sds *selectDatasetSuite) TestExists_WithPreparedStatement() {
|
||||
mDB, sqlMock, err := sqlmock.New()
|
||||
sds.NoError(err)
|
||||
sqlMock.ExpectQuery(`SELECT 1 FROM "items" WHERE \("name" = \?\) LIMIT \?`).
|
||||
WithArgs("Bob", 1).
|
||||
WillReturnRows(sqlmock.NewRows([]string{"1"}).FromCSVString("1"))
|
||||
|
||||
db := dbv2.New("mock", mDB)
|
||||
exists, err := db.From("items").Prepared(true).Where(dbv2.C("name").Eq("Bob")).Exists()
|
||||
sds.NoError(err)
|
||||
sds.True(exists)
|
||||
}
|
||||
|
||||
func TestSelectDataset(t *testing.T) {
|
||||
suite.Run(t, new(selectDatasetSuite))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user