Files

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"),
}
}