mirror of https://github.com/go-gorm/gorm.git
Query Row, Rows inside RowQuery callbacks
This commit is contained in:
parent
97949fdbc1
commit
c62e9bcabe
|
@ -0,0 +1,30 @@
|
||||||
|
package gorm
|
||||||
|
|
||||||
|
import "database/sql"
|
||||||
|
|
||||||
|
// Define callbacks for row query
|
||||||
|
func init() {
|
||||||
|
DefaultCallback.RowQuery().Register("gorm:row_query", rowQueryCallback)
|
||||||
|
}
|
||||||
|
|
||||||
|
type RowQueryResult struct {
|
||||||
|
Row *sql.Row
|
||||||
|
}
|
||||||
|
|
||||||
|
type RowsQueryResult struct {
|
||||||
|
Rows *sql.Rows
|
||||||
|
Error error
|
||||||
|
}
|
||||||
|
|
||||||
|
// queryCallback used to query data from database
|
||||||
|
func rowQueryCallback(scope *Scope) {
|
||||||
|
if result, ok := scope.InstanceGet("row_query_result"); ok {
|
||||||
|
scope.prepareQuerySQL()
|
||||||
|
|
||||||
|
if rowResult, ok := result.(*RowQueryResult); ok {
|
||||||
|
rowResult.Row = scope.SQLDB().QueryRow(scope.SQL, scope.SQLVars...)
|
||||||
|
} else if rowsResult, ok := result.(*RowsQueryResult); ok {
|
||||||
|
rowsResult.Rows, rowsResult.Error = scope.SQLDB().Query(scope.SQL, scope.SQLVars...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
scope.go
14
scope.go
|
@ -886,16 +886,22 @@ func (scope *Scope) updatedAttrsWithValues(value interface{}) (results map[strin
|
||||||
|
|
||||||
func (scope *Scope) row() *sql.Row {
|
func (scope *Scope) row() *sql.Row {
|
||||||
defer scope.trace(NowFunc())
|
defer scope.trace(NowFunc())
|
||||||
|
|
||||||
|
result := &RowQueryResult{}
|
||||||
|
scope.InstanceSet("row_query_result", result)
|
||||||
scope.callCallbacks(scope.db.parent.callbacks.rowQueries)
|
scope.callCallbacks(scope.db.parent.callbacks.rowQueries)
|
||||||
scope.prepareQuerySQL()
|
|
||||||
return scope.SQLDB().QueryRow(scope.SQL, scope.SQLVars...)
|
return result.Row
|
||||||
}
|
}
|
||||||
|
|
||||||
func (scope *Scope) rows() (*sql.Rows, error) {
|
func (scope *Scope) rows() (*sql.Rows, error) {
|
||||||
defer scope.trace(NowFunc())
|
defer scope.trace(NowFunc())
|
||||||
|
|
||||||
|
result := &RowsQueryResult{}
|
||||||
|
scope.InstanceSet("row_query_result", result)
|
||||||
scope.callCallbacks(scope.db.parent.callbacks.rowQueries)
|
scope.callCallbacks(scope.db.parent.callbacks.rowQueries)
|
||||||
scope.prepareQuerySQL()
|
|
||||||
return scope.SQLDB().Query(scope.SQL, scope.SQLVars...)
|
return result.Rows, result.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (scope *Scope) initialize() *Scope {
|
func (scope *Scope) initialize() *Scope {
|
||||||
|
|
Loading…
Reference in New Issue