Exemple #1
0
        private static int Main(string[] args)
        {
            _cliArgs = new CliArgs();
            if (!CommandLineParser.ParseArguments(args, _cliArgs))
            {
                string usage = CommandLineParser.ArgumentsUsage(typeof(CliArgs));
                Console.WriteLine(usage);
                return(5);
            }

            IStatementReader statementInput = new ConsoleInput(_cliArgs.Hostname);

            if (null != _cliArgs.File)
            {
                statementInput = new FileInput(_cliArgs.File);
            }

            CommandContext.DebugLog = _cliArgs.DebugLog;

            try
            {
                var statementReader = new StatementSplitter(statementInput);
                Run(statementReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error {0}", ex);
                return(5);
            }

            return(0);
        }
Exemple #2
0
        public virtual bool create_database_if_it_doesnt_exist(string custom_create_database_script)
        {
            bool database_was_created = false;

            try
            {
                string create_script = create_database_script();
                if (!string.IsNullOrEmpty(custom_create_database_script))
                {
                    create_script = custom_create_database_script;
                    if (!configuration.DisableTokenReplacement)
                    {
                        create_script = TokenReplacer.replace_tokens(configuration, create_script);
                    }
                }

                if (split_batch_statements)
                {
                    foreach (var sql_statement in StatementSplitter.split_sql_on_regex_and_remove_empty_statements(create_script, sql_statement_separator_regex_pattern))
                    {
                        //should only receive a return value once
                        var return_value = run_sql_scalar_boolean(sql_statement, ConnectionType.Admin);
                        if (return_value != null)
                        {
                            database_was_created = return_value.Value;
                        }
                    }
                }
                else
                {
                    //should only receive a return value once
                    var return_value = run_sql_scalar_boolean(create_script, ConnectionType.Admin);
                    database_was_created = return_value.GetValueOrDefault(false);
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("42P04") && ex.Message.Contains(" already exists"))
                {
                    Log.bound_to(this).log_an_info_event_containing("{0} with provider {1} does not provide a facility for creating a database at this time.{2}{3}. This is known bug, but not impairing functionality, except scripts don't have knowledge whatever database was created or already existed",
                                                                    GetType(), provider, Environment.NewLine, ex.Message);
                }
                else
                {
                    Log.bound_to(this).log_a_warning_event_containing(
                        "{0} with provider {1} does not provide a facility for creating a database at this time.{2}{3}",
                        GetType(), provider, Environment.NewLine, ex.Message);
                }
            }

            return(database_was_created);
        }
        public virtual bool create_database_if_it_doesnt_exist(string custom_create_database_script)
        {
            bool database_was_created = false;

            try
            {
                string create_script = create_database_script();
                if (!string.IsNullOrEmpty(custom_create_database_script))
                {
                    create_script = custom_create_database_script;
                    if (!configuration.DisableTokenReplacement)
                    {
                        create_script = TokenReplacer.replace_tokens(configuration, create_script);
                    }
                }

                if (split_batch_statements)
                {
                    foreach (var sql_statement in StatementSplitter.split_sql_on_regex_and_remove_empty_statements(create_script, sql_statement_separator_regex_pattern))
                    {
                        var return_value = run_sql_scalar(sql_statement, ConnectionType.Admin);
                        //should only receive a return value once
                        if (return_value != null)
                        {
                            database_was_created = (bool)return_value;
                        }
                    }
                }
                else
                {
                    var return_value = run_sql_scalar(create_script, ConnectionType.Admin);
                    //should only receive a return value once
                    if (return_value != null)
                    {
                        database_was_created = (bool)return_value;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.bound_to(this).log_a_warning_event_containing(
                    "{0} with provider {1} does not provide a facility for creating a database at this time.{2}{3}",
                    GetType(), provider, Environment.NewLine, ex.Message);
            }

            return(database_was_created);
        }
Exemple #4
0
        public override void Execute()
        {
            IStatementReader statementReader = new FileInput(File);

            statementReader = new StatementSplitter(statementReader);
            foreach (string statement in statementReader.Read())
            {
                new Exec {
                    Statement = statement
                }.Execute();

                if (CommandContext.Exit || CommandContext.LastCommandFailed)
                {
                    return;
                }
            }
        }
Exemple #5
0
        public IEnumerable <string> get_statements_to_run(string sql_to_run)
        {
            IList <string> sql_statements = new List <string>();

            if (database.split_batch_statements)
            {
                foreach (var sql_statement in StatementSplitter.split_sql_on_regex_and_remove_empty_statements(sql_to_run, database.sql_statement_separator_regex_pattern))
                {
                    sql_statements.Add(sql_statement);
                }
            }
            else
            {
                sql_statements.Add(sql_to_run);
            }

            return(sql_statements);
        }
Exemple #6
0
        public virtual bool create_database_if_it_doesnt_exist(string custom_create_database_script)
        {
            bool database_was_created = false;

            try
            {
                var create_script = generate_create_database_script(custom_create_database_script);

                if (split_batch_statements)
                {
                    foreach (var sql_statement in StatementSplitter.split_sql_on_regex_and_remove_empty_statements(create_script, sql_statement_separator_regex_pattern))
                    {
                        //should only receive a return value once
                        var return_value = run_sql_scalar_boolean(sql_statement, ConnectionType.Admin);
                        if (return_value != null)
                        {
                            database_was_created = return_value.Value;
                        }
                    }
                }
                else
                {
                    //should only receive a return value once
                    var return_value = run_sql_scalar_boolean(create_script, ConnectionType.Admin);
                    database_was_created = return_value.GetValueOrDefault(false);
                }
            }
            catch (Exception ex)
            {
                Log.bound_to(this).log_a_warning_event_containing(
                    "{0} with provider {1} does not provide a facility for creating a database at this time.{2}{3}",
                    GetType(), provider, Environment.NewLine, ex.Message);
            }

            return(database_was_created);
        }
            public void should_replace_on_semicolon_on_its_own_line()
            {
                const string sql_to_match      = @"SQL1 
;
SQL2";
                string       expected_scrubbed = @"SQL1 
" + batch_terminator_replacement_string + @"
SQL2";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_replace_on_full_statement_without_issue()
            {
                string sql_to_match = SplitterContext.FullSplitter.plsql_statement;

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(SplitterContext.FullSplitter.plsql_statement_scrubbed, sql_statement_scrubbed);
            }
            public void should_not_replace_on_go_inside_of_comments_with_symbols_after_on_different_lines()
            {
                string sql_to_match =
                    @"/* 
GO

" + symbols_to_check + @" 
*/";
                string expected_scrubbed =
                    @"/* 
GO

" + symbols_to_check + @" 
*/";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_not_replace_on_go_with_double_dash_comment_starting_line_with_words_and_symbols_before_go()
            {
                string sql_to_match      = @"--" + symbols_to_check + words_to_check + @" GO
";
                string expected_scrubbed = @"--" + symbols_to_check + words_to_check + @" GO
";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_replace_on_go_with_tab()
            {
                string sql_to_match      = @" GO" + string.Format("\t");
                string expected_scrubbed = @" " + batch_terminator_replacement_string + string.Format("\t");

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_replace_on_go_with_comment_after()
            {
                string sql_to_match      = " GO -- comment";
                string expected_scrubbed = " " + batch_terminator_replacement_string + " -- comment";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_replace_on_go_after_double_dash_comment_with_single_quote_and_single_quote_after_go()
            {
                string sql_to_match      = words_to_check + @" -- '
GO
select ''
go";
                string expected_scrubbed = words_to_check + @" -- '
" + batch_terminator_replacement_string + @"
select ''
" + batch_terminator_replacement_string;

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_replace_on_go_with_words_before_and_after_on_the_same_line_including_symbols()
            {
                string sql_to_match      = words_to_check + symbols_to_check.Replace("'", "").Replace("\"", "") + " GO BOB" + symbols_to_check;
                string expected_scrubbed = words_to_check + symbols_to_check.Replace("'", "").Replace("\"", "") + " " + batch_terminator_replacement_string + " BOB" + symbols_to_check;

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_replace_on_go_with_words_after_on_the_same_line()
            {
                string sql_to_match      = @" GO " + words_to_check;
                string expected_scrubbed = @" " + batch_terminator_replacement_string + @" " + words_to_check;

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_not_replace_on_semicolon_at_end_of_line()
            {
                string sql_to_match      = @"SQL1;";
                string expected_scrubbed = @"SQL1;";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_not_replace_on_assigning_values_to_variables()
            {
                string sql_to_match      = @"tmpSql := 'DROP SEQUENCE mutatieStockID';
EXECUTE IMMEDIATE tmpSql; ";
                string expected_scrubbed = @"tmpSql := 'DROP SEQUENCE mutatieStockID';
EXECUTE IMMEDIATE tmpSql; ";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_not_replace_on_go_when_go_is_the_last_part_of_the_last_word_on_a_line()
            {
                string sql_to_match      = words_to_check + @"GO
";
                string expected_scrubbed = words_to_check + @"GO
";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_replace_on_go_with_on_new_line_after_double_dash_comments()
            {
                const string sql_to_match =
                    @"--
GO
";
                string expected_scrubbed =
                    @"--
" + batch_terminator_replacement_string + @"
";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_not_replace_on_go_when_between_tick_marks()
            {
                const string sql_to_match      = @"' GO
            '";
                const string expected_scrubbed = @"' GO
            '";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
            public void should_not_replace_on_go_when_between_tick_marks_with_symbols_and_words_after()
            {
                string sql_to_match      = @"' GO
            " + symbols_to_check.Replace("'", string.Empty) + words_to_check + @"'";
                string expected_scrubbed = @"' GO
            " + symbols_to_check.Replace("'", string.Empty) + words_to_check + @"'";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }
Exemple #22
0
            public void should_replace_on_go_starting_file()
            {
                const string sql_to_match      = @"GO
whatever";
                string       expected_scrubbed = batch_terminator_replacement_string + @"
whatever";

                Console.WriteLine(sql_to_match);
                string sql_statement_scrubbed = script_regex_replace.Replace(sql_to_match, match => StatementSplitter.evaluate_and_replace_batch_split_items(match, script_regex_replace));

                Assert.AreEqual(expected_scrubbed, sql_statement_scrubbed);
            }