Use datastore-native limiting in queries where only a single result is desired

Translates into `LIMIT 1`, `TOP 1` etc. depending on the datastore.

Results in queries being executed faster in the datastore (at least when no index is used), reduces the amount of unnecessary data being loaded into RAM.

Signed-off-by: nscuro <nscuro@protonmail.com>
This commit is contained in:
nscuro 2022-07-23 20:29:51 +02:00
parent c4d7a6a2cb
commit d469ab6cfe
No known key found for this signature in database
GPG key ID: 985ADB40F06304B3
12 changed files with 26 additions and 0 deletions

View file

@ -194,6 +194,7 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager {
preprocessACLs(query, queryFilter, params, false);
query.setFilter(queryFilter);
query.setRange(0, 1);
return singleResult(query.executeWithMap(params));
}
@ -332,6 +333,7 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager {
public Tag getTagByName(final String name) {
final String trimmedTag = StringUtils.trimToNull(name);
final Query<Tag> query = pm.newQuery(Tag.class, "name == :name");
query.setRange(0, 1);
return singleResult(query.execute(trimmedTag));
}
@ -641,6 +643,7 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager {
*/
public ProjectProperty getProjectProperty(final Project project, final String groupName, final String propertyName) {
final Query<ProjectProperty> query = this.pm.newQuery(ProjectProperty.class, "project == :project && groupName == :groupName && propertyName == :propertyName");
query.setRange(0, 1);
return singleResult(query.execute(project, groupName, propertyName));
}