private void CheckSubQueryShardingValues(ISqlCommandContext <ISqlCommand> sqlStatementContext, ShardingRule shardingRule, ShardingConditions shardingConditions) { foreach (var tableName in sqlStatementContext.GetTablesContext().GetTableNames()) { var tableRule = shardingRule.FindTableRule(tableName); if (tableRule != null && IsRoutingByHint(shardingRule, tableRule) && HintManager.GetDatabaseShardingValues(tableName).Any() && HintManager.GetTableShardingValues(tableName).Any()) { return; } } ShardingAssert.If(shardingConditions.Conditions.IsEmpty(), "Must have sharding column with subquery."); if (shardingConditions.Conditions.Count > 1) { ShardingAssert.Else(IsSameShardingCondition(shardingRule, shardingConditions), "Sharding value must same with subquery."); } }
private List <IRouteValue> GetDatabaseShardingValuesFromHint() { return(GetRouteValues(HintManager.IsDatabaseShardingOnly() ? HintManager.GetDatabaseShardingValues() : HintManager.GetDatabaseShardingValues(LogicTableName))); }