add RawMap
This commit is contained in:
parent
6842b49a1a
commit
7155023d16
35
main.go
35
main.go
@ -443,6 +443,41 @@ func (s *DB) Raw(sql string, values ...interface{}) *DB {
|
||||
return s.clone().search.Raw(true).Where(sql, values...).db
|
||||
}
|
||||
|
||||
// RawMap sql查询返回[]map[string]string类型
|
||||
func (s *DB) RawMap(sqlQuery string, sqlValues ...interface{}) (result []map[string]string, err error) {
|
||||
rows, err := s.Raw(sqlQuery, sqlValues...).Rows()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
cols, err := rows.Columns()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
values := make([]sql.RawBytes, len(cols))
|
||||
scanArgs := make([]interface{}, len(values))
|
||||
for i := range values {
|
||||
scanArgs[i] = &values[i]
|
||||
}
|
||||
for rows.Next() {
|
||||
err = rows.Scan(scanArgs...)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var value string
|
||||
resultC := map[string]string{}
|
||||
for i, col := range values {
|
||||
if col == nil {
|
||||
value = "NULL"
|
||||
} else {
|
||||
value = string(col)
|
||||
}
|
||||
resultC[cols[i]] = value
|
||||
}
|
||||
result = append(result, resultC)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Exec execute raw sql
|
||||
func (s *DB) Exec(sql string, values ...interface{}) *DB {
|
||||
scope := s.NewScope(nil)
|
||||
|
14
main_test.go
14
main_test.go
@ -11,7 +11,6 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/erikstmartin/go-testdb"
|
||||
"github.com/jinzhu/gorm"
|
||||
_ "github.com/jinzhu/gorm/dialects/mssql"
|
||||
_ "github.com/jinzhu/gorm/dialects/mysql"
|
||||
@ -511,6 +510,19 @@ func TestRaw(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRawMap(t *testing.T) {
|
||||
user1 := User{Name: "ExecRawSqlUser1", Age: 1, Birthday: parseTime("2000-1-1")}
|
||||
user2 := User{Name: "ExecRawSqlUser2", Age: 10, Birthday: parseTime("2010-1-1")}
|
||||
user3 := User{Name: "ExecRawSqlUser3", Age: 20, Birthday: parseTime("2020-1-1")}
|
||||
DB.Save(&user1).Save(&user2).Save(&user3)
|
||||
|
||||
datas, err := DB.TestRawMap("SELECT name, age FROM users WHERE name = ? or name = ?", user2.Name, user3.Name)
|
||||
if err != nil {
|
||||
t.Errorf("somethings wrong:%s", err.Error())
|
||||
return
|
||||
}
|
||||
fmt.Println("datas:", datas)
|
||||
}
|
||||
func TestGroup(t *testing.T) {
|
||||
rows, err := DB.Select("name").Table("users").Group("name").Rows()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user