Пример #1
0
        /// <summary>
        /// Scripts the fragment to a string
        /// </summary>
        /// <param name="fragment"></param>
        /// <returns></returns>
        public static string GetScript(this TSqlFragment fragment)
        {
            var generator = new Sql140ScriptGenerator();

            generator.GenerateScript(fragment, out string sql);
            return(sql);
        }
Пример #2
0
        async void _build_syntax_btn_Click(object sender, RoutedEventArgs e)
        {
            var syntax_txt = _query_tb.Text;
            var bg_default = _analysis_tb.Background;

            _analysis_tb.Background = Brushes.Gold;

            var analysis_txt = await Task.Factory.StartNew(() => {
                var parser = new TSql140Parser(false);
                IList <ParseError> errors;
                var fragment = parser.Parse(new StringReader(syntax_txt), out errors);
                if (errors.Count > 0)
                {
                    return("ERROR:\n" + String.Join("\n", errors.Select(err => err.Message)));
                }

                fragment.Accept(new MyNaiveMutator());
                var renderer = new Sql140ScriptGenerator();
                string sql;
                renderer.GenerateScript(fragment, out sql);
                return(sql);
            });

            this.Dispatcher.Invoke(() => {
                _analysis_tb.Text       = analysis_txt;
                _analysis_tb.Background = bg_default;
            });
        }
Пример #3
0
        private static string GenerateScript(TSqlFragment fragment, Action <SqlScriptGenerator> configuration)
        {
            SqlScriptGenerator generator = new Sql140ScriptGenerator();

            configuration?.Invoke(generator);
            generator.GenerateScript(fragment, out string output);
            return(output);
        }
Пример #4
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);
        }
Пример #5
0
        private static void EnsureScriptDom()
        {
            string     check_definition = "([ismultiple]=(1))";
            string     sql_statement    = "SELECT colx = IIF((" + check_definition + "), 1, 0)";
            TSqlParser parser           = new TSql140Parser(true);

            using (var reader = new StringReader(sql_statement))
            {
                TSqlFragment fragment = parser.Parse(reader, out IList <ParseError> errors);
                if (errors.Any())
                {
                    throw new InvalidOperationException($@"Error parsing SQL statement
{String.Join(Environment.NewLine, errors.Select(x => $"{x.Message} at {x.Line},{x.Column}"))}");
                }

                //Console.WriteLine("SQL Fragment generated!");
                SqlScriptGenerator generator = new Sql140ScriptGenerator();
                generator.GenerateScript(fragment, out string output_sql);
                //Console.WriteLine(output_sql);
                //Console.WriteLine("SQL Parser prepared.");
            }
        }
Пример #6
0
        /// <summary>
        /// Scripts the fragment to a text writer
        /// </summary>
        /// <param name="fragment"></param>
        /// <param name="writer"></param>
        public static void GetScript(this TSqlFragment fragment, TextWriter writer)
        {
            var generator = new Sql140ScriptGenerator();

            generator.GenerateScript(fragment, writer);
        }