Ejemplo n.º 1
0
 public static Predicate Or(params FNode[] Nodes)
 {
     FNodeResult or = new FNodeResult(null, new AndMany());
     or.AddChildren(Nodes);
     return new Predicate(or);
 }
Ejemplo n.º 2
0
 public static Predicate And(params FNode[] Nodes)
 {
     FNodeResult and = new FNodeResult(null, new AndMany());
     and.AddChildren(Nodes);
     return new Predicate(and);
 }
Ejemplo n.º 3
0
 public static FNode Multiply(FNode Left, FNode Right)
 {
     FNode t = new FNodeResult(Left.ParentNode, CellFunctionFactory.LookUp(FunctionNames.OP_MUL));
     t.AddChildren(Left, Right);
     return t;
 }
Ejemplo n.º 4
0
        // Main Join Functions //
        /// <summary>
        /// Allows the user to perform a join based on the equality predicate AND each predicate link via 'AND'
        /// </summary>
        /// <param name="Output"></param>
        /// <param name="JM"></param>
        /// <param name="JA"></param>
        /// <param name="T1"></param>
        /// <param name="J1"></param>
        /// <param name="T2"></param>
        /// <param name="J2"></param>
        /// <param name="CM"></param>
        public static void Join(MergeMethod JM, MergeAlgorithm JA, RecordWriter Output, FNodeSet Fields, Predicate Where, DataSet Data1, DataSet Data2, 
            Key Equality1, Key Equality2, StaticRegister Memory1, StaticRegister Memory2)
        {

            // Do some checks first //
            if (Where == null)
                Where = Predicate.TrueForAll;
            if (Equality1.Count != Equality2.Count)
                throw new Exception("Both join keys must have the same length");
            if (Equality1.Count == 0)
                JA = MergeAlgorithm.NestedLoop;

            // Nested loop; if the algorithm is nested loop and we have keys, we need to build a new where clause that has the equality predicates //
            FNodeResult nl_node = new FNodeResult(null, new AndMany());
            nl_node.AddChildNode(Where.Node.CloneOfMe());
            for (int i = 0; i < Equality1.Count; i++)
            {

                FNodeFieldRef left = new FNodeFieldRef(null, Equality1[i], Data1.Columns.ColumnAffinity(Equality1[i]), Data1.Columns.ColumnSize(Equality1[i]), Memory1);
                FNodeFieldRef right = new FNodeFieldRef(null, Equality2[i], Data2.Columns.ColumnAffinity(Equality2[i]), Data2.Columns.ColumnSize(Equality2[i]), Memory2);
                FNodeResult eq = new FNodeResult(null, new CellBoolEQ());
                eq.AddChildren(left, right);
                nl_node.AddChildNode(eq);

            }

            Predicate nl_where = (Equality1.Count == 0 ? Where : new Predicate(nl_node));

            // Switch //
            switch (JA)
            {
                case MergeAlgorithm.SortMerge:
                    SortMerge(JM, Output, Fields, Where, Data1, Data2, Equality1, Equality2, Memory1, Memory2);
                    break;
                case MergeAlgorithm.NestedLoop:
                    NestedLoop(JM, Output, Fields, nl_where, Data1, Data2, Memory1, Memory2);
                    break;
                default:
                    HashTable(JM, Output, Fields, Where, Data1, Data2, Equality1, Equality2, Memory1, Memory2);
                    break;
            }

        }
Ejemplo n.º 5
0
 public static FNode operator ^(FNode Left, FNode Right)
 {
     FNodeResult t = new FNodeResult(null, new CellFuncFVPower());
     t.AddChildren(Left, Right);
     return t;
 }
Ejemplo n.º 6
0
 public static FNode operator %(FNode Left, FNode Right)
 {
     FNodeResult t = new FNodeResult(null, new CellBinMod());
     t.AddChildren(Left, Right);
     return t;
 }