private void CallWrapper()
        {
            var dte     = (DTE)GetService(typeof(DTE));
            var project = dte.ActiveDocument.ProjectItem.ContainingProject;

            //project.GetType().GetProperty("Globals").GetValue(project).GetType().GetProperty("Parent").GetValue(project.GetType().GetProperty("Globals").GetValue(project)).GetType().GetProperty("DatabaseSchemaProvider").GetValue(project.GetType().GetProperty("Globals").GetValue(project).GetType().GetProperty("Parent").GetValue(project.GetType().GetProperty("Globals").GetValue(project))).GetType().GetProperty("Platform").GetValue(project.GetType().GetProperty("Globals").GetValue(project).GetType().GetProperty("Parent").GetValue(project.GetType().GetProperty("Globals").GetValue(project)).GetType().GetProperty("DatabaseSchemaProvider").GetValue(project.GetType().GetProperty("Globals").GetValue(project).GetType().GetProperty("Parent").GetValue(project.GetType().GetProperty("Globals").GetValue(project))))
            var projectType     = project.GetType();
            var globalsProperty = projectType.GetProperty("Globals");

            if (globalsProperty == null)
            {
                return;
            }

            var globals     = globalsProperty.GetValue(project);
            var globalsType = globals.GetType();

            var parentProperty = globalsType.GetProperty("Parent");

            if (parentProperty == null)
            {
                return;
            }

            var parent = parentProperty.GetValue(globals);

            var schemaProviderProperty = parent.GetType().GetProperty("DatabaseSchemaProvider");

            if (schemaProviderProperty == null)
            {
                return;
            }

            var databaseSchemaProvider = schemaProviderProperty.GetValue(parent);

            var platformProperty = databaseSchemaProvider.GetType().GetProperty("Platform");

            if (platformProperty == null)
            {
                return;
            }

            var version = platformProperty.GetValue(databaseSchemaProvider);


            VersionDetector.SetVersion(version as string);
        }
示例#2
0
 public DatabaseUpdater(bool jcs, bool exploitdb, bool exploitalert, bool packetstorm, int threads, int timeout, System.Windows.Forms.RichTextBox rtx)
 {
     Jcs              = jcs;
     Exploitdb        = exploitdb;
     Exploitalert     = exploitalert;
     Packetstorm      = packetstorm;
     Threads          = threads;
     Timeout          = timeout;
     TempPath         = Path.GetTempPath();
     ErrorCode        = 0x0; // unkown error
     Rtx              = rtx;
     ComponentsList   = new List <string>();
     ExploitalertList = new List <string>();
     ExploitdbList    = new List <string>();
     PacketstormList  = new List <string>();
     versionDetector  = new VersionDetector();
 }
示例#3
0
        private async void Form_Load(object sender, EventArgs e)
        {
            PopulateDropbox();

            comboVersions.SelectedIndex = 0;

            EnableControls(false);

            var versionDetector = new VersionDetector(_profile, this);
            var kernelHash      = await versionDetector.Identify(_kernelPath);

            if (kernelHash != null)
            {
                comboVersions.SelectedValue = kernelHash.Version;
                versionLabel.Text           = versionLabel.Text.Replace(":", " (automatically detected):");
            }

            EnableControls(true);
        }
示例#4
0
        private List <CreateTableStatement> GetCreateTableStatements()
        {
            using (var script = new StringReader(_script))
            {
                var parser = VersionDetector.ParserFactory(false);

                IList <ParseError> errors;

                var fragment = parser.Parse(script, out errors);

                if (fragment != null)
                {
                    var visitor = new CreateTableVisitor();
                    fragment.Accept(visitor);
                    return(visitor.Creates);
                }
            }

            return(null);
        }
示例#5
0
        public void Parse()
        {
            using (var reader = GetScriptReader())
            {
                var parser = VersionDetector.ParserFactory(false);

                IList <ParseError> errors;
                var sqlFragment = parser.Parse(reader, out errors);

                if (errors.Count > 0)
                {
                    foreach (var error in errors)
                    {
                        Log.WriteInfo(_path, error.Line, "Script Parser: Error in {0} error: {1}", _path, error.Message);
                    }
                }

                sqlFragment.Accept(_visitor);
            }
        }
示例#6
0
        private string GetComments(string oldScriptBlock)
        {
            var comments = new StringBuilder();
            var parser   = VersionDetector.ParserFactory(false);
            IList <ParseError> errors;
            var tokens = parser.GetTokenStream(new StringReader(oldScriptBlock), out errors);

            foreach (var token in tokens)
            {
                switch (token.TokenType)
                {
                case TSqlTokenType.MultilineComment:
                case TSqlTokenType.SingleLineComment:

                    comments.AppendLine(token.Text);
                    break;
                }
            }

            return(comments.ToString());
        }
示例#7
0
        public virtual string GetPlanForQuery(string query)
        {
            IList <ParseError> errors;
            var fragment = VersionDetector.ParserFactory(false).Parse(new StringReader(query), out errors);
            var visitor  = new ProcedureVisitor();

            fragment.Accept(visitor);

            foreach (var proc in visitor.Procedures)
            {
                var procName = proc.ProcedureReference.Name;
                return(GetPlanForProc(procName));
            }
            foreach (var func in visitor.Functions)
            {
                var procName = func.Name;
                return(GetPlanForFunc(procName, func.Parameters));
            }



            return("");
        }
示例#8
0
        private string ModifyScript(CreateTableStatement statement, string originalScript, string modifiedScript)
        {
            var oldScriptBlock = originalScript.Substring(statement.StartOffset, statement.FragmentLength);

            var comments = GetComments(oldScriptBlock);

            var generator = VersionDetector.ScriptGeneratorFactory(SavedSettings.Get().GeneratorOptions);

            string newScriptBlock;

            generator.GenerateScript(statement, out newScriptBlock);

            if (string.IsNullOrEmpty(comments))
            {
                modifiedScript = modifiedScript.Replace(oldScriptBlock, newScriptBlock);
            }
            else
            {
                modifiedScript = modifiedScript.Replace(oldScriptBlock, newScriptBlock + "\r\n--These comments were saved after refactoring this table...\r\n" + comments);
            }

            return(modifiedScript);
        }
示例#9
0
        public static string GetScript(this MergeStatement source)
        {
            var script    = "";
            var generator =
                VersionDetector.ScriptGeneratorFactory(new SqlScriptGeneratorOptions
            {
                IncludeSemicolons           = true,
                AlignClauseBodies           = true,
                AlignColumnDefinitionFields = true,
                AsKeywordOnOwnLine          = true,
                MultilineInsertSourcesList  = true,
                MultilineInsertTargetsList  = true,
                MultilineSelectElementsList = true,
                NewLineBeforeOpenParenthesisInMultilineList = true
            });

            generator.GenerateScript(source, out script);

            if (!script.EndsWith(";"))
            {
                script = script + ";";
            }
            return(script);
        }
示例#10
0
        protected IList <TSqlParserToken> GetTokens(TSqlFragment fragment)
        {
            var generator = VersionDetector.ScriptGeneratorFactory(SavedSettings.Get().GeneratorOptions);

            return(generator.GenerateTokens(fragment));
        }
示例#11
0
        public void CreateSchemas()
        {
            IList <ParseError> errors;
            var fragment = VersionDetector.ParserFactory(false).Parse(new StringReader(_scripts), out errors);

            if (fragment == null)
            {
                return;
            }

            var visitor = new ProcedureVisitor();

            fragment.Accept(visitor);

            foreach (var procedure in visitor.Procedures)
            {
                var browser = new SolutionBrowserForm(procedure.ProcedureReference.Name.BaseIdentifier.Value.Quote());
                browser.ShowDialog();

                var destination = browser.DestinationItem;
                if (destination == null)
                {
                    continue;
                }

                var parentProjectItem = destination;

                var name   = browser.GetObjectName();
                var script = GetScript(name);

                for (var i = 1; i <= parentProjectItem.ProjectItems.Count; i++)
                {
                    var item = parentProjectItem.ProjectItems.Item(i);
                    if (item.Name.UnQuote() == name.UnQuote())
                    {
                        CreateNewFile(item, name, script);
                        return;
                    }
                }

                var folder = parentProjectItem.ProjectItems.AddFolder(name.UnQuote());
                CreateNewFile(folder, name, script);
            }

            foreach (var procedure in visitor.Functions)
            {
                var browser = new SolutionBrowserForm(procedure
                                                      .Name.BaseIdentifier.Value.Quote());
                browser.ShowDialog();

                var destination = browser.DestinationItem;
                if (destination == null)
                {
                    continue;
                }

                var parentProjectItem = destination;

                var name   = browser.GetObjectName();
                var script = GetScript(name);

                for (var i = 1; i <= parentProjectItem.ProjectItems.Count; i++)
                {
                    var item = parentProjectItem.ProjectItems.Item(i);
                    if (item.Name.UnQuote() == name.UnQuote())
                    {
                        CreateNewFile(item, name, script);
                        return;
                    }
                }

                var folder = parentProjectItem.ProjectItems.AddFolder(name.UnQuote());
                CreateNewFile(folder, name, script);
            }
        }
示例#12
0
        public void Go()
        {
            IList <ParseError> errors;
            var fragment = VersionDetector.ParserFactory(false).Parse(new StringReader(_scripts), out errors);

            if (fragment == null)
            {
                return;
            }

            var visitor = new ProcedureVisitor();

            fragment.Accept(visitor);

            using (var procedureRepository = new ProcedureRepository(DacpacPath.Get(_sourceProject)))
                using (var functionRepository = new FunctionRepository(DacpacPath.Get(_sourceProject)))
                {
                    foreach (var procedure in visitor.Procedures)
                    {
                        var browser = new SolutionBrowserForm("test " + procedure.ProcedureReference.Name.BaseIdentifier.Value.UnQuote() + " does something");
                        browser.ShowDialog();

                        var destination = browser.DestinationItem;
                        if (destination == null)
                        {
                            continue;
                        }

                        if (String.IsNullOrEmpty(DacpacPath.Get(_sourceProject)) && !File.Exists(DacpacPath.Get(_sourceProject)))
                        {
                            MessageBox.Show("Cannot find dacpac for project");
                            return;
                        }

                        var parentProjectItem = destination;

                        var name = browser.GetObjectName();

                        var proc = procedureRepository.FirstOrDefault(p => p.Name.EqualsName(procedure.ProcedureReference.Name));
                        if (proc == null)
                        {
                            MessageBox.Show(string.Format("Cannot find stored procedure {0} in project compiled dacpac", procedure.ProcedureReference.Name));
                            return;
                        }

                        var testBuilder = new ProcedureBuilder(procedure.ProcedureReference.Name.BaseIdentifier.Value.UnQuote(), name, proc);
                        var script      = testBuilder.GetScript();

                        CreateNewFile(parentProjectItem, name, script);
                    }

                    foreach (var procedure in visitor.Functions)
                    {
                        var browser = new SolutionBrowserForm("test " + procedure.Name.BaseIdentifier.Value.UnQuote() + " does something");
                        browser.ShowDialog();

                        var destination = browser.DestinationItem;
                        if (destination == null)
                        {
                            continue;
                        }

                        if (String.IsNullOrEmpty(DacpacPath.Get(_sourceProject)) && !File.Exists(DacpacPath.Get(_sourceProject)))
                        {
                            MessageBox.Show("Cannot find dacpac for project");
                            return;
                        }

                        var parentProjectItem = destination;

                        var name = browser.GetObjectName();

                        var proc = functionRepository.FirstOrDefault(p => p.Name.EqualsName(procedure.Name));
                        if (proc == null)
                        {
                            MessageBox.Show(string.Format("Cannot find stored procedure {0} in project compiled dacpac", procedure.Name));
                            return;
                        }

                        var testBuilder = new ProcedureBuilder(procedure.Name.BaseIdentifier.Value.UnQuote(), name, proc);
                        var script      = testBuilder.GetScript();

                        CreateNewFile(parentProjectItem, name, script);
                    }
                }
        }