Ejemplo n.º 1
0
        private static PhysicalTask.SequenceTask ProcessHelperTables(AstTask.AstContainerTaskNode astNode, PhysicalTask.SequenceTask sequenceTask)
        {
            foreach (AstTable.AstTableNode helperTableNode in astNode.HelperTables)
            {
                IR.TSQL.Table helperTable = helperTableNode.Lower();
                if (helperTable != null)
                {
                    AstTask.AstExecuteSQLTaskNode createHelperTableTask = new VulcanEngine.IR.Ast.Task.AstExecuteSQLTaskNode();
                    createHelperTableTask.ParentASTNode = astNode;
                    createHelperTableTask.Name = "__Create HelperTable " + helperTable.Name;
                    createHelperTableTask.Connection = helperTableNode.Connection;
                    createHelperTableTask.ExecuteDuringDesignTime = helperTableNode.ExecuteDuringDesignTime;
                    createHelperTableTask.Type = VulcanEngine.IR.Ast.Task.ExecuteSQLTaskType.File;
                    createHelperTableTask.Body = new TSQLEmitter.TablePlatformEmitter().Emit(helperTable);
                    sequenceTask.Tasks.Insert(0, createHelperTableTask.Lower());

                    AstTask.AstExecuteSQLTaskNode dropHelperTableTask = new VulcanEngine.IR.Ast.Task.AstExecuteSQLTaskNode();
                    dropHelperTableTask.ParentASTNode = astNode;
                    dropHelperTableTask.Name = "__Drop HelperTable " + helperTable.Name;
                    dropHelperTableTask.Connection = helperTableNode.Connection;
                    dropHelperTableTask.ExecuteDuringDesignTime = false;
                    dropHelperTableTask.Type = VulcanEngine.IR.Ast.Task.ExecuteSQLTaskType.Expression;
                    dropHelperTableTask.Body = String.Format("\"{0}\"", new TSQLEmitter.TemplatePlatformEmitter("DropHelperTable", helperTable.Name).Emit(helperTable));
                    sequenceTask.Tasks.Add(dropHelperTableTask.Lower());
                }
            }

            return sequenceTask;
        }
Ejemplo n.º 2
0
        private static HashSet<AstTaskNode> FindPredecessors(AstTask.AstContainerTaskNode container, AstTaskNode task, AstTaskNode previousTask, Dictionary<AstTaskNode, ICollection<AstTaskNode>> successors)
        {
            var predecessors = new HashSet<AstTaskNode>();

            if (task.PrecedenceConstraints != null)
            {
                foreach (var input in task.PrecedenceConstraints.Inputs)
                {
                    if (input.OutputPath != null)
                    {
                        var predecessorNode = input.OutputPath.ParentItem as AstTaskNode;
                        predecessors.Add(predecessorNode);
                    }
                }
            }

            //if (containerTask != null && containerTask.ConstraintMode == ContainerConstraintMode.Linear && predecessors.Count == 0 && previousTask != null)
            if (container.ConstraintMode == ContainerConstraintMode.Linear && predecessors.Count == 0 && previousTask != null)
            {
                predecessors.Add(previousTask);
            }

            return predecessors;
        }
Ejemplo n.º 3
0
        private static void ComputeRootsAndSuccessors(AstTask.AstContainerTaskNode container, IEnumerable<AstTaskNode> unsortedTransformations, HashSet<AstTaskNode> roots, Dictionary<AstTaskNode, ICollection<AstTaskNode>> successors)
        {
            AstTaskNode previousTransformation = null;
            foreach (var transformation in unsortedTransformations)
            {
                HashSet<AstTaskNode> predecessors = FindPredecessors(container, transformation, previousTransformation, successors);

                if (predecessors.Count == 0)
                {
                    roots.Add(transformation);
                }

                foreach (var predecessor in predecessors)
                {
                    if (!successors.ContainsKey(predecessor))
                    {
                        successors.Add(predecessor, new HashSet<AstTaskNode>());
                    }

                    successors[predecessor].Add(transformation);
                }

                previousTransformation = transformation;
            }
        }
Ejemplo n.º 4
0
 private static List<AstTaskNode> SortTasks(AstTask.AstContainerTaskNode container, IEnumerable<AstTaskNode> unsortedTasks)
 {
     var roots = new HashSet<AstTaskNode>();
     var successors = new Dictionary<AstTaskNode, ICollection<AstTaskNode>>();
     ComputeRootsAndSuccessors(container, unsortedTasks, roots, successors);
     return FlowSorter.TopologicalSort(roots,successors);
 }
Ejemplo n.º 5
0
        private static void LowerChildren(AstTask.AstContainerTaskNode container, LoweringContext context)
        {
            foreach (AstTask.AstVariableNode variable in container.Variables)
            {
                PhysicalLoweringProcessor.Lower(variable, context);
            }

            var sortedTasks = SortTasks(container, container.Tasks);
            foreach (AstTask.AstTaskNode task in sortedTasks)
            {
                PhysicalLoweringProcessor.Lower(task, context);
            }
        }
Ejemplo n.º 6
0
        public static void LowerEventHandlers(AstTask.AstTaskNode astTaskNode, Executable parentExecutable, LoweringContext context)
        {
            foreach (AstTask.AstTaskEventHandlerNode astTaskEventHandler in astTaskNode.Events)
            {
                PhysicalTask.EventHandler e = new IR.Tasks.EventHandler(astTaskEventHandler, parentExecutable);
                context.ParentObject.Children.Add(e);

                foreach (AstTask.AstTaskNode task in astTaskEventHandler.Tasks)
                {
                    context = new TaskLoweringContext(e);
                    PhysicalLoweringProcessor.Lower(task, context);
                }
            }
        }