Esempio n. 1
0
        public override IJoinSourceQueryBuilder <TRecord> Join(IAliasedSelectSource source, JoinType joinType, CommandParameterValues parameterValues, Parameters parameters, ParameterDefaults parameterDefaults)
        {
            if (clauses.Count == 0)
            {
                throw new InvalidOperationException("Must have at least one 'ON' clause per join");
            }

            intermediateJoins.Add(new Join(clauses.ToList(), joinSource, type));
            clauses    = new List <JoinClause>();
            joinSource = source;
            type       = joinType;

            var commandParameterValues    = new CommandParameterValues(ParamValues, parameterValues);
            var combinedParameters        = new Parameters(Params, parameters);
            var combinedParameterDefaults = new ParameterDefaults(ParamDefaults, parameterDefaults);

            ParamValues.Clear();
            ParamValues.AddRange(commandParameterValues);
            Params.Clear();
            Params.AddRange(combinedParameters);
            ParamDefaults.Clear();
            ParamDefaults.AddRange(combinedParameterDefaults);

            return(this);
        }
Esempio n. 2
0
 public override IJoinSourceQueryBuilder <TRecord> Join(IAliasedSelectSource source, JoinType joinType, CommandParameterValues parameterValues, Parameters parameters, ParameterDefaults parameterDefaults)
 {
     return(new JoinSourceQueryBuilder <TRecord>(AsSource(),
                                                 joinType,
                                                 source,
                                                 RelationalTransaction,
                                                 TableAliasGenerator,
                                                 UniqueParameterNameGenerator,
                                                 new CommandParameterValues(ParamValues, parameterValues),
                                                 new Parameters(Params, parameters),
                                                 new ParameterDefaults(ParamDefaults, parameterDefaults)));
 }
Esempio n. 3
0
        public IJoinSourceQueryBuilder <TRecord> Join(IAliasedSelectSource source, JoinType joinType, CommandParameterValues parameterValues, Parameters parameters, ParameterDefaults parameterDefaults)
        {
            var subquery = new SubquerySource(selectBuilder.GenerateSelectWithoutDefaultOrderBy(), tableAliasGenerator.GenerateTableAlias());

            return(new JoinSourceQueryBuilder <TRecord>(subquery,
                                                        joinType,
                                                        source,
                                                        transaction,
                                                        tableAliasGenerator,
                                                        uniqueParameterNameGenerator,
                                                        new CommandParameterValues(ParameterValues, parameterValues),
                                                        new Parameters(Parameters, parameters),
                                                        new ParameterDefaults(ParameterDefaults, parameterDefaults)));
        }
Esempio n. 4
0
 public JoinSourceQueryBuilder(IAliasedSelectSource originalSource,
                               JoinType joinType,
                               IAliasedSelectSource nextJoin,
                               IRelationalTransaction relationalTransaction,
                               ITableAliasGenerator tableAliasGenerator,
                               IUniqueParameterNameGenerator uniqueParameterNameGenerator,
                               CommandParameterValues parameterValues,
                               Parameters parameters,
                               ParameterDefaults parameterDefaults)
     : base(relationalTransaction, tableAliasGenerator, uniqueParameterNameGenerator, parameterValues, parameters, parameterDefaults)
 {
     this.originalSource = originalSource;
     clauses             = new List <JoinClause>();
     joinSource          = nextJoin;
     type = joinType;
 }
Esempio n. 5
0
 public abstract IJoinSourceQueryBuilder <TRecord> Join(IAliasedSelectSource source, JoinType joinType, CommandParameterValues parameterValues, Parameters parameters, ParameterDefaults parameterDefaults);
Esempio n. 6
0
 /// <summary>
 /// Adds a left hash join to the query.
 /// The query that has been built up so far in the left hand side query builder may be converted to a subquery to capture more complex modifications, such as where clauses.
 /// </summary>
 /// <typeparam name="TRecord">The record type of the query builder</typeparam>
 /// <param name="queryBuilder">The query builder which represents the left hand side of the join</param>
 /// <param name="source">The source which represents the right hand side of the join</param>
 /// <returns>The query builder that can be used to further modify the query, or execute the query</returns>
 public static IJoinSourceQueryBuilder <TRecord> LeftHashJoin <TRecord>(this IQueryBuilder <TRecord> queryBuilder,
                                                                        IAliasedSelectSource source) where TRecord : class
 {
     return(queryBuilder.Join(source, JoinType.LeftHashJoin, queryBuilder.ParameterValues, queryBuilder.Parameters, queryBuilder.ParameterDefaults));
 }
Esempio n. 7
0
 public Join(IReadOnlyList <JoinClause> clauses, IAliasedSelectSource source, JoinType type)
 {
     this.clauses = clauses;
     this.source  = source;
     this.type    = type;
 }
Esempio n. 8
0
 public JoinedSource(IAliasedSelectSource source, IReadOnlyList <Join> joins)
 {
     this.joins = joins;
     Source     = source;
 }