[release-12.0.6] Add index IDX_folder_org_id_parent_uid_uid (#111682)

Add index IDX_folder_org_id_parent_uid_uid (#110131)

* Add index IDX_folder_org_id_parent_uid



* Force index on Dashboard Permission Filter (MYSQL)



---------


(cherry picked from commit cfe73925cd)

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
Co-authored-by: maicon <maiconscosta@gmail.com>
This commit is contained in:
grafana-delivery-bot[bot] 2025-09-26 14:05:01 -03:00 committed by GitHub
parent 53d26612cf
commit 4fdbb9e5d7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 4 deletions

View File

@ -86,6 +86,11 @@ func addFolderMigrations(mg *migrator.Migrator) {
Type: migrator.UniqueIndex,
Cols: []string{"org_id", "parent_uid", "title"},
}))
mg.AddMigration("Add index IDX_folder_org_id_parent_uid", migrator.NewAddIndexMigration(folderv1(), &migrator.Index{
Name: "IDX_folder_org_id_parent_uid",
Cols: []string{"org_id", "parent_uid"},
}))
}
func folderv1() migrator.Table {

View File

@ -37,6 +37,8 @@ type accessControlDashboardPermissionFilter struct {
// any recursive CTE queries (if supported)
recQueries []clause
recursiveQueriesAreSupported bool
dialect migrator.Dialect
}
type PermissionsFilter interface {
@ -104,12 +106,12 @@ func NewAccessControlDashboardPermissionFilter(user identity.Requester, permissi
f = &accessControlDashboardPermissionFilterNoFolderSubquery{
accessControlDashboardPermissionFilter: accessControlDashboardPermissionFilter{
user: user, folderAction: folderAction, folderActionSets: folderActionSets, dashboardAction: dashboardAction, dashboardActionSets: dashboardActionSets,
features: features, recursiveQueriesAreSupported: recursiveQueriesAreSupported,
features: features, recursiveQueriesAreSupported: recursiveQueriesAreSupported, dialect: dialect,
},
}
} else {
f = &accessControlDashboardPermissionFilter{user: user, folderAction: folderAction, folderActionSets: folderActionSets, dashboardAction: dashboardAction, dashboardActionSets: dashboardActionSets,
features: features, recursiveQueriesAreSupported: recursiveQueriesAreSupported,
features: features, recursiveQueriesAreSupported: recursiveQueriesAreSupported, dialect: dialect,
}
}
f.buildClauses(dialect)
@ -355,6 +357,11 @@ func (f *accessControlDashboardPermissionFilter) With() (string, []any) {
}
func (f *accessControlDashboardPermissionFilter) addRecQry(queryName string, whereUIDSelect string, whereParams []any, orgID int64) {
forceIndex := ""
if f.dialect.DriverName() == migrator.MySQL {
forceIndex = " FORCE INDEX (IDX_folder_org_id_parent_uid) "
}
if f.recQueries == nil {
f.recQueries = make([]clause, 0, maximumRecursiveQueries)
}
@ -365,8 +372,8 @@ func (f *accessControlDashboardPermissionFilter) addRecQry(queryName string, whe
// covered by UQE_folder_org_id_uid and UQE_folder_org_id_parent_uid_title
string: fmt.Sprintf(`%s AS (
SELECT uid, parent_uid, org_id FROM folder WHERE org_id = ? AND uid IN %s
UNION ALL SELECT f.uid, f.parent_uid, f.org_id FROM folder f INNER JOIN %s r ON f.parent_uid = r.uid and f.org_id = r.org_id
)`, queryName, whereUIDSelect, queryName),
UNION ALL SELECT f.uid, f.parent_uid, f.org_id FROM folder f %s INNER JOIN %s r ON f.parent_uid = r.uid and f.org_id = r.org_id
)`, queryName, whereUIDSelect, forceIndex, queryName),
params: c,
})
}