excel-export/biz/db/db.go

60 lines
1011 B
Go

package db
import (
"context"
"excel_export/biz/export"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"runtime/trace"
)
var _ export.DataFetcher = new(Db)
type Db struct {
db *gorm.DB
}
func NewDb(str string) (*Db, error) {
db, err := gorm.Open(mysql.Open(str + ""))
if err != nil {
return nil, err
}
//db = db.Debug()
return &Db{
db: db,
}, nil
}
func (d *Db) Fetch(s string) (*export.Data, error) {
fetchRegion := trace.StartRegion(context.Background(), "db.fetch")
defer func() {
fetchRegion.End()
}()
rows, err := d.db.Raw(s).Rows()
if err != nil {
return nil, err
}
defer rows.Close()
titles, err := rows.Columns()
if err != nil {
return nil, err
}
var dd []map[string]interface{}
d.db.ScanRows(rows, &dd)
data := make([]interface{}, len(dd))
for i, m := range dd {
row := make([]interface{}, 0, len(m))
for _, title := range titles {
row = append(row, m[title])
}
data[i] = interface{}(row)
}
return &export.Data{
Title: titles,
Data: data,
}, nil
}