mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 04:52:24 +08:00
SQL Expressions: Fix error handling (#102650)
This commit is contained in:
@ -14,7 +14,7 @@ var logger = log.New("sql_expr")
|
|||||||
func TablesList(rawSQL string) ([]string, error) {
|
func TablesList(rawSQL string) ([]string, error) {
|
||||||
stmt, err := sqlparser.Parse(rawSQL)
|
stmt, err := sqlparser.Parse(rawSQL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("error parsing sql: %s", err.Error(), "sql", rawSQL)
|
logger.Error("error parsing sql", "error", err.Error(), "sql", rawSQL)
|
||||||
return nil, fmt.Errorf("error parsing sql: %s", err.Error())
|
return nil, fmt.Errorf("error parsing sql: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,16 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrMissingSQLQuery = errutil.BadRequest("sql-missing-query").Errorf("missing SQL query")
|
||||||
|
ErrInvalidSQLQuery = errutil.BadRequest("sql-invalid-sql").MustTemplate(
|
||||||
|
"invalid SQL query: {{ .Private.query }} err: {{ .Error }}",
|
||||||
|
errutil.WithPublic(
|
||||||
|
"Invalid SQL query: {{ .Public.error }}",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
// SQLCommand is an expression to run SQL over results
|
// SQLCommand is an expression to run SQL over results
|
||||||
type SQLCommand struct {
|
type SQLCommand struct {
|
||||||
query string
|
query string
|
||||||
@ -25,15 +35,20 @@ type SQLCommand struct {
|
|||||||
// NewSQLCommand creates a new SQLCommand.
|
// NewSQLCommand creates a new SQLCommand.
|
||||||
func NewSQLCommand(refID, rawSQL string, limit int64) (*SQLCommand, error) {
|
func NewSQLCommand(refID, rawSQL string, limit int64) (*SQLCommand, error) {
|
||||||
if rawSQL == "" {
|
if rawSQL == "" {
|
||||||
return nil, errutil.BadRequest("sql-missing-query",
|
return nil, ErrMissingSQLQuery
|
||||||
errutil.WithPublicMessage("missing SQL query"))
|
|
||||||
}
|
}
|
||||||
tables, err := sql.TablesList(rawSQL)
|
tables, err := sql.TablesList(rawSQL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Warn("invalid sql query", "sql", rawSQL, "error", err)
|
logger.Warn("invalid sql query", "sql", rawSQL, "error", err)
|
||||||
return nil, errutil.BadRequest("sql-invalid-sql",
|
return nil, ErrInvalidSQLQuery.Build(errutil.TemplateData{
|
||||||
errutil.WithPublicMessage(fmt.Sprintf("invalid SQL query: %s", err)),
|
Error: err,
|
||||||
)
|
Public: map[string]any{
|
||||||
|
"error": err.Error(),
|
||||||
|
},
|
||||||
|
Private: map[string]any{
|
||||||
|
"query": rawSQL,
|
||||||
|
},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
if len(tables) == 0 {
|
if len(tables) == 0 {
|
||||||
logger.Warn("no tables found in SQL query", "sql", rawSQL)
|
logger.Warn("no tables found in SQL query", "sql", rawSQL)
|
||||||
|
Reference in New Issue
Block a user