コード例 #1
0
ファイル: QueryBuilder.cs プロジェクト: Fax/dblinq2007
        /// <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);
                    }
                }
            }
        }
コード例 #2
0
ファイル: QueryBuilder.cs プロジェクト: Fax/dblinq2007
        /// <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);
        }
コード例 #3
0
 /// <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;
 }
コード例 #4
0
 /// <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);
             }
         }
     }
 }