public override void Visit(CreateDatabaseStatement node)
            {
                foreach (FileGroupDefinition fg in node.FileGroups)
                {
                    foreach (FileDeclaration fileDecl in fg.FileDeclarations)
                    {
                        // The Primary filegroup is where the database's MDF file will be present

                        if (fileDecl.IsPrimary)
                        {
                            NameFileDeclarationOption nameOption = fileDecl.Options.SingleOrDefault(
                                opt => opt.OptionKind == FileDeclarationOptionKind.Name) as NameFileDeclarationOption;
                            if (nameOption == null)
                            {
                                continue;
                            }

                            // Verify that the filename has the pattern "$(DatabaseName)", and overwrite
                            if (string.Compare(nameOption.LogicalFileName.Identifier.Value,
                                               DatabaseNameVariable,
                                               StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                FileNameFileDeclarationOption fileNameOption = fileDecl.Options.SingleOrDefault(
                                    opt => opt.OptionKind == FileDeclarationOptionKind.FileName) as FileNameFileDeclarationOption;
                                if (fileNameOption != null)
                                {
                                    fileNameOption.OSFileName = new StringLiteral {
                                        Value = _databaseFileName, IsNational = false
                                    };
                                }
                            }
                        }
                    }
                }

                foreach (FileDeclaration logFile in node.LogOn)
                {
                    NameFileDeclarationOption nameOption = logFile.Options.SingleOrDefault(
                        opt => opt.OptionKind == FileDeclarationOptionKind.Name) as NameFileDeclarationOption;
                    if (nameOption == null)
                    {
                        continue;
                    }

                    if (string.Compare(nameOption.LogicalFileName.Identifier.Value,
                                       DatabaseLogNameVariable,
                                       StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        FileNameFileDeclarationOption fileNameOption = logFile.Options.SingleOrDefault(
                            opt => opt.OptionKind == FileDeclarationOptionKind.FileName) as FileNameFileDeclarationOption;
                        if (fileNameOption != null)
                        {
                            fileNameOption.OSFileName = new StringLiteral {
                                Value = _logFileName, IsNational = false
                            };
                        }
                    }
                }
            }
Beispiel #2
0
 public override void Visit(NameFileDeclarationOption node) { this.action(node); }
 public override void ExplicitVisit(NameFileDeclarationOption fragment)
 {
     _fragments.Add(fragment);
 }