示例#1
0
        private void validateButton_Click(object sender, EventArgs e)
        {
            outputTextBox.Clear();

            _logger.Log(LogLevel.Information, "Parsing ... start");
            var parserOutput = _parser.ParseString(sqlTextBox.Text);

            _logger.Log(LogLevel.Information, "Parsing .. end");
            _logger.Log(string.Empty);

            var fileName = "local file"; // TODO : use the name of the file that you have loaded

            if (parserOutput.ParsingErrors != null && parserOutput.ParsingErrors.Count > 0)
            {
                _logger.LogParsingErrors(parserOutput, fileName);
            }
            else
            {
                // TODO : this should by configurable
                // NOTE : formatting removes comments we rely on to get database context !!!
                if (false)
                {
                    _logger.Log(LogLevel.Information, "Script formatting ... start");
                    var formattedSql = _formatter.FormatSql(parserOutput.TsqlScript, SqlVersion.Sql120);
                    parserOutput    = _parser.ParseString(formattedSql);
                    sqlTextBox.Text = formattedSql;
                    _logger.Log(LogLevel.Information, "Script formatting ... end");
                    _logger.Log(string.Empty);
                }

                // TODO : grabbing first context, for SSMS use the database dropdown
                var databaseContext = _contextProvider
                                      .Get(sqlTextBox.Text, parserOutput.TsqlScript)
                                      .First();

                var file = new SchemaFile()
                {
                    Context    = databaseContext,
                    Path       = fileName,
                    Schema     = _schema,
                    Settings   = null, // TODO : seems like I don't need settings here for now
                    TsqlScript = parserOutput.TsqlScript,
                };
                _localGenerator.AddLocalSchema(file);

                _logger.Log(LogLevel.Information, "Validate SQL ... start");
                _logger.Log(string.Empty);
                var validationResults = _validationEngine.ValidateFile(file);
                _logger.Log(string.Empty);
                _logger.Log(LogLevel.Information, validationResults.Any(vr => vr.Value.Any())
                    ? "SQL is not valid"
                    : "SQL is valid"
                            );
                _logger.Log(string.Empty);
                _logger.LogValidationErrors(validationResults, file);
                _logger.Log(LogLevel.Information, "Validate SQL .. end");
            }
        }
示例#2
0
        private IList <SchemaFile> CreateFiles(string fileName, string fileContent, ParserOutput parserOutput, DatabaseSchemaSettings settings)
        {
            var contexts = _contextProvider.Get(fileContent, parserOutput.TsqlScript);
            var files    = contexts
                           .Select(context => new SchemaFile()
            {
                Context    = context,
                Schema     = _databaseSchema,
                Settings   = settings,
                Path       = fileName,
                TsqlScript = parserOutput.TsqlScript,
            })
                           .ToList();

            return(files);
        }