code: func (adapter *Adapter) Query(out interface{}, statement string, args []interface{}, loggers ...grimoire.Logger) (int64, error) {
  	var rows *sql.Rows
  	var err error
  
  	start := time.Now()
  	if adapter.Tx != nil {
  		rows, err = adapter.Tx.Query(statement, args...)
  	} else {
  		rows, err = adapter.DB.Query(statement, args...)
  	}
  	go grimoire.Log(loggers, statement, time.Since(start), err)
  
  	if err != nil {
  		return 0, adapter.Config.ErrorFunc(err)
  	}
  
  	defer rows.Close()
  	count, err := Scan(out, rows)
  	return count, adapter.Config.ErrorFunc(err)
  }
docs: // Query performs query operation.