コード例 #1
0
ファイル: FSAFactory.cs プロジェクト: mpvyard/ORegex
        private void EvaluateLook(
            int start,
            int end,
            FSA <TValue> fsa,
            LookAheadQuantifier quantifier,
            AstConcatNode concatNode,
            ORegexOptions options)
        {
            bool isBehind   = options.HasFlag(ORegexOptions.ReversePattern) ? !quantifier.IsBehind : quantifier.IsBehind;
            bool isNegative = quantifier.IsNegative;

            var condOptions = isBehind ? ORegexOptions.RightToLeft : ORegexOptions.None;
            var concat      = new AstConcatNode(concatNode.Children, concatNode.Range);
            var root        = new AstRootNode(concat,
                                              true,
                                              false,
                                              concat.Range,
                                              new[]
            {
                ORegexAstFactory <TValue> .MainCaptureName
            });
            var fa     = Create(root, condOptions);
            var oregex = new ORegex <TValue>(fa, condOptions);

            var func = new ORegexPredicateEdge <TValue>("#look", oregex, isNegative, isBehind);

            EvaluateCondition(start, end, fsa, func);
        }
コード例 #2
0
        public static void ProcessPackages(AstRootNode astRootNode)
        {
            foreach (var package in astRootNode.Packages)
            {
                _processPackage(package);
            }

            _processMetadataTasks(astRootNode.SymbolTable);
        }
コード例 #3
0
ファイル: DevelopmentHelper.cs プロジェクト: gridl/Biml
    /* when dealing with project parameters in Biml Express you have to take extra steps. See:
     * https://www.cathrinewilhelmsen.net/2015/11/25/create-ssis-project-parameters-biml-bids-helper/
     * This function will write the parameters to your current Project.params file
     */
    public void AddProjectParameters(AstRootNode RootNode)
    {
        Varigence.Flow.FlowFramework.Validation.ValidationReporter ValidationReporter = new Varigence.Flow.FlowFramework.Validation.ValidationReporter();

        var project = RootNode.PackageProjects.FirstOrDefault();

        if (project == null)
        {
            ValidationReporter.Report(Severity.Error, "<PackageProject> does not exist");
        }
        else
        {
            var projectPath = project.GetTag("ProjectParametersPath");
            if (projectPath == "")
            {
                ValidationReporter.Report(project, Severity.Error, "Annotation ProjectParametersPath does not exist", @"Add <Annotation Tag=""ProjectParametersPath"">C:\SSIS\TestProject\Project.params</Annotation> to <PackageProject>");
            }
            else
            {
                try
                {
                    var fileAttributes = File.GetAttributes(projectPath);
                    if ((fileAttributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
                    {
                        File.SetAttributes(projectPath, (fileAttributes & ~FileAttributes.ReadOnly));
                    }

                    StringBuilder parameters = new StringBuilder();
                    parameters.AppendLine("<?xml version=\"1.0\"?>");
                    parameters.AppendLine("<SSIS:Parameters xmlns:SSIS=\"www.microsoft.com/SqlServer/SSIS\">");
                    foreach (var parameter in project.Parameters)
                    {
                        parameters.AppendFormat("<SSIS:Parameter SSIS:Name=\"{0}\">", parameter.Name).AppendLine();
                        parameters.AppendLine("<SSIS:Properties>");
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"ID\">{{{0}}}</SSIS:Property>", (parameter.Id == Guid.Empty ? Guid.NewGuid() : parameter.Id)).AppendLine();
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"DataType\">{0}</SSIS:Property>", Convert.ToByte(parameter.DataType)).AppendLine();
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"Value\">{0}</SSIS:Property>", parameter.Value).AppendLine();
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"Sensitive\">{0}</SSIS:Property>", Convert.ToByte(parameter.IsSensitive)).AppendLine();
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"Required\">{0}</SSIS:Property>", Convert.ToByte(parameter.IsRequired)).AppendLine();
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"IncludeInDebugDump\">{0}</SSIS:Property>", Convert.ToByte(parameter.IncludeInDebugDump)).AppendLine();
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"Description\">{0}</SSIS:Property>", parameter.GetTag("Description")).AppendLine();
                        parameters.AppendFormat("<SSIS:Property SSIS:Name=\"CreationName\">{0}</SSIS:Property>", parameter.GetTag("CreationName")).AppendLine();
                        parameters.AppendLine("</SSIS:Properties>");
                        parameters.AppendLine("</SSIS:Parameter>");
                    }
                    parameters.AppendLine("</SSIS:Parameters>");

                    File.WriteAllText(projectPath, parameters.ToString());
                }
                catch (Exception e)
                {
                    ValidationReporter.Report(project, Severity.Error, "Error writing Project Parameters to Project.params", String.Format("Make sure the path \"{0}\" is correct and that this project uses the Project Deployment Model", projectPath));
                }
            }
        }
    }
コード例 #4
0
ファイル: PrincipalsLowerer.cs プロジェクト: mosamy/vulcan
        public static void ProcessPrincipals(AstRootNode astRootNode)
        {
            if (astRootNode.Principals.Count > 0)
            {
                var package = new AstPackageNode(astRootNode)
                {
                    Name = "PrincipalsInitializer", Emit = true, PackageType = "Principal"
                };
                astRootNode.Packages.Add(package);

                foreach (AstPrincipalNode principal in astRootNode.Principals)
                {
                    TemplatePlatformEmitter principalTemplate;
                    switch (principal.PrincipalType)
                    {
                    case PrincipalType.ApplicationRole:
                        principalTemplate = new TemplatePlatformEmitter("CreatePrincipalApplicationRole", principal.Name);
                        break;

                    case PrincipalType.DBRole:
                        principalTemplate = new TemplatePlatformEmitter("CreatePrincipalDatabaseRole", principal.Name);
                        break;

                    case PrincipalType.SqlUser:
                        principalTemplate = new TemplatePlatformEmitter("CreatePrincipalSqlUser", principal.Name);
                        break;

                    case PrincipalType.WindowsGroup:
                        principalTemplate = new TemplatePlatformEmitter("CreatePrincipalWindowsUser", principal.Name);
                        break;

                    case PrincipalType.WindowsUser:
                        principalTemplate = new TemplatePlatformEmitter("CreatePrincipalWindowsUser", principal.Name);
                        break;

                    default:
                        MessageEngine.Trace(principal, Severity.Error, "V0139", "Unknown Principal Type {0} in principal {1}", principal.PrincipalType.ToString(), principal.Name);
                        return;
                    }

                    var executeSqlTask = new AstExecuteSqlTaskNode(package)
                    {
                        Name       = Utility.NameCleanerAndUniqifier(String.Format(CultureInfo.InvariantCulture, "PrincipalConfig_{0}", principal.Name)),
                        Connection = principal.Connection
                    };
                    executeSqlTask.Query = new AstExecuteSqlQueryNode(executeSqlTask)
                    {
                        Body      = principalTemplate.Emit(),
                        QueryType = QueryType.Standard
                    };
                    package.Tasks.Add(executeSqlTask);
                }
            }
        }
コード例 #5
0
ファイル: FSAFactory.cs プロジェクト: mpvyard/ORegex
        public FiniteAutomaton <TValue> Create(AstRootNode root, ORegexOptions options)
        {
            var nfa = CreateRawFsa(root, options);

            if (options.HasFlag(ORegexOptions.ReversePattern))
            {
                nfa = _fsaOperator.ReverseFsa(nfa);
            }
            var dfa = _fsaOperator.MinimizeFsa(nfa);

            return(new FiniteAutomaton <TValue>(new CFSA <TValue>(dfa), new CFSA <TValue>(nfa)));
        }
コード例 #6
0
ファイル: SchemaLowerer.cs プロジェクト: mosamy/vulcan
        public static void ProcessSchema(AstRootNode astRootNode, AstSchemaNode schemaNode)
        {
            const string PackageTypeName = "Schema";

            var packageNode = new AstPackageNode(schemaNode.ParentItem);

            packageNode.Name        = schemaNode.Name;
            packageNode.PackageType = PackageTypeName;

            var executeSqlNode = new AstExecuteSqlTaskNode(packageNode)
            {
                Name = schemaNode.Name, Connection = schemaNode.Connection, ResultSet = ExecuteSqlResultSet.None
            };

            executeSqlNode.Query = new AstExecuteSqlQueryNode(executeSqlNode)
            {
                QueryType = QueryType.Standard, Body = new TemplatePlatformEmitter("CreateSchema", schemaNode.Name).Emit()
            };

            packageNode.Tasks.Add(executeSqlNode);

            bool hasPermissions    = false;
            var  permissionBuilder = new StringBuilder();

            foreach (var permission in schemaNode.Permissions)
            {
                hasPermissions = true;
                permissionBuilder.AppendLine(PermissionsLowerer.ProcessPermission(schemaNode, permission));
            }

            if (hasPermissions)
            {
                var permissionsExecuteSqlTask = new AstExecuteSqlTaskNode(packageNode)
                {
                    Name       = "__SetPermissions",
                    Connection = schemaNode.Connection,
                };
                permissionsExecuteSqlTask.Query = new AstExecuteSqlQueryNode(permissionsExecuteSqlTask)
                {
                    Body      = permissionBuilder.ToString(),
                    QueryType = QueryType.Standard
                };
                packageNode.Tasks.Add(permissionsExecuteSqlTask);
            }

            if (schemaNode.CustomExtensions != null)
            {
                packageNode.Tasks.Add(schemaNode.CustomExtensions);
            }

            astRootNode.Packages.Add(packageNode);
        }
コード例 #7
0
ファイル: AstLowererPhase.cs プロジェクト: mosamy/vulcan
        private static void ProcessTables(AstRootNode astRootNode)
        {
            var tables = new List <AstTableBaseNode>(astRootNode.Tables);

            foreach (var dimension in astRootNode.Dimensions)
            {
                tables.Add(dimension);
            }

            foreach (var fact in astRootNode.Facts)
            {
                tables.Add(fact);
            }

            foreach (AstTableNode table in tables)
            {
                if (table.LateArriving)
                {
                    LateArrivingLowerer.ProcessLateArrivingTable(table);
                }

                if (table.HasScdColumns)
                {
                    SlowlyChangingDimensionsLowerer.ProcessTableScdColumns(table);
                }

                foreach (var staticSourcePackage in StaticSourcesLowerer.ProcessTableStaticSource(table))
                {
                    astRootNode.Packages.Add(staticSourcePackage);
                }

                if (!(table is AstTableCloneNode) && table.EmitVersionNumber)
                {
                    var versionNumber = new AstTableColumnNode(table)
                    {
                        Name            = "VersionNumber",
                        ColumnType      = ColumnType.Binary,
                        Length          = 8,
                        CustomType      = "rowversion",
                        IsAssignable    = false,
                        IsNullable      = false,
                        IsAutoGenerated = true
                    };
                    table.Columns.Add(versionNumber);
                }

                if (table.Emit)
                {
                    astRootNode.Packages.Add(TableLowerer.ProcessTable(table));
                }
            }
        }
コード例 #8
0
ファイル: SchemaLowerer.cs プロジェクト: mosamy/vulcan
        public static void ProcessSchemas(AstRootNode astRootNode)
        {
            var snapshotSymbolTable = new List <IReferenceableItem>(astRootNode.SymbolTable);

            foreach (var astNamedNode in snapshotSymbolTable)
            {
                var schemaNode = astNamedNode as AstSchemaNode;
                if (schemaNode != null && astNamedNode.FirstThisOrParent <ITemplate>() == null)
                {
                    ProcessSchema(astRootNode, schemaNode);
                }
            }
        }
コード例 #9
0
ファイル: FSAFactory.cs プロジェクト: mpvyard/ORegex
        public FSA <TValue> CreateRawFsa(AstRootNode root, ORegexOptions options)
        {
            var result = new FSA <TValue>(root.CaptureGroupNames[0])
            {
                CaptureNames = root.CaptureGroupNames
            };
            var start = result.NewState();
            var end   = result.NewState();

            Evaluate(start, end, result, root, options);
            result.AddFinal(end);
            result.AddStart(start);
            return(result);
        }
コード例 #10
0
ファイル: AstIR.cs プロジェクト: mosamy/vulcan
 public AstIR(AstIR astIR) : base(astIR)
 {
     this._astRootNode = astIR._astRootNode;
 }
コード例 #11
0
ファイル: FSAFactory.cs プロジェクト: mpvyard/ORegex
 private void EvaluateRoot(int start, int end, FSA <TValue> fsa, AstRootNode astRootNode, ORegexOptions options)
 {
     fsa.ExactBegin = astRootNode.MatchBegin;
     fsa.ExactEnd   = astRootNode.MatchEnd;
     Evaluate(start, end, fsa, astRootNode.Regex, options);
 }