--- /dev/null
+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...)
+ }
+ }
+}