Example #1
0
        public SsisSqlTask(SqlTask obj, SSISEmitterContext context) : base(obj, context)
        {
            _logicalExecuteSQL = obj;
            _sqlTask = (DTS.TaskHost)Context.SSISSequence.AppendExecutable("STOCK:SQLTask");

            if (!string.IsNullOrEmpty(_logicalExecuteSQL.Name))
            {
                _name = _logicalExecuteSQL.Name;
            }

            _sqlTask.Name = Name + Guid.NewGuid().ToString();
            _sqlTask.Description = Description;

            SetProperty("Connection", _logicalExecuteSQL.Connection);
            SetProperty("IsolationLevel", _logicalExecuteSQL.IsolationLevel);

            switch (_logicalExecuteSQL.Type.ToUpper(System.Globalization.CultureInfo.InvariantCulture))
            {
                case "EXPRESSION": SSISTask.SqlStatementSourceType = DTSTasks.ExecuteSQLTask.SqlStatementSourceType.DirectInput; break;
                default: //case "FILE":
                    SSISTask.SqlStatementSourceType = DTSTasks.ExecuteSQLTask.SqlStatementSourceType.FileConnection; break;
            }
        }
        public static PhysicalTask.SqlTask Lower(this AstTask.AstStoredProcNode astNode)
        {
            if (astNode.AsClassOnly)
            {
                return null;
            }

            try
            {
                PhysicalTSQL.StoredProc physicalStoredProc = new Ssis2008Emitter.IR.TSQL.StoredProc();
                physicalStoredProc.Body = astNode.Body;
                physicalStoredProc.ExecuteDuringDesignTime = astNode.ExecuteDuringDesignTime;
                physicalStoredProc.Name = astNode.Name;
                physicalStoredProc.Columns.Parent = physicalStoredProc;

                foreach (AstTask.AstStoredProcColumnNode column in astNode.Columns)
                {
                    PhysicalTSQL.StoredProcColumn physicalColumn = new Ssis2008Emitter.IR.TSQL.StoredProcColumn();
                    physicalColumn.Default = column.Default;
                    physicalColumn.IsOutput = column.IsOutput;
                    physicalColumn.Name = column.Name;
                    physicalColumn.Parent = physicalStoredProc;
                    physicalColumn.Type = Ssis2008Emitter.Emitters.TSQL.PhysicalTypeTranslator.Translate(column.Type, column.Length, column.Precision, column.Scale, column.CustomType);
                    physicalStoredProc.Columns.ColumnList.Add(physicalColumn);
                }

                TSQLEmitter.StoredProcPlatformEmitter storedProcEmitter = new TSQLEmitter.StoredProcPlatformEmitter();
                string storedProcBody = storedProcEmitter.Emit(physicalStoredProc);

                PhysicalTask.SqlTask sqlTask = new Ssis2008Emitter.IR.Task.SqlTask();
                sqlTask.Body = storedProcBody;
                AddConnection(astNode.Connection);
                sqlTask.Connection = astNode.Connection.Name;
                sqlTask.ExecuteDuringDesignTime = astNode.ExecuteDuringDesignTime;
                sqlTask.Name = astNode.Name;
                sqlTask.ResultSet = "None";
                sqlTask.Type = "File";

                return sqlTask;
            }
            catch (Exception e)
            {
                throw new SSISEmitterException(astNode, e);
            }
        }
        public static PhysicalTask.SqlTask Lower(this AstTask.AstMergeTaskNode astNode)
        {
            if (astNode.AsClassOnly)
            {
                return null;
            }

            try
            {
                PhysicalTask.SqlTask mergeSqlTask = new PhysicalTask.SqlTask();
                Ssis2008Emitter.Emitters.TSQL.PlatformEmitter.MergeEmitter me = new Ssis2008Emitter.Emitters.TSQL.PlatformEmitter.MergeEmitter();

                mergeSqlTask.Name = astNode.Name;
                mergeSqlTask.Type = "File";
                mergeSqlTask.ResultSet = "NONE";
                mergeSqlTask.ExecuteDuringDesignTime = false;
                mergeSqlTask.Connection = astNode.Connection.Name;
                AddConnection(astNode.Connection);
                mergeSqlTask.Body = me.Emit(astNode);

                return mergeSqlTask;
            }
            catch (Exception e)
            {
                throw new SSISEmitterException(astNode, e);
            }
        }
        public static Package Lower(this PhysicalTSQL.Table table)
        {
            Package tablePackage = new Package();
            _CurrentPackage = tablePackage;

            AddConnection(table.ConnectionConfiguration);

            tablePackage.ConstraintMode = "Linear";
            tablePackage.DefaultPlatform = "SSIS2008";
            tablePackage.Log = true;
            tablePackage.LogConnectionName = table.ConnectionConfiguration == null ? null : table.ConnectionConfiguration.Name;
            tablePackage.Name = String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", table.Name);

            PhysicalTask.SqlTask createTableTask = new Ssis2008Emitter.IR.Task.SqlTask();
            createTableTask.Name = "Create Table";
            createTableTask.ResultSet = "None";
            createTableTask.Connection = table.ConnectionConfiguration == null ? null : table.ConnectionConfiguration.Name;
            createTableTask.ExecuteDuringDesignTime = false;
            createTableTask.Parent = tablePackage;
            createTableTask.Type = "File";
            createTableTask.Body = new TSQLEmitter.TablePlatformEmitter().Emit(table);
            tablePackage.Tasks.Add(createTableTask);

            return tablePackage;
        }
        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;
        }
        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 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;
        }
        public static PhysicalTask.SqlTask Lower(this AstTask.AstExecuteSQLTaskNode astNode)
        {
            if (astNode.AsClassOnly)
            {
                return null;
            }

            try
            {
                PhysicalTask.SqlTask sqlTask = new Ssis2008Emitter.IR.Task.SqlTask();
                sqlTask.Body = astNode.Body;
                AddConnection(astNode.Connection);
                sqlTask.Connection = astNode.Connection.Name;
                sqlTask.ExecuteDuringDesignTime = astNode.ExecuteDuringDesignTime;
                sqlTask.Name = astNode.Name;
                sqlTask.ResultSet = astNode.ResultSet.ToString();
                sqlTask.Type = astNode.Type.ToString();
                sqlTask.IsolationLevel = astNode.IsolationLevel;

                foreach (AstTask.AstParameterMappingTypeNode mapping in astNode.Results)
                {
                    PhysicalTask.ExecuteSQLResult result = new Ssis2008Emitter.IR.Task.ExecuteSQLResult();
                    result.Name = mapping.ParameterName;
                    result.VariableName = mapping.Variable.Name;
                    result.Parent = sqlTask;

                    sqlTask.ResultList.Add(result);
                }
                return sqlTask;
            }
            catch (Exception e)
            {
                throw new SSISEmitterException(astNode, e);
            }
        }