Compare commits

...

4 Commits

Author SHA1 Message Date
Ryan McKinley
ae0cf22b46 merge main 2025-12-11 09:47:23 +03:00
Ryan McKinley
3b6b828cd9 Merge remote-tracking branch 'origin/main' into remove-mysqlAnsiQuotes 2025-11-20 16:39:33 +03:00
Ryan McKinley
1ac1ebd057 fix tests 2025-11-18 23:01:44 +03:00
Ryan McKinley
ffd34a8bb6 remove mysqlAnsiQuotes FF 2025-11-18 22:40:04 +03:00
8 changed files with 10 additions and 35 deletions

View File

@@ -71,10 +71,6 @@ export interface FeatureToggles {
*/
showDashboardValidationWarnings?: boolean;
/**
* Use double quotes to escape keyword in a MySQL query
*/
mysqlAnsiQuotes?: boolean;
/**
* Rule backtesting API for alerting
*/
alertingBacktesting?: boolean;

View File

@@ -96,12 +96,6 @@ var (
Stage: FeatureStageExperimental,
Owner: grafanaDashboardsSquad,
},
{
Name: "mysqlAnsiQuotes",
Description: "Use double quotes to escape keyword in a MySQL query",
Stage: FeatureStageExperimental,
Owner: grafanaSearchAndStorageSquad,
},
{
Name: "alertingBacktesting",
Description: "Rule backtesting API for alerting",

View File

@@ -11,7 +11,6 @@ logRequestsInstrumentedAsUnknown,experimental,@grafana/grafana-backend-group,fal
grpcServer,preview,@grafana/search-and-storage,false,false,false
cloudWatchCrossAccountQuerying,GA,@grafana/aws-datasources,false,false,false
showDashboardValidationWarnings,experimental,@grafana/dashboards-squad,false,false,false
mysqlAnsiQuotes,experimental,@grafana/search-and-storage,false,false,false
alertingBacktesting,experimental,@grafana/alerting-squad,false,false,false
logsContextDatasourceUi,GA,@grafana/observability-logs,false,false,true
lokiShardSplitting,experimental,@grafana/observability-logs,false,false,true
1 Name Stage Owner requiresDevMode RequiresRestart FrontendOnly
11 grpcServer preview @grafana/search-and-storage false false false
12 cloudWatchCrossAccountQuerying GA @grafana/aws-datasources false false false
13 showDashboardValidationWarnings experimental @grafana/dashboards-squad false false false
mysqlAnsiQuotes experimental @grafana/search-and-storage false false false
14 alertingBacktesting experimental @grafana/alerting-squad false false false
15 logsContextDatasourceUi GA @grafana/observability-logs false false true
16 lokiShardSplitting experimental @grafana/observability-logs false false true

View File

@@ -47,10 +47,6 @@ const (
// Show warnings when dashboards do not validate against the schema
FlagShowDashboardValidationWarnings = "showDashboardValidationWarnings"
// FlagMysqlAnsiQuotes
// Use double quotes to escape keyword in a MySQL query
FlagMysqlAnsiQuotes = "mysqlAnsiQuotes"
// FlagAlertingBacktesting
// Rule backtesting API for alerting
FlagAlertingBacktesting = "alertingBacktesting"

View File

@@ -2302,7 +2302,8 @@
"metadata": {
"name": "mysqlAnsiQuotes",
"resourceVersion": "1764664939750",
"creationTimestamp": "2022-10-12T11:43:35Z"
"creationTimestamp": "2022-10-12T11:43:35Z",
"deletionTimestamp": "2025-12-11T06:46:59Z"
},
"spec": {
"description": "Use double quotes to escape keyword in a MySQL query",

View File

@@ -166,11 +166,7 @@ func (dbCfg *DatabaseConfig) buildConnectionString(cfg *setting.Cfg, features fe
cnnstr += fmt.Sprintf("&transaction_isolation=%s", val)
}
//nolint:staticcheck // not yet migrated to OpenFeature
if features != nil && features.IsEnabledGlobally(featuremgmt.FlagMysqlAnsiQuotes) {
cnnstr += "&sql_mode='ANSI_QUOTES'"
}
cnnstr += "&sql_mode='ANSI_QUOTES'"
cnnstr += buildExtraConnectionString('&', dbCfg.UrlQueryParams)
case migrator.Postgres:
addr, err := util.SplitHostPortDefault(dbCfg.Host, "127.0.0.1", "5432")

View File

@@ -31,7 +31,7 @@ var databaseConfigTestCases = []databaseConfigTest{
name: "MySQL IPv4",
dbType: "mysql",
dbHost: "1.2.3.4:5678",
expConnStr: ":@tcp(1.2.3.4:5678)/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true",
expConnStr: ":@tcp(1.2.3.4:5678)/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'",
},
{
name: "Postgres IPv4",
@@ -65,13 +65,13 @@ var databaseConfigTestCases = []databaseConfigTest{
name: "MySQL IPv4 (Default Port)",
dbType: "mysql",
dbHost: "1.2.3.4",
expConnStr: ":@tcp(1.2.3.4)/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true",
expConnStr: ":@tcp(1.2.3.4)/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'",
},
{
name: "MySQL IPv6",
dbType: "mysql",
dbHost: "[fe80::24e8:31b2:91df:b177]:1234",
expConnStr: ":@tcp([fe80::24e8:31b2:91df:b177]:1234)/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true",
expConnStr: ":@tcp([fe80::24e8:31b2:91df:b177]:1234)/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'",
},
{
name: "Postgres IPv6",
@@ -83,7 +83,7 @@ var databaseConfigTestCases = []databaseConfigTest{
name: "MySQL IPv6 (Default Port)",
dbType: "mysql",
dbHost: "[::1]",
expConnStr: ":@tcp([::1])/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true",
expConnStr: ":@tcp([::1])/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'",
},
{
name: "Postgres IPv6 (Default Port)",
@@ -96,13 +96,6 @@ var databaseConfigTestCases = []databaseConfigTest{
dbURL: "://invalid.com/",
err: &url.Error{Op: "parse", URL: "://invalid.com/", Err: errors.New("missing protocol scheme")},
},
{
name: "MySQL with ANSI_QUOTES mode",
dbType: "mysql",
dbHost: "[::1]",
features: featuremgmt.WithFeatures(featuremgmt.FlagMysqlAnsiQuotes),
expConnStr: ":@tcp([::1])/test_db?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'",
},
}
func TestIntegrationSQLConnectionString(t *testing.T) {

View File

@@ -85,19 +85,19 @@ func TestInitEngine_ParseTimeInConnectionString(t *testing.T) {
name: "MySQL with parseTime already present",
connectionString: "mysql://user:password@localhost:3306/alreadypresent?parseTime=false",
dbType: "mysql",
expectedConnection: "user:password@tcp(localhost:3306)/alreadypresent?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&parseTime=false",
expectedConnection: "user:password@tcp(localhost:3306)/alreadypresent?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'&parseTime=false",
},
{
name: "MySQL with feature enabled",
connectionString: "mysql://user:password@localhost:3306/existingparams?charset=utf8",
dbType: "mysql",
expectedConnection: "user:password@tcp(localhost:3306)/existingparams?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&charset=utf8",
expectedConnection: "user:password@tcp(localhost:3306)/existingparams?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'&charset=utf8",
},
{
name: "MySQL with feature enabled",
connectionString: "mysql://user:password@localhost:3306/existingparams?charset=utf8",
dbType: "mysqlWithHooks",
expectedConnection: "user:password@tcp(localhost:3306)/existingparams?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&charset=utf8",
expectedConnection: "user:password@tcp(localhost:3306)/existingparams?collation=utf8mb4_unicode_ci&allowNativePasswords=true&clientFoundRows=true&parseTime=true&sql_mode='ANSI_QUOTES'&charset=utf8",
},
{
name: "Postgres",