2 Commits
2 changed files with 38 additions and 7 deletions
@@ -313,9 +313,8 @@ public sealed class ExperimentsController(
var tasks = await AccessibleTeachingTasks().AsNoTracking()
.Include(x => x.AcademicTerm)
.Where(x =>
taskIds.Contains(x.Id) &&
x.Status == TeachingTaskStatus.Published)
.WhereIn(taskIds, x => x.Id)
.Where(x => x.Status == TeachingTaskStatus.Published)
.OrderBy(x => x.TaskNumber)
.ToListAsync(cancellationToken);
if (tasks.Count != taskIds.Count)
@@ -329,9 +328,8 @@ public sealed class ExperimentsController(
var code = request.Code.Trim();
var conflictingTaskNumbers = await db.ExperimentProjects.AsNoTracking()
.Where(x =>
taskIds.Contains(x.TeachingTaskId) &&
x.Code == code)
.WhereIn(taskIds, x => x.TeachingTaskId)
.Where(x => x.Code == code)
.Select(x => x.TeachingTask!.TaskNumber)
.OrderBy(x => x)
.ToListAsync(cancellationToken);
@@ -576,7 +574,7 @@ public sealed class ExperimentsController(
var projects = await ScopedProjects()
.Include(x => x.TeachingTask)
.ThenInclude(x => x!.AcademicTerm)
.Where(x => projectIds.Contains(x.Id))
.WhereIn(projectIds, x => x.Id)
.ToDictionaryAsync(x => x.Id, cancellationToken);
if (projects.Count != projectIds.Count)
return ValidationProblem(
@@ -235,6 +235,39 @@ public sealed class MySqlMigrationTests
StringComparison.OrdinalIgnoreCase);
}
[Fact]
public void MySql_experiment_batch_project_query_is_translatable()
{
using var db = new AppDbContext(CreateMySqlOptions());
var projectIds = new[]
{
Guid.Parse("11111111-1111-1111-1111-111111111111"),
Guid.Parse("22222222-2222-2222-2222-222222222222")
};
var accessibleTaskIds = db.TeachingTasks.Select(x => x.Id);
var sql = db.ExperimentProjects
.Where(x => accessibleTaskIds.Contains(x.TeachingTaskId))
.Include(x => x.TeachingTask)
.ThenInclude(x => x!.AcademicTerm)
.WhereIn(projectIds, x => x.Id)
.ToQueryString();
Assert.Contains(
"ExperimentProjects",
sql,
StringComparison.OrdinalIgnoreCase);
Assert.Contains(" IN (", sql, StringComparison.OrdinalIgnoreCase);
Assert.Contains(
projectIds[0].ToString(),
sql,
StringComparison.OrdinalIgnoreCase);
Assert.Contains(
projectIds[1].ToString(),
sql,
StringComparison.OrdinalIgnoreCase);
}
[Fact]
public void MySql_index_names_fit_the_server_identifier_limit()
{