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); }
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))); }
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))); }
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; }
public abstract IJoinSourceQueryBuilder <TRecord> Join(IAliasedSelectSource source, JoinType joinType, CommandParameterValues parameterValues, Parameters parameters, ParameterDefaults parameterDefaults);
/// <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)); }
public Join(IReadOnlyList <JoinClause> clauses, IAliasedSelectSource source, JoinType type) { this.clauses = clauses; this.source = source; this.type = type; }
public JoinedSource(IAliasedSelectSource source, IReadOnlyList <Join> joins) { this.joins = joins; Source = source; }