new endpoint to return product list
This commit is contained in:
46
app/utils/query/find/found_rows_callback.go
Normal file
46
app/utils/query/find/found_rows_callback.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package find
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
const (
|
||||
// Key under which result of `SELECT FOUND_ROWS()` should be stored in the
|
||||
// driver context.
|
||||
FOUND_ROWS_CTX_KEY = "maal:found_rows"
|
||||
// Suggested name under which [find.FoundRowsCallback] can be registered.
|
||||
FOUND_ROWS_CALLBACK = "maal:found_rows"
|
||||
)
|
||||
|
||||
// Searches query clauses for presence of `SQL_CALC_FOUND_ROWS` and runs `SELECT
|
||||
// FOUND_ROWS();` right after the query containing such clause. The result is
|
||||
// put in the driver context under key [find.FOUND_ROWS_CTX_KEY]. For the
|
||||
// callback to work correctly it must be registered and executed before the
|
||||
// `gorm:preload` callback.
|
||||
func FoundRowsCallback(d *gorm.DB) {
|
||||
if _, ok := d.Statement.Clauses["SELECT"].AfterNameExpression.(sqlCalcFound); ok {
|
||||
var count uint64
|
||||
sqlDB, err := d.DB()
|
||||
if err != nil {
|
||||
_ = d.AddError(err)
|
||||
return
|
||||
}
|
||||
res := sqlDB.QueryRowContext(d.Statement.Context, "SELECT FOUND_ROWS();")
|
||||
if res == nil {
|
||||
_ = d.AddError(errors.New(`fialed to issue SELECT FOUND_ROWS() query`))
|
||||
return
|
||||
}
|
||||
if res.Err() != nil {
|
||||
_ = d.AddError(res.Err())
|
||||
return
|
||||
}
|
||||
err = res.Scan(&count)
|
||||
if err != nil {
|
||||
_ = d.AddError(err)
|
||||
return
|
||||
}
|
||||
d.Set(FOUND_ROWS_CTX_KEY, count)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user