コード例 #1
0
        private void ReformatSqlClick(object sender, RoutedEventArgs e)
        {
            var sqlSrc = SourceBox.Text;

            if (string.IsNullOrWhiteSpace(sqlSrc))
            {
                return;
            }
            var processed = ParseSql(sqlSrc);

            if (processed.errors.Any())
            {
                var sb = new StringBuilder("Errors found:");
                foreach (var error in processed.errors)
                {
                    sb.AppendLine($"     Line: {error.Line}  Col: {error.Column}: {error.Message}");
                }
            }
            else
            {
                var scriptGenerator = new Sql150ScriptGenerator(_options);
                scriptGenerator.GenerateScript(processed.sqlTree, out string sqlDst);
                DestBox.Text = sqlDst;
            }
        }
コード例 #2
0
 public ScriptingService(IMetadataService metadata, IQueryExecutor executor)
 {
     Parser    = new TSql150Parser(false, SqlEngineType.Standalone);
     Generator = new Sql150ScriptGenerator(new SqlScriptGeneratorOptions()
     {
         AlignClauseBodies = true
     });
     ScriptExecutor  = executor;
     MetadataService = metadata;
 }
コード例 #3
0
        public string Generate(Model model)
        {
            var script = GetTablesScript(model.Entities, model.NamespaceName);

            var generator = new Sql150ScriptGenerator();

            generator.GenerateScript(script, out var result);

            return(result);
        }
コード例 #4
0
 public TSqlScriptWriter(TextWriter writer)
 {
     _writer    = new IndentedTextWriter(writer);
     _generator = new Sql150ScriptGenerator();
     _generator.Options.AlignClauseBodies  = true;
     _generator.Options.AsKeywordOnOwnLine = true;
     _generator.Options.KeywordCasing      = KeywordCasing.Lowercase;
     _generator.Options.IncludeSemicolons  = true;
     _generator.Options.IndentationSize    = 4;
     _generator.Options.SqlVersion         = SqlVersion.Sql150;
     _generator.Options.NewLineBeforeOpenParenthesisInMultilineList = true;
 }
コード例 #5
0
        private static SqlScriptGenerator GetGenerator(GenerationOptions options)
        {
            SqlScriptGenerator generator = null;

            switch (options.SqlVersion)
            {
            case SqlVersion.Sql80:
                generator = new Sql80ScriptGenerator();
                break;

            case SqlVersion.Sql100:
                generator = new Sql100ScriptGenerator();
                break;

            case SqlVersion.Sql110:
                generator = new Sql110ScriptGenerator();
                break;

            case SqlVersion.Sql120:
                generator = new Sql120ScriptGenerator();
                break;

            case SqlVersion.Sql130:
                generator = new Sql130ScriptGenerator();
                break;

            case SqlVersion.Sql140:
                generator = new Sql140ScriptGenerator();
                break;

            case SqlVersion.Sql150:
                generator = new Sql150ScriptGenerator();
                break;

            default:
                generator = new Sql90ScriptGenerator();
                break;
            }

            generator.Options.Apply(options);

            return(generator);
        }
コード例 #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            using (var rdr = new StringReader(textBox1.Text))
            {
                IList <ParseError> errors = null;
                var parser = new TSql150Parser(true, SqlEngineType.All);
                var tree   = parser.Parse(rdr, out errors);

                foreach (ParseError err in errors)
                {
                    Console.WriteLine(err.Message);
                }

                var    scrGen       = new Sql150ScriptGenerator();
                string formattedSQL = null;
                scrGen.GenerateScript(tree, out formattedSQL);

                textBox2.Text = formattedSQL;
            }
        }
コード例 #7
0
 public TSqlScriptGenerator(TextWriter writer, SqlScriptGeneratorOptions options)
 {
     _writer    = writer;
     _generator = new Sql150ScriptGenerator(options);
     _builder   = new TSqlScriptBuilder();
 }
コード例 #8
0
 public TSqlScriptWriter(TextWriter writer, Sql150ScriptGenerator generator)
 {
     _writer    = new IndentedTextWriter(writer);
     _generator = generator;
 }
コード例 #9
0
        public void SnakeCaseFile(string filePath)
        {
            Encoding encoding;
            string   f1 = null;

            //try to use same encoding as source file
            using (var reader = new StreamReader(filePath))
            {
                f1       = reader.ReadToEnd().ToLower();
                encoding = reader.CurrentEncoding;
            }

            string sqlFileText      = File.ReadAllText(filePath);
            var    sqlFileTextLines = File.ReadAllLines(filePath);
            //File.WriteAllText(file.FullName, text);

            var parser  = new TSql150Parser(false);
            var options = new SqlScriptGeneratorOptions();

            var scriptGen = new Sql150ScriptGenerator(options)
            {
            };
            IList <ParseError> errors;
            var script2 =
                parser.Parse(new StringReader(sqlFileText), out errors) as TSqlScript;

            if (errors.Count > 0)
            {
                RaiseSqlErrorsException(errors, sqlFileText, filePath);
                return;
            }

            //var sb = new StringBuilder(sqlFileText);


            foreach (var batch in script2.Batches.Reverse())
            {
                foreach (var statement in batch.Statements.Reverse())
                {
                    var snakeCaseVisitor = new SqlServerSnakeCaseVisitor2();
                    statement.Accept(snakeCaseVisitor);

                    var sortedReplacements = snakeCaseVisitor.Replacements.OrderByDescending(r => r.Offset);
                    foreach (var r in sortedReplacements)
                    {
                        if (filePath.EndsWith("Schedule_ProgramPattern.sql") && r.LineNumber == 1)
                        {
                            int x = 1;
                        }
                        var sb2 = new StringBuilder(sqlFileTextLines[r.LineNumber - 1]);
                        sb2 = sb2.Replace(r.OldValue, r.NewValue, r.Column - 1, r.OldValue.Length);
                        sqlFileTextLines[r.LineNumber - 1] = sb2.ToString();
                    }
                }
            }

            try
            {
                File.WriteAllLines(filePath, sqlFileTextLines, encoding);
            }
            catch (UnauthorizedAccessException e)
            {
                Console.WriteLine(e);
            }
        }