mirror of https://github.com/grafana/grafana.git
[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:
parent
53d26612cf
commit
4fdbb9e5d7
|
|
@ -86,6 +86,11 @@ func addFolderMigrations(mg *migrator.Migrator) {
|
||||||
Type: migrator.UniqueIndex,
|
Type: migrator.UniqueIndex,
|
||||||
Cols: []string{"org_id", "parent_uid", "title"},
|
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 {
|
func folderv1() migrator.Table {
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ type accessControlDashboardPermissionFilter struct {
|
||||||
// any recursive CTE queries (if supported)
|
// any recursive CTE queries (if supported)
|
||||||
recQueries []clause
|
recQueries []clause
|
||||||
recursiveQueriesAreSupported bool
|
recursiveQueriesAreSupported bool
|
||||||
|
|
||||||
|
dialect migrator.Dialect
|
||||||
}
|
}
|
||||||
|
|
||||||
type PermissionsFilter interface {
|
type PermissionsFilter interface {
|
||||||
|
|
@ -104,12 +106,12 @@ func NewAccessControlDashboardPermissionFilter(user identity.Requester, permissi
|
||||||
f = &accessControlDashboardPermissionFilterNoFolderSubquery{
|
f = &accessControlDashboardPermissionFilterNoFolderSubquery{
|
||||||
accessControlDashboardPermissionFilter: accessControlDashboardPermissionFilter{
|
accessControlDashboardPermissionFilter: accessControlDashboardPermissionFilter{
|
||||||
user: user, folderAction: folderAction, folderActionSets: folderActionSets, dashboardAction: dashboardAction, dashboardActionSets: dashboardActionSets,
|
user: user, folderAction: folderAction, folderActionSets: folderActionSets, dashboardAction: dashboardAction, dashboardActionSets: dashboardActionSets,
|
||||||
features: features, recursiveQueriesAreSupported: recursiveQueriesAreSupported,
|
features: features, recursiveQueriesAreSupported: recursiveQueriesAreSupported, dialect: dialect,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
f = &accessControlDashboardPermissionFilter{user: user, folderAction: folderAction, folderActionSets: folderActionSets, dashboardAction: dashboardAction, dashboardActionSets: dashboardActionSets,
|
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)
|
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) {
|
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 {
|
if f.recQueries == nil {
|
||||||
f.recQueries = make([]clause, 0, maximumRecursiveQueries)
|
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
|
// covered by UQE_folder_org_id_uid and UQE_folder_org_id_parent_uid_title
|
||||||
string: fmt.Sprintf(`%s AS (
|
string: fmt.Sprintf(`%s AS (
|
||||||
SELECT uid, parent_uid, org_id FROM folder WHERE org_id = ? AND uid IN %s
|
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
|
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, queryName),
|
)`, queryName, whereUIDSelect, forceIndex, queryName),
|
||||||
params: c,
|
params: c,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue