diff --git a/internal/component/database_observability/mysql/collector/query_details.go b/internal/component/database_observability/mysql/collector/query_details.go index 7546d0ba0a9..1a4f807dc3a 100644 --- a/internal/component/database_observability/mysql/collector/query_details.go +++ b/internal/component/database_observability/mysql/collector/query_details.go @@ -131,7 +131,8 @@ func (c *QueryDetails) tablesFromEventsStatements(ctx context.Context) error { defer rs.Close() for rs.Next() { - var digest, digestText, schema, sampleText string + var digest, digestText, schema string + var sampleText sql.NullString if err := rs.Scan(&digest, &digestText, &schema, &sampleText); err != nil { level.Error(c.logger).Log("msg", "failed to scan result set from summary table samples", "schema", schema, "err", err) continue @@ -139,8 +140,8 @@ func (c *QueryDetails) tablesFromEventsStatements(ctx context.Context) error { var tables []string var parserErr, lexerErr error - if tables, parserErr = c.tryParseTableNames(sampleText, digestText); parserErr != nil { - if tables, lexerErr = c.tryTokenizeTableNames(sampleText, digestText); lexerErr != nil { + if tables, parserErr = c.tryParseTableNames(sampleText.String, digestText); parserErr != nil { + if tables, lexerErr = c.tryTokenizeTableNames(sampleText.String, digestText); lexerErr != nil { level.Warn(c.logger).Log("msg", "failed to extract tables from sql text", "schema", schema, "digest", digest, "parser_err", parserErr, "lexer_err", lexerErr) continue } diff --git a/internal/component/database_observability/mysql/collector/query_details_test.go b/internal/component/database_observability/mysql/collector/query_details_test.go index 5219e826f37..63a9fe9dc1b 100644 --- a/internal/component/database_observability/mysql/collector/query_details_test.go +++ b/internal/component/database_observability/mysql/collector/query_details_test.go @@ -356,6 +356,23 @@ func TestQueryTables(t *testing.T) { `level="info" schema="some_schema" digest="abc123" table="some_table"`, }, }, + { + name: "null query_sample_text uses digest_text", + eventStatementsRows: [][]driver.Value{{ + "abc123", + "SELECT * FROM `some_table` WHERE `id` = ?", + "some_schema", + nil, // NULL query_sample_text + }}, + logsLabels: []model.LabelSet{ + {"op": OP_QUERY_ASSOCIATION}, + {"op": OP_QUERY_PARSED_TABLE_NAME}, + }, + logsLines: []string{ + "level=\"info\" schema=\"some_schema\" parseable=\"true\" digest=\"abc123\" digest_text=\"SELECT * FROM `some_table` WHERE `id` = ?\"", + `level="info" schema="some_schema" digest="abc123" table="some_table"`, + }, + }, } for _, tc := range testcases {