public static PhysicalTask.SequenceTask Lower(this AstTask.AstStagingContainerTaskNode astNode) { if (astNode.AsClassOnly) { return null; } try { TSQLEmitter.TemplatePlatformEmitter createStagingTemplate = new Ssis2008Emitter.Emitters.TSQL.PlatformEmitter.TemplatePlatformEmitter("CreateStagingTable", astNode.Table.Name, astNode.CreateAs); IR.TSQL.Table table = astNode.Table.Lower(); table.Indexes.IndexList.Clear(); //table.ConstraintList.Clear(); if (astNode.UseStaticSource == false) { table.DefaultValues.DefaultValueList.Clear(); } foreach (string s in astNode.DropConstraints) { for (int i = 0; i < table.ConstraintList.Count; i++) { if (String.Compare(s.Trim(), table.ConstraintList[i].Name.Trim(), true) == 0) { table.ConstraintList.RemoveAt(i); break; } } } foreach (IR.TSQL.Constraint constraint in table.ConstraintList) { constraint.Name = String.Format("{0}_{1}", astNode.CreateAs, constraint.Name); } table.ForeignKeyConstraintList.Clear(); table.Name = astNode.CreateAs; table.ConnectionConfiguration = astNode.StagingConnection.Lower(); AstTask.AstExecuteSQLTaskNode createStagingTask = new VulcanEngine.IR.Ast.Task.AstExecuteSQLTaskNode(); createStagingTask.ParentASTNode = astNode; createStagingTask.Connection = astNode.StagingConnection; AddConnection(astNode.StagingConnection); createStagingTask.ExecuteDuringDesignTime = true; createStagingTask.Name = astNode.Name; //createStagingTask.Type = VulcanEngine.IR.Ast.Task.ExecuteSQLTaskType.Expression; createStagingTask.Type = VulcanEngine.IR.Ast.Task.ExecuteSQLTaskType.File; //createStagingTask.Body = String.Format("\"{0}\"", createStagingTemplate.Emit(null)); createStagingTask.Body = new TSQLEmitter.TablePlatformEmitter().Emit(table); TSQLEmitter.TemplatePlatformEmitter dropStagingTemplate = new Ssis2008Emitter.Emitters.TSQL.PlatformEmitter.TemplatePlatformEmitter("DropStagingTable", astNode.CreateAs); AstTask.AstExecuteSQLTaskNode truncateStagingTask = new VulcanEngine.IR.Ast.Task.AstExecuteSQLTaskNode(); truncateStagingTask.ParentASTNode = astNode; truncateStagingTask.Connection = astNode.StagingConnection; truncateStagingTask.ExecuteDuringDesignTime = false; truncateStagingTask.Name = astNode.Name; truncateStagingTask.Type = VulcanEngine.IR.Ast.Task.ExecuteSQLTaskType.Expression; truncateStagingTask.Body = String.Format("\"{0}\"", dropStagingTemplate.Emit(null)); astNode.Tasks.Insert(0, createStagingTask); astNode.Tasks.Add(truncateStagingTask); return ((AstTask.AstContainerTaskNode)astNode).Lower(); } catch (Exception e) { throw new SSISEmitterException(astNode, e); } }
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; }