public RangeVariableResolver(RangeVariable[] rangeVars, Expression conditions, ParserDQL.CompileContext compileContext) { this.RangeVariables = rangeVars; this._conditions = conditions; this._compileContext = compileContext; for (int i = 0; i < rangeVars.Length; i++) { RangeVariable key = rangeVars[i]; this._rangeVarSet.Add(key); if (key.IsLeftJoin || key.IsRightJoin) { this._hasOuterJoin = true; } } this._inExpressions = new Expression[rangeVars.Length]; this._inInJoin = new bool[rangeVars.Length]; this._tempJoinExpressions = new List <Expression> [rangeVars.Length]; for (int j = 0; j < rangeVars.Length; j++) { this._tempJoinExpressions[j] = new List <Expression>(); } this._joinExpressions = new List <Expression> [rangeVars.Length]; for (int k = 0; k < rangeVars.Length; k++) { this._joinExpressions[k] = new List <Expression>(); } this._whereExpressions = new List <Expression> [rangeVars.Length]; for (int m = 0; m < rangeVars.Length; m++) { this._whereExpressions[m] = new List <Expression>(); } }
public void ReplaceColumnReference(RangeVariable range, Expression[] list) { if (this.JoinCondition != null) { this.JoinCondition.ReplaceColumnReferences(range, list); } }
private void AssignToRangeVariable(RangeVariable rangeVar, RangeVariable.RangeVariableConditions conditions, int rangeVarIndex, List <Expression> exprList) { if (exprList.Count != 0) { this.SetIndexConditions(conditions, exprList, rangeVarIndex, true); } }
public virtual bool HasReference(RangeVariable range) { if (!this._leftQueryExpression.HasReference(range)) { return(this._rightQueryExpression.HasReference(range)); } return(true); }
public RangeIteratorMain(Session session, RangeVariable rangeVar) { base.rangePosition = rangeVar.RangePosition; base.Store = rangeVar.RangeTable.GetRowStore(session); base.session = session; base.RangeVar = rangeVar; base.CurrentData = rangeVar._emptyData; base.isBeforeFirst = true; if (rangeVar.IsRightJoin) { this.Lookup = new OrderedIntHashSet(); } this.Conditions = rangeVar.JoinConditions; if (rangeVar.WhereConditions[0].HasIndexCondition()) { this.Conditions = rangeVar.WhereConditions; } this.whereConditions = rangeVar.WhereConditions; this.joinConditions = rangeVar.JoinConditions; }
private void SetInConditionsAsTables() { for (int i = this.RangeVariables.Length - 1; i >= 0; i--) { RangeVariable range = this.RangeVariables[i]; ExpressionLogical e = (ExpressionLogical)this._inExpressions[i]; if (e != null) { OrderedIntHashSet set = new OrderedIntHashSet(); e.AddLeftColumnsForAllAny(range, set); Index index = range.RangeTable.GetIndexForColumns(this.session, set, false); int num2 = 0; for (int j = 0; j < index.GetColumnCount(); j++) { if (set.Contains(index.GetColumns()[j])) { num2++; } } RangeVariable addition = new RangeVariable(e.GetRightNode().GetTable(), null, null, null, this._compileContext) { IsGenerated = true }; RangeVariable[] dest = new RangeVariable[this.RangeVariables.Length + 1]; ArrayUtil.CopyAdjustArray <RangeVariable>(this.RangeVariables, dest, addition, i, 1); this.RangeVariables = dest; Expression[] exprList = new Expression[num2]; for (int k = 0; k < num2; k++) { int num5 = index.GetColumns()[k]; int colIndexRight = set.GetIndex(num5); exprList[k] = new ExpressionLogical(range, num5, addition, colIndexRight); } bool flag = this.RangeVariables[i].IsLeftJoin || this.RangeVariables[i].IsRightJoin; RangeVariable.RangeVariableConditions conditions1 = (!this._inInJoin[i] & flag) ? range.WhereConditions[0] : range.JoinConditions[0]; conditions1.AddIndexCondition(exprList, index, exprList.Length); conditions1.AddCondition(e); } } }
public RangeVariableConditions(RangeVariable rangeVar, bool isJoin) { this.RangeVar = rangeVar; this.IsJoin = isJoin; }
public RangeVariableConditions(RangeVariable.RangeVariableConditions other) { this.RangeVar = other.RangeVar; this.IsJoin = other.IsJoin; this.NonIndexCondition = other.NonIndexCondition; }
public RangeIteratorRight(Session session, RangeVariable rangeVar, RangeVariable.RangeIteratorMain main) : base(session, rangeVar) { base.IsFullIterator = true; }
public virtual void ReplaceColumnReference(RangeVariable range, Expression[] list) { this._leftQueryExpression.ReplaceColumnReference(range, list); this._rightQueryExpression.ReplaceColumnReference(range, list); }