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); }
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); }
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; } } }
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); }
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); }
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); }