mergecontext is parallel query 采用compiler context的判断并且 GetQueryCompilerExecutor采用缓存

This commit is contained in:
xuejiaming 2021-12-23 08:33:58 +08:00
parent 98b438315a
commit d647dba4ce
3 changed files with 5 additions and 3 deletions

View File

@ -101,7 +101,8 @@ namespace ShardingCore.Sharding.ShardingExecutors
{
if (!hasQueryCompilerExecutor.HasValue)
{
if (!IsMergeQuery())
hasQueryCompilerExecutor = !IsMergeQuery();
if (hasQueryCompilerExecutor.Value)
{
var routeTailFactory = ShardingContainer.GetService<IRouteTailFactory>();
var dbContext = GetShardingDbContext().GetDbContext(_dataSourceRouteResult.IntersectDataSources.First(), IsParallelQuery(), routeTailFactory.Create(_tableRouteResults.First()));

View File

@ -78,7 +78,8 @@ namespace ShardingCore.Sharding.ShardingExecutors
{
if (!hasQueryCompilerExecutor.HasValue)
{
if (_queryEntities.All(o => !_entityMetadataManager.IsSharding(o)))
hasQueryCompilerExecutor = _queryEntities.All(o => !_entityMetadataManager.IsSharding(o));
if (hasQueryCompilerExecutor.Value)
{
var virtualDataSource = (IVirtualDataSource)ShardingContainer.GetService(
typeof(IVirtualDataSource<>).GetGenericType0(_shardingDbContextType));

View File

@ -250,7 +250,7 @@ namespace ShardingCore.Sharding
/// <returns></returns>
public bool IsParallelQuery()
{
return !_shardingConfigOption.AutoTrackEntity || IsCrossTable || IsUseReadWriteSeparation();
return !_shardingConfigOption.AutoTrackEntity || MergeQueryCompilerContext.IsCrossTable() || MergeQueryCompilerContext.IsParallelQuery();
}
/// <summary>