The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/expr/sql/frame_db.go

65 lines
1.5 KiB

//go:build !arm
package sql
import (
mysql "github.com/dolthub/go-mysql-server/sql"
"github.com/grafana/grafana-plugin-sdk-go/data"
)
var dbName = "frames"
// FramesDBProvider is a go-mysql-server DatabaseProvider that provides access to a set of Frames.
type FramesDBProvider struct {
db mysql.Database
}
func (p *FramesDBProvider) Database(_ *mysql.Context, _ string) (mysql.Database, error) {
return p.db, nil
}
func (p *FramesDBProvider) HasDatabase(_ *mysql.Context, _ string) bool {
return true
}
func (p *FramesDBProvider) AllDatabases(_ *mysql.Context) []mysql.Database {
return []mysql.Database{p.db}
}
// NewFramesDBProvider creates a new FramesDBProvider with the given set of Frames.
func NewFramesDBProvider(frames data.Frames) mysql.DatabaseProvider {
fMap := make(map[string]mysql.Table, len(frames))
for _, frame := range frames {
fMap[frame.RefID] = &FrameTable{Frame: frame}
}
return &FramesDBProvider{
db: &framesDB{
frames: fMap,
},
}
}
// framesDB is a go-mysql-server Database that provides access to a set of Frames.
type framesDB struct {
frames map[string]mysql.Table
}
func (db *framesDB) GetTableInsensitive(_ *mysql.Context, tblName string) (mysql.Table, bool, error) {
tbl, ok := mysql.GetTableInsensitive(tblName, db.frames)
if !ok {
return nil, false, nil
}
return tbl, ok, nil
}
func (db *framesDB) GetTableNames(_ *mysql.Context) ([]string, error) {
s := make([]string, 0, len(db.frames))
for k := range db.frames {
s = append(s, k)
}
return s, nil
}
func (db *framesDB) Name() string {
return dbName
}