public QueryJoinDef AddJoin(QuerySourceDef source, SqlSourceJoinType joinType)
        {
            Def.Sources.Add(source);
            if (!String.IsNullOrWhiteSpace(source.Alias))
            {
                _sourceAliases.Add(source.Alias, source);
            }
            else
            {
                _sourceAliasNo++;
                while (_sourceAliases.ContainsKey("source" + _sourceAliasNo))
                {
                    _sourceAliasNo++;
                }

                source.Alias = "source" + _sourceAliasNo;
                _sourceAliases.Add(source.Alias, source);
            }
            var join = new QueryJoinDef {
                Source = source, Operation = joinType
            };

            Def.Joins.Add(join);
            return(join);
        }
Beispiel #2
0
        private static void BuildJoin(SqlQuery query, QueryJoinDef join, DocDef docDef, IDataContext dataContext)
        {
            var source =
                query.Sources.First(
                    s => String.Equals(s.AliasName, join.Source.Alias, StringComparison.OrdinalIgnoreCase));
            var queryJoin = new SqlQueryJoin(source, join.Operation);

            foreach (var condition in join.Conditions)
            {
                BuildJoinCondition(query, queryJoin, condition, docDef, null, dataContext);
            }
            query.SourceJoins.Add(queryJoin);
        }
Beispiel #3
0
        public IQuery Join(QueryDef query, string alias, Action <IQueryExpression> conditionAction)
        {
            var source = new QuerySourceDef
            {
                SubQuery = query,
                Alias    = alias
            };
            var joinDef = new QueryJoinDef
            {
                Operation = SqlSourceJoinType.Inner,
                Source    = source
            };

            Def.Sources.Add(source);
            var expBuilder = new QueryJoinBuilder(this, joinDef);

            Def.Joins.Add(joinDef);
            conditionAction.Invoke(expBuilder);
            return(this);
        }
Beispiel #4
0
        public IQuery FullJoin(string docDefName, string alias, Action <IQueryExpression> conditionAction)
        {
            var source = new QuerySourceDef
            {
                DocDefName = docDefName,
                Alias      = alias
            };

            Def.Sources.Add(source);
            var joinDef = new QueryJoinDef
            {
                Operation = SqlSourceJoinType.FullOuter,
                Source    = source
            };

            var expBuilder = new QueryJoinBuilder(this, joinDef);

            Def.Joins.Add(joinDef);
            conditionAction.Invoke(expBuilder);
            return(this);
        }
Beispiel #5
0
        public IQuery Join(Guid docDefId, string alias, Action <IQueryExpression> conditionAction)
        {
            var source = new QuerySourceDef
            {
                DocDefId = docDefId,
                Alias    = alias
            };
            var joinDef = new QueryJoinDef
            {
                Operation = SqlSourceJoinType.Inner,
                Source    = source/*,
                                   * Conditions = expBuilder.Conditions*/
            };

            Def.Sources.Add(source);

            var expBuilder = new QueryJoinBuilder(this, joinDef);

            Def.Joins.Add(joinDef);
            conditionAction.Invoke(expBuilder);
            return(this);
        }
Beispiel #6
0
 public QueryJoinBuilder(BaseQueryBuilder parent, QueryJoinDef join) : base(parent)
 {
     Def = join;
 }