private static PhysicalTask.SqlTask CreateLogReadPreviousValuesTask(PhysicalTask.SequenceTask logContainer, PhysicalTask.SequenceTask container, string path) { string logTaskName = Resources.Log + Resources.Seperator + Resources.LoadInto + Resources.Seperator + logContainer.Name; PhysicalTask.SqlTask logReadValuesTask = new PhysicalTask.SqlTask(); logReadValuesTask.Type = "Expression"; logReadValuesTask.Name = String.Format("LogReadValues-{0}", logContainer.Name); logReadValuesTask.Connection = logContainer.LogConnectionName; logReadValuesTask.ResultSet = "NONE"; AddVariable(logContainer, Resources.LastSuccessfulRunLogID, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Input, logReadValuesTask, "INT32"); AddVariable(logContainer, Resources.StartTime, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logReadValuesTask, "INT32"); AddVariable(logContainer, Resources.EndTime, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logReadValuesTask, "INT32"); AddVariable(logContainer, Resources.Status, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logReadValuesTask, "STRING"); AddVariable(logContainer, Resources.Notes, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logReadValuesTask, "STRING"); StringBuilder sGetValues = new StringBuilder(); sGetValues.Append(new TSQLEmitter.LogPlatformEmitter().LogGetPredefinedValues(logContainer)); foreach (Variable v in container.VariableList) { sGetValues.Append(" + \n"); sGetValues.Append(new TSQLEmitter.LogPlatformEmitter().LogGetValue(logContainer, Resources.LastSuccessfulRunLogID, SetVariablePath(path), v.Name)); AddVariable(v, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logReadValuesTask); } logReadValuesTask.Body = sGetValues.ToString(); return logReadValuesTask; }
public static PhysicalTask.SqlTask CreateLogEndTask(PhysicalTask.SequenceTask logContainer, PhysicalTask.SequenceTask container, string path) { StringBuilder sLogEndTask = new StringBuilder(); sLogEndTask.Append(new TSQLEmitter.LogPlatformEmitter().LogPrepareToSetValue(logContainer)); sLogEndTask.Append(" + \n"); string logTaskName = Resources.Log + Resources.Seperator + _CurrentPackage.Name + Resources.Seperator + logContainer.Name + Resources.Seperator; PhysicalTask.SqlTask logEndTask = new PhysicalTask.SqlTask();//logEndTask.logContainer, context, logTaskName + Resources.Stop); logEndTask.Type = "Expression"; logEndTask.Connection = logContainer.LogConnectionName; logEndTask.ResultSet = "NONE"; Variable varLogID = AddVariable(logContainer, Resources.LogID, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Input, logEndTask, "INT32"); foreach (Variable variable in container.VariableList) { sLogEndTask.Append(new TSQLEmitter.LogPlatformEmitter().LogSetValue(logContainer, varLogID.Name, SetVariablePath(path), variable.Name, variable.Name)); sLogEndTask.Append(" + \n"); AddVariable(variable, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Input, logEndTask); } sLogEndTask.Append(new TSQLEmitter.LogPlatformEmitter().LogEnd(logContainer, varLogID.Name)); AddVariable(logContainer, Resources.LogID, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Input, logEndTask, "INT32"); logEndTask.Body = sLogEndTask.ToString(); return logEndTask; }
public static PhysicalTask.SqlTask CreateLogStartTask(PhysicalTask.SequenceTask LogContainer, string path) { string logTaskName = Resources.Log + Resources.Seperator + _CurrentPackage.Name + Resources.Seperator + LogContainer.Name + Resources.Seperator; PhysicalTask.SqlTask logStartTask = new PhysicalTask.SqlTask(); Variable varLogID = AddVariable(LogContainer, Resources.LogID, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logStartTask, "INT32"); AddVariable(LogContainer, Resources.LastSuccessfulRunLogID, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logStartTask, "INT32"); AddVariable(LogContainer, Resources.IsAnotherInstanceCurrentlyRunningLogID, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, logStartTask, "INT32"); logStartTask.Type = "Expression"; logStartTask.Name = logTaskName + Resources.Start; logStartTask.ResultSet = "NONE"; logStartTask.Connection = LogContainer.LogConnectionName; logStartTask.ExecuteDuringDesignTime = false; logStartTask.Parent = LogContainer; logStartTask.Body = new TSQLEmitter.LogPlatformEmitter().LogStart(LogContainer, _CurrentPackage.Name, LogContainer.Name, GetVariablePathXML(path)); return logStartTask; }
private static void AddVariable(Variable variable, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections direction, PhysicalTask.SqlTask sqlTask) { PhysicalTask.ExecuteSQLParameter parameter = new PhysicalTask.ExecuteSQLParameter(); parameter.Variable = variable; parameter.Direction = direction; parameter.OleDbType = GetVariableType(variable.Type); sqlTask.ParameterList.Add(parameter); }
private static Variable AddVariable(PhysicalTask.SequenceTask LogContainer, string name, Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections direction, PhysicalTask.SqlTask sqlTask, string type) { Variable variable = new Variable(); variable.Name = LogContainer.Name + Resources.Seperator + name; variable.Type = type; variable.Value = "-1"; AddVariable(variable, direction, sqlTask); return variable; }
private static PhysicalDataFlow.Transformation ProcessTransformList(VulcanCollection<AstTransformation.AstTransformationNode> transformations, PhysicalTask.PipelineTask pipelineTask, PhysicalDataFlow.Transformation previousNode, Dictionary<string, PhysicalDataFlow.Transformation> componentLibrary) { PhysicalDataFlow.Transformation firstNode = null; List<AstTransformation.AstTransformationNode> allTransformations = new List<VulcanEngine.IR.Ast.Transformation.AstTransformationNode>(); foreach (AstTransformation.AstTransformationNode astTransformation in transformations) { if (astTransformation.AsClassOnly) { continue; } if (astTransformation is AstTransformation.AstDataFlowNode) { foreach (AstTransformation.AstTransformationNode transformation in ((AstTransformation.AstDataFlowNode)astTransformation).Transformations) { allTransformations.Add(transformation); } } else { allTransformations.Add(astTransformation); } } foreach (AstTransformation.AstTransformationNode astTransformation in allTransformations) { if (astTransformation.AsClassOnly) { continue; } try { PhysicalDataFlow.Transformation physicalTransformation = astTransformation.Lower(); physicalTransformation.Parent = pipelineTask; pipelineTask.Transformations.Add(physicalTransformation); // TODO: Fix logical node remapping switch (astTransformation.GetType().Name) { case "AstUnionAllNode": AstTransformation.AstUnionAllNode unionNode = astTransformation as AstTransformation.AstUnionAllNode; Ssis2008Emitter.IR.DataFlow.UnionAll physicalUnionNode = physicalTransformation as Ssis2008Emitter.IR.DataFlow.UnionAll; foreach (AstTransformation.AstUnionAllInputPathNode unionInputPath in unionNode.InputPathCollection) { Ssis2008Emitter.IR.DataFlow.UnionInputPath inputPath = new Ssis2008Emitter.IR.DataFlow.UnionInputPath(); inputPath.Name = unionInputPath.PathName; string componentFullName = astTransformation.ParentASTNode.ReferenceableName + VulcanEngine.Common.IRUtility.NamespaceSeparator + unionInputPath.Source; if (componentLibrary.ContainsKey(componentFullName)) { inputPath.Source = componentLibrary[componentFullName].Name; } inputPath.Parent = physicalUnionNode; var physicalMappings = from map in unionInputPath.Maps select new Ssis2008Emitter.IR.DataFlow.UnionMapping() { Input = map.SourceName, Output = map.DestinationName }; inputPath.MappingList = physicalMappings.ToList<Ssis2008Emitter.IR.DataFlow.UnionMapping>(); physicalUnionNode.InputPathList.Add(inputPath); } break; case "AstConditionalSplitNode": AstTransformation.AstConditionalSplitNode splitNode = astTransformation as AstTransformation.AstConditionalSplitNode; Ssis2008Emitter.IR.DataFlow.ConditionalSplit physicalSplitNode = physicalTransformation as Ssis2008Emitter.IR.DataFlow.ConditionalSplit; PhysicalDataFlow.Condition defaultCondition = new Ssis2008Emitter.IR.DataFlow.Condition(); defaultCondition.Expression = "false"; defaultCondition.OutputPath = splitNode.OutputPath.Name; physicalSplitNode.DefaultCondition = defaultCondition; foreach (AstTransformation.AstConditionalSplitOutputNode outputNode in splitNode.Outputs) { PhysicalDataFlow.Condition physicalCondition = new Ssis2008Emitter.IR.DataFlow.Condition(); physicalCondition.Expression = outputNode.Expression; physicalCondition.OutputPath = outputNode.Name; physicalSplitNode.ConditionList.Add(physicalCondition); } break; } if (astTransformation.InputPath != null) { string componentFullName = astTransformation.ParentASTNode.ReferenceableName + VulcanEngine.Common.IRUtility.NamespaceSeparator + astTransformation.InputPath.Source; if (componentLibrary.ContainsKey(componentFullName)) { physicalTransformation.InputPath.Source = componentLibrary[componentFullName].Name; } } if (firstNode == null) { firstNode = physicalTransformation; } previousNode = physicalTransformation; componentLibrary[physicalTransformation.AstNodeName] = physicalTransformation; } catch (Exception e) { throw new SSISEmitterException(astTransformation, e); } } return firstNode; }
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; }