mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 16:52:54 +08:00
86 lines
2.0 KiB
Go
86 lines
2.0 KiB
Go
package legacy
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"text/template"
|
|
|
|
"github.com/grafana/grafana/pkg/storage/legacysql"
|
|
"github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate"
|
|
)
|
|
|
|
// Templates setup.
|
|
var (
|
|
//go:embed *.sql
|
|
sqlTemplatesFS embed.FS
|
|
|
|
sqlTemplates = template.Must(template.New("sql").ParseFS(sqlTemplatesFS, `*.sql`))
|
|
)
|
|
|
|
func mustTemplate(filename string) *template.Template {
|
|
if t := sqlTemplates.Lookup(filename); t != nil {
|
|
return t
|
|
}
|
|
panic(fmt.Sprintf("template file not found: %s", filename))
|
|
}
|
|
|
|
// Templates.
|
|
var (
|
|
sqlQueryDashboards = mustTemplate("query_dashboards.sql")
|
|
sqlQueryPanels = mustTemplate("query_panels.sql")
|
|
)
|
|
|
|
type sqlQuery struct {
|
|
sqltemplate.SQLTemplate
|
|
Query *DashboardQuery
|
|
|
|
DashboardTable string
|
|
VersionTable string
|
|
ProvisioningTable string
|
|
UserTable string
|
|
}
|
|
|
|
func (r sqlQuery) Validate() error {
|
|
if r.Query.Order == "ASC" && r.Query.LastID > 0 {
|
|
return fmt.Errorf("ascending order does not support paging by last id")
|
|
}
|
|
return nil // TODO
|
|
}
|
|
|
|
func newQueryReq(sql *legacysql.LegacyDatabaseHelper, query *DashboardQuery) sqlQuery {
|
|
if query.Order == "" {
|
|
query.Order = "DESC" // use version as RV
|
|
}
|
|
return sqlQuery{
|
|
SQLTemplate: sqltemplate.New(sql.DialectForDriver()),
|
|
Query: query,
|
|
|
|
DashboardTable: sql.Table("dashboard"),
|
|
VersionTable: sql.Table("dashboard_version"),
|
|
ProvisioningTable: sql.Table("dashboard_provisioning"),
|
|
UserTable: sql.Table("user"),
|
|
}
|
|
}
|
|
|
|
type sqlLibraryQuery struct {
|
|
sqltemplate.SQLTemplate
|
|
Query *LibraryPanelQuery
|
|
|
|
LibraryElementTable string
|
|
UserTable string
|
|
}
|
|
|
|
func (r sqlLibraryQuery) Validate() error {
|
|
return nil // TODO
|
|
}
|
|
|
|
func newLibraryQueryReq(sql *legacysql.LegacyDatabaseHelper, query *LibraryPanelQuery) sqlLibraryQuery {
|
|
return sqlLibraryQuery{
|
|
SQLTemplate: sqltemplate.New(sql.DialectForDriver()),
|
|
Query: query,
|
|
|
|
LibraryElementTable: sql.Table("library_element"),
|
|
UserTable: sql.Table("user"),
|
|
}
|
|
}
|