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, | ||||
| 		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 { | ||||
|  |  | |||
|  | @ -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, | ||||
| 	}) | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue