CompileAsyncQuery: FactoryIndexerFolder
This commit is contained in:
parent
dae2ca3be8
commit
b849378a29
@ -54,19 +54,11 @@ public class FactoryIndexerFolder : FactoryIndexer<DbFolder>
|
||||
{
|
||||
using var filesDbContext = _dbContextFactory.CreateDbContext();
|
||||
|
||||
var dataQuery = GetBaseQuery(filesDbContext, lastIndexed)
|
||||
.OrderBy(r => r.DbFolder.Id)
|
||||
.Select(r => r.DbFolder.Id);
|
||||
var minid = Queries.GetMinId(filesDbContext, lastIndexed);
|
||||
|
||||
var minid = dataQuery.FirstOrDefault();
|
||||
var maxid = Queries.GetMaxId(filesDbContext, lastIndexed);
|
||||
|
||||
dataQuery = GetBaseQuery(filesDbContext, lastIndexed)
|
||||
.OrderByDescending(r => r.DbFolder.Id)
|
||||
.Select(r => r.DbFolder.Id);
|
||||
|
||||
var maxid = dataQuery.FirstOrDefault();
|
||||
|
||||
var count = GetBaseQuery(filesDbContext, lastIndexed).Count();
|
||||
var count = Queries.GetCount(filesDbContext, lastIndexed);
|
||||
|
||||
return new(count, maxid, minid);
|
||||
}
|
||||
@ -74,11 +66,7 @@ public class FactoryIndexerFolder : FactoryIndexer<DbFolder>
|
||||
List<DbFolder> getData(long start, long stop, DateTime lastIndexed)
|
||||
{
|
||||
using var filesDbContext = _dbContextFactory.CreateDbContext();
|
||||
return GetBaseQuery(filesDbContext, lastIndexed)
|
||||
.Where(r => r.DbFolder.Id >= start && r.DbFolder.Id <= stop)
|
||||
.Select(r => r.DbFolder)
|
||||
.ToList();
|
||||
|
||||
return Queries.GetData(filesDbContext, lastIndexed, start, stop).ToList();
|
||||
}
|
||||
|
||||
List<int> getIds(DateTime lastIndexed)
|
||||
@ -90,13 +78,7 @@ public class FactoryIndexerFolder : FactoryIndexer<DbFolder>
|
||||
|
||||
while (true)
|
||||
{
|
||||
var dataQuery = GetBaseQuery(filesDbContext, lastIndexed)
|
||||
.Where(r => r.DbFolder.Id >= start)
|
||||
.OrderBy(r => r.DbFolder.Id)
|
||||
.Select(r => r.DbFolder.Id)
|
||||
.Skip(BaseIndexer<DbFolder>.QueryLimit);
|
||||
|
||||
var id = dataQuery.FirstOrDefault();
|
||||
var id = Queries.GetId(filesDbContext, lastIndexed, start);
|
||||
if (id != 0)
|
||||
{
|
||||
start = id;
|
||||
@ -111,11 +93,6 @@ public class FactoryIndexerFolder : FactoryIndexer<DbFolder>
|
||||
return result;
|
||||
}
|
||||
|
||||
IQueryable<FolderTenant> GetBaseQuery(FilesDbContext filesDbContext, DateTime lastIndexed) => filesDbContext.Folders
|
||||
.Where(r => r.ModifiedOn >= lastIndexed)
|
||||
.Join(filesDbContext.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t })
|
||||
.Where(r => r.DbTenant.Status == TenantStatus.Active);
|
||||
|
||||
try
|
||||
{
|
||||
var j = 0;
|
||||
@ -166,3 +143,55 @@ public static class FactoryIndexerFolderExtension
|
||||
services.TryAdd<DbFolder>();
|
||||
}
|
||||
}
|
||||
|
||||
file static class Queries
|
||||
{
|
||||
public static readonly Func<FilesDbContext, DateTime, int> GetMinId = Microsoft.EntityFrameworkCore.EF.CompileQuery(
|
||||
(FilesDbContext ctx, DateTime lastIndexed) =>
|
||||
ctx.Folders
|
||||
.Where(r => r.ModifiedOn >= lastIndexed)
|
||||
.Join(ctx.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t })
|
||||
.Where(r => r.DbTenant.Status == TenantStatus.Active)
|
||||
.OrderBy(r => r.DbFolder.Id)
|
||||
.Select(r => r.DbFolder.Id)
|
||||
.FirstOrDefault());
|
||||
|
||||
public static readonly Func<FilesDbContext, DateTime, int> GetMaxId = Microsoft.EntityFrameworkCore.EF.CompileQuery(
|
||||
(FilesDbContext ctx, DateTime lastIndexed) =>
|
||||
ctx.Folders
|
||||
.Where(r => r.ModifiedOn >= lastIndexed)
|
||||
.Join(ctx.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t })
|
||||
.Where(r => r.DbTenant.Status == TenantStatus.Active)
|
||||
.OrderByDescending(r => r.DbFolder.Id)
|
||||
.Select(r => r.DbFolder.Id)
|
||||
.FirstOrDefault());
|
||||
|
||||
public static readonly Func<FilesDbContext, DateTime, int> GetCount = Microsoft.EntityFrameworkCore.EF.CompileQuery(
|
||||
(FilesDbContext ctx, DateTime lastIndexed) =>
|
||||
ctx.Folders
|
||||
.Where(r => r.ModifiedOn >= lastIndexed)
|
||||
.Join(ctx.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t })
|
||||
.Where(r => r.DbTenant.Status == TenantStatus.Active)
|
||||
.Count());
|
||||
|
||||
public static readonly Func<FilesDbContext, DateTime, long, int> GetId = Microsoft.EntityFrameworkCore.EF.CompileQuery(
|
||||
(FilesDbContext ctx, DateTime lastIndexed, long start) =>
|
||||
ctx.Folders
|
||||
.Where(r => r.ModifiedOn >= lastIndexed)
|
||||
.Join(ctx.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t })
|
||||
.Where(r => r.DbTenant.Status == TenantStatus.Active)
|
||||
.Where(r => r.DbFolder.Id >= start)
|
||||
.OrderBy(r => r.DbFolder.Id)
|
||||
.Select(r => r.DbFolder.Id)
|
||||
.Skip(BaseIndexer<DbFolder>.QueryLimit)
|
||||
.FirstOrDefault());
|
||||
|
||||
public static readonly Func<FilesDbContext, DateTime, long, long, IEnumerable<DbFolder>> GetData = Microsoft.EntityFrameworkCore.EF.CompileQuery(
|
||||
(FilesDbContext ctx, DateTime lastIndexed, long start, long stop) =>
|
||||
ctx.Folders
|
||||
.Where(r => r.ModifiedOn >= lastIndexed)
|
||||
.Join(ctx.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t })
|
||||
.Where(r => r.DbTenant.Status == TenantStatus.Active)
|
||||
.Where(r => r.DbFolder.Id >= start && r.DbFolder.Id <= stop)
|
||||
.Select(r => r.DbFolder));
|
||||
}
|
Loading…
Reference in New Issue
Block a user