Beispiel #1
0
        private void SetEqaulityConditions(RangeVariable.RangeVariableConditions conditions, List <Expression> exprList)
        {
            Index index = conditions.RangeVar.RangeTable.GetIndexForColumns(this.session, this._colIndexSetEqual, false);

            if (index != null)
            {
                int[]        columns         = index.GetColumns();
                int          length          = columns.Length;
                Expression[] expressionArray = new Expression[columns.Length];
                for (int i = 0; i < exprList.Count; i++)
                {
                    Expression e = exprList[i];
                    if (e != null)
                    {
                        switch (e.GetExprType())
                        {
                        case 0x29:
                        case 0x2f:
                        {
                            if (e.GetLeftNode().GetRangeVariable() != conditions.RangeVar)
                            {
                                continue;
                            }
                            int num4 = ArrayUtil.Find(columns, e.GetLeftNode().GetColumnIndex());
                            if ((num4 != -1) && (expressionArray[num4] == null))
                            {
                                expressionArray[num4] = e;
                                exprList[i]           = null;
                                continue;
                            }
                            break;
                        }
                        }
                        conditions.AddCondition(e);
                        exprList[i] = null;
                    }
                }
                bool flag = false;
                for (int j = 0; j < expressionArray.Length; j++)
                {
                    Expression e = expressionArray[j];
                    if (e == null)
                    {
                        if (length == columns.Length)
                        {
                            length = j;
                        }
                        flag = true;
                    }
                    else if (flag)
                    {
                        conditions.AddCondition(e);
                        expressionArray[j] = null;
                    }
                }
                conditions.AddIndexCondition(expressionArray, index, length);
            }
        }
Beispiel #2
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 #3
0
        private void SetNonEqualityConditions(RangeVariable.RangeVariableConditions conditions, List <Expression> exprList)
        {
            if (this._colIndexSetOther.Count != 0)
            {
                int num = 0;
                int col = 0;
                foreach (KeyValuePair <int, int> pair in this._colIndexSetOther)
                {
                    int key = pair.Key;
                    if (pair.Value > num)
                    {
                        col = key;
                    }
                }
                Index indexForColumn = conditions.RangeVar.RangeTable.GetIndexForColumn(this.session, col);
                if (indexForColumn == null)
                {
                    foreach (int num4 in this._colIndexSetOther.Keys)
                    {
                        if (num4 != col)
                        {
                            indexForColumn = conditions.RangeVar.RangeTable.GetIndexForColumn(this.session, num4);
                            if (indexForColumn != null)
                            {
                                break;
                            }
                        }
                    }
                }
                if (indexForColumn != null)
                {
                    int[] columns = indexForColumn.GetColumns();
                    for (int i = 0; i < exprList.Count; i++)
                    {
                        Expression expression = exprList[i];
                        if (expression == null)
                        {
                            continue;
                        }
                        bool flag     = false;
                        int  exprType = expression.GetExprType();
                        if ((exprType - 0x2a) > 3)
                        {
                            if (exprType == 0x30)
                            {
                                goto Label_013F;
                            }
                        }
                        else if (((columns[0] == expression.GetLeftNode().GetColumnIndex()) && (expression.GetRightNode() != null)) && !expression.GetRightNode().IsCorrelated())
                        {
                            flag = true;
                        }
                        goto Label_0169;
Label_013F:
                        if ((expression.GetLeftNode().GetExprType() == 0x2f) && (columns[0] == expression.GetLeftNode().GetLeftNode().GetColumnIndex()))
                        {
                            flag = true;
                        }
Label_0169:
                        if (flag)
                        {
                            Expression[] expressionArray = new Expression[indexForColumn.GetColumnCount()];
                            expressionArray[0] = expression;
                            conditions.AddIndexCondition(expressionArray, indexForColumn, 1);
                            exprList[i] = null;
                            return;
                        }
                    }
                }
            }
        }