Beispiel #1
0
 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>();
     }
 }
Beispiel #2
0
 public void ReplaceColumnReference(RangeVariable range, Expression[] list)
 {
     if (this.JoinCondition != null)
     {
         this.JoinCondition.ReplaceColumnReferences(range, list);
     }
 }
Beispiel #3
0
 private void AssignToRangeVariable(RangeVariable rangeVar, RangeVariable.RangeVariableConditions conditions, int rangeVarIndex, List <Expression> exprList)
 {
     if (exprList.Count != 0)
     {
         this.SetIndexConditions(conditions, exprList, rangeVarIndex, true);
     }
 }
Beispiel #4
0
 public virtual bool HasReference(RangeVariable range)
 {
     if (!this._leftQueryExpression.HasReference(range))
     {
         return(this._rightQueryExpression.HasReference(range));
     }
     return(true);
 }
Beispiel #5
0
 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;
 }
Beispiel #6
0
 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);
         }
     }
 }
Beispiel #7
0
 public RangeVariableConditions(RangeVariable rangeVar, bool isJoin)
 {
     this.RangeVar = rangeVar;
     this.IsJoin   = isJoin;
 }
Beispiel #8
0
 public RangeVariableConditions(RangeVariable.RangeVariableConditions other)
 {
     this.RangeVar          = other.RangeVar;
     this.IsJoin            = other.IsJoin;
     this.NonIndexCondition = other.NonIndexCondition;
 }
Beispiel #9
0
 public RangeIteratorRight(Session session, RangeVariable rangeVar, RangeVariable.RangeIteratorMain main) : base(session, rangeVar)
 {
     base.IsFullIterator = true;
 }
Beispiel #10
0
 public virtual void ReplaceColumnReference(RangeVariable range, Expression[] list)
 {
     this._leftQueryExpression.ReplaceColumnReference(range, list);
     this._rightQueryExpression.ReplaceColumnReference(range, list);
 }