Beispiel #1
0
        public VulcanEngine.IR.IIR Execute(VulcanEngine.IR.IIR PredecessorIR)
        {
            PhysicalIR physicalIR = PredecessorIR as PhysicalIR;
            if (physicalIR == null)
            {
                // TODO: Message.Trace(Severity.Error, Resources.ErrorPhaseWorkflowIncorrectInputIRType, PredecessorIR.GetType().ToString(), this.Name);
            }

            foreach (LogicalObject physicalNode in physicalIR.PhysicalNodes)
            {
                if (physicalNode is ConnectionConfiguration)
                {
                    SsisConnectionConfiguration configEmitter = new SsisConnectionConfiguration((ConnectionConfiguration)physicalNode, new SSISEmitterContext(null, null, _pluginLoader));
                    configEmitter.Emit();
                }
            }

            int PackagesCount = physicalIR.PhysicalNodes.Count(delegate(LogicalObject o) { return o is Package; });
            int PackagesProcessed = 0;

            foreach (LogicalObject physicalNode in physicalIR.PhysicalNodes)
            {
                if (physicalNode is Package)
                {
                    SsisPackage emitterPackage = new SsisPackage((Package)physicalNode, new SSISEmitterContext(null, null, _pluginLoader));
                    MessageEngine.Global.UpdateProgress(PackagesProcessed / (double)PackagesCount);
                    emitterPackage.Emit();
                    MessageEngine.Global.UpdateProgress(++PackagesProcessed / (double)PackagesCount);
                }
            }
            return null;
        }
Beispiel #2
0
        public VulcanEngine.IR.IIR Execute(VulcanEngine.IR.IIR PredecessorIR)
        {
            XmlIR xmlIR = PredecessorIR as XmlIR;
            if (xmlIR == null)
            {
                Message.Trace(Severity.Error, Resources.ErrorPhaseWorkflowIncorrectInputIRType, PredecessorIR.GetType().ToString(), this.Name);
            }

            xmlIR.ValidateXDocuments();

            return xmlIR;
        }
Beispiel #3
0
        public VulcanEngine.IR.IIR Execute(VulcanEngine.IR.IIR PredecessorIR)
        {
            // TODO: Enhance the PluginLoader so we can use it as the type store.  We're currently missing all types that lack a friendly name.
            XmlIR xmlIR = PredecessorIR as XmlIR;
            if (xmlIR == null)
            {
                // TODO: Message.Trace(Severity.Error, Resources.ErrorPhaseWorkflowIncorrectInputIRType, PredecessorIR.GetType().ToString(), this.Name);
            }

            AstIR astIR = new AstIR(xmlIR);
            astIR.AstRootNode = new AstRootNode();

            foreach (XmlIRDocumentType docType in astIR.XDocuments.Keys)
            {
                foreach (XDocument xDocument in astIR.XDocuments[docType])
                {
                    parseElement(xDocument.Root, astIR.AstRootNode,docType);
                }
            }

            HashSet<string> processedIncludeFiles = new HashSet<string>();
            List<string> newIncludeFiles = new List<string>();

            bool bContinue;
            do
            {
                bContinue = false;
                var newFiles = from file in astIR.AstRootNode.IncludedFiles
                               where !processedIncludeFiles.Contains(file.IncludedFile)
                               select file.IncludedFile;
                List<string> newFileList = new List<string>();
                newFileList.AddRange(newFiles);
                foreach (var xmlFile in newFileList)
                {
                    XDocument xDocument = astIR.AddXml(xmlFile, XmlIRDocumentType.INCLUDE);
                    if (xDocument != null)
                    {
                        bContinue = true;
                        parseElement(xDocument.Root, astIR.AstRootNode, XmlIRDocumentType.INCLUDE);
                        processedIncludeFiles.Add(xmlFile);
                    }
                }
            } while (bContinue);

            ProcessLateBindingQueue();

            ProcessNewObjectQueue(xmlIR);

            return astIR;
        }
Beispiel #4
0
        public VulcanEngine.IR.IIR Execute(VulcanEngine.IR.IIR PredecessorIR)
        {
            AstIR ir = (AstIR)PredecessorIR;

            /*foreach (AstPackageNode p in ir.AstRootNode.Packages)
            {
                foreach (AstTaskNode t in p)
                {
                    Console.WriteLine("Task! {0}", t.Name);
                }
            } */
            return ProcessTableQuerySources(ir);
            //return ir;
        }
Beispiel #5
0
        public VulcanEngine.IR.IIR Execute(VulcanEngine.IR.IIR predecessorIR)
        {
            var physicalIR = predecessorIR as PhysicalIR;
            if (physicalIR != null)
            {
                int emittablesCount = 0;
                foreach (PhysicalObject root in physicalIR.EmittableNodes)
                {
                    emittablesCount += root.Count;
                    foreach (PhysicalObject emittable in root.Children)
                    {
                        var package = emittable as Package;
                        if (package != null)
                        {
                            package.ClearProjectDirectory();
                        }
                    }
                }

                // TODO: Progress bar is whacky.
                int emittablesProcessed = 0;
                var context = new SsisEmitterContext();
                foreach (PhysicalObject root in physicalIR.EmittableNodes)
                {
                    MessageEngine.UpdateProgress(emittablesProcessed / (double)emittablesCount);
                    foreach (ISsisEmitter emittable in root.Children)
                    {
                        emittable.Initialize(context);
                        emittable.Emit(context);
                    }

                    emittablesProcessed += root.Count;
                    MessageEngine.UpdateProgress(emittablesProcessed / (double)emittablesCount);
                }
            }

            return null;
        }
        public VulcanEngine.IR.IIR Execute(VulcanEngine.IR.IIR predecessorIR)
        {
            AstIR astIR = predecessorIR as AstIR;
            if (astIR == null)
            {
                // TODO: Message.Trace(Severity.Error, Resources.ErrorPhaseWorkflowIncorrectInputIRType, PredecessorIR.GetType().ToString(), this.Name);
            }

            PhysicalIR physicalIR = new PhysicalIR(astIR);

            try
            {
                foreach (Task.AstPackageNode packageNode in astIR.AstRootNode.Packages)
                {
                    if (packageNode.Emit && !packageNode.AsClassOnly)
                    {
                        Package package = packageNode.Lower();
                        if (String.IsNullOrEmpty(package.Type))
                        {
                            package.Type = "ETL";
                        }
                        physicalIR.PhysicalNodes.Add(package);
                    }
                }

                foreach (Dimension.AstDimensionNode dimensionNode in astIR.AstRootNode.Dimensions)
                {
                    if (dimensionNode.Emit && !dimensionNode.AsClassOnly)
                    {
                        Package package = dimensionNode.Lower().Lower();
                        package.Type = "Dimension";
                        physicalIR.PhysicalNodes.Add(package);
                    }
                }

                foreach (Fact.AstFactNode factNode in astIR.AstRootNode.Facts)
                {
                    if (factNode.Emit && !factNode.AsClassOnly)
                    {
                        Package package = factNode.Lower().Lower();
                        package.Type = "FactTable";
                        physicalIR.PhysicalNodes.Add(package);
                    }
                }

                foreach (Connection.AstConnectionNode connectionNode in astIR.AstRootNode.Connections)
                {
                    physicalIR.PhysicalNodes.Add(connectionNode.Lower());
                }

                foreach (Table.AstTableNode tableNode in astIR.AstRootNode.Tables)
                {
                    if (tableNode.Emit && !tableNode.AsClassOnly)
                    {
                        Package package = tableNode.Lower().Lower();
                        package.Type = "Table";
                        physicalIR.PhysicalNodes.Add(package);

                        foreach (Table.AstTableSourceBaseNode sourceNode in tableNode.Sources)
                        {
                            Table.AstTableDynamicSourceNode dynamicSource = sourceNode as Table.AstTableDynamicSourceNode;
                            if (dynamicSource != null)
                            {
                                Package sourcePackage = dynamicSource.Package.Lower();
                                sourcePackage.Type = "ETL";
                                physicalIR.PhysicalNodes.Add(sourcePackage);
                            }
                        }
                    }
                }
            }
            catch (Ssis2008Emitter.SSISEmitterException EmitterException)
            {
                StringBuilder err = new StringBuilder();
                err.Append("\r\nCompiling ");

                Exception e = EmitterException;
                bool bIsNullException = false;
                while (e != null)
                {
                    err.AppendFormat("{0}\r\n", e.Message);
                    if (e.InnerException != null)
                    {
                        e = (e.InnerException);
                        err.AppendFormat("-->\t");
                    }
                    else
                    {
                        if (e is NullReferenceException)
                        {
                            bIsNullException = true;
                        }
                        e = null;
                    }
                }
                MessageEngine.Global.Trace(Severity.Error, err.ToString());
                if (bIsNullException)
                {
                    MessageEngine.Global.Trace(Severity.Warning,
                    "Possible reason: an attribute or element is referencing undefined code." + 
                    "To solve this issue, fix the mismatched reference or use <Using> to include the definition.");
                }
            }

            return physicalIR;
        }
Beispiel #7
0
 private static string _generateScopedVariableName(VulcanEngine.IR.Ast.PersistentVariables.AstPersistentVariableNode astNode)
 {
     return String.Format(CultureInfo.InvariantCulture, "_{0}_ID", astNode.ScopedName.Replace(".", "_"));
 }
Beispiel #8
0
 public OleDBConnection(VulcanEngine.IR.Ast.Connection.AstConnectionNode astNode) : base(astNode)
 {
     ConnectionType = "OLEDB";
 }
Beispiel #9
0
 public AdoNetConnection(VulcanEngine.IR.Ast.Connection.AstConnectionNode astNode) : base(astNode)
 {
     ConnectionType = "ADO.NET:System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
 }