/// <summary> /// Give all non-aliased tables a name /// </summary> /// <param name="builderContext"></param> protected virtual void CheckTablesAlias(BuilderContext builderContext) { var tables = builderContext.EnumerateAllTables().Distinct().ToList(); // just to be nice: if we have only one table involved, there's no need to alias it if (tables.Count == 1) { tables[0].Alias = null; } else { foreach (var tableExpression in tables) { // if no alias, or duplicate alias if (string.IsNullOrEmpty(tableExpression.Alias) || FindExpressionsByName(tableExpression.Alias, builderContext).Count > 1) { int anonymousIndex = 0; var aliasBase = tableExpression.Alias; // we try to assign one until we have a unique alias do { tableExpression.Alias = MakeTableName(aliasBase, ++anonymousIndex, builderContext); } while (FindExpressionsByName(tableExpression.Alias, builderContext).Count != 1); } } } }
/// <summary> /// Finds all registered tables or columns with the given name. /// We exclude parameter because they won't be prefixed/suffixed the same way (well, that's a guess, I hope it's a good one) /// </summary> /// <param name="name"></param> /// <param name="builderContext"></param> /// <returns></returns> protected virtual IList <Expression> FindExpressionsByName(string name, BuilderContext builderContext) { var expressions = new List <Expression>(); expressions.AddRange((from t in builderContext.EnumerateAllTables() where t.Alias == name select(Expression) t).Distinct()); expressions.AddRange(from c in builderContext.EnumerateScopeColumns() where c.Alias == name select(Expression) c); return(expressions); }
/// <summary> /// Finds all registered tables or columns with the given name. /// We exclude parameter because they won't be prefixed/suffixed the same way (well, that's a guess, I hope it's a good one) /// </summary> /// <param name="name"></param> /// <param name="builderContext"></param> /// <returns></returns> protected virtual IList<Expression> FindExpressionsByName(string name, BuilderContext builderContext) { var expressions = new List<Expression>(); expressions.AddRange(from t in builderContext.EnumerateAllTables() where t.Alias == name select (Expression)t); expressions.AddRange(from c in builderContext.EnumerateScopeColumns() where c.Alias == name select (Expression)c); return expressions; }
/// <summary> /// Give all non-aliased tables a name /// </summary> /// <param name="builderContext"></param> protected virtual void CheckTablesAlias(BuilderContext builderContext) { var tables = builderContext.EnumerateAllTables().ToList(); // just to be nice: if we have only one table involved, there's no need to alias it if (tables.Count == 1) { tables[0].Alias = null; } else { foreach (var tableExpression in tables) { // if no alias, or duplicate alias if (string.IsNullOrEmpty(tableExpression.Alias) || FindExpressionsByName(tableExpression.Alias, builderContext).Count > 1) { int anonymousIndex = 0; var aliasBase = tableExpression.Alias; // we try to assign one until we have a unique alias do { tableExpression.Alias = MakeTableName(aliasBase, ++anonymousIndex, builderContext); } while (FindExpressionsByName(tableExpression.Alias, builderContext).Count != 1); } } } }