1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 16:18:12 +00:00

sql+SQLStudio: Recover from errors preparing SQL statements

In both applications, display the SQL statement that failed to parse.
For the REPL, ensure the REPL prompts the user for another statement.
For SQLStudio, we don't continue executing the script as it likely does
not make sense to run statements that come after a failed statement.
This commit is contained in:
Timothy Flynn 2022-12-28 10:57:30 -05:00 committed by Andreas Kling
parent c08956028a
commit 82363aa1c4
4 changed files with 19 additions and 6 deletions

View file

@ -440,7 +440,7 @@ void MainWidget::drop_event(GUI::DropEvent& drop_event)
}
}
DeprecatedString MainWidget::read_next_sql_statement_of_editor()
void MainWidget::read_next_sql_statement_of_editor()
{
StringBuilder piece;
do {
@ -450,7 +450,7 @@ DeprecatedString MainWidget::read_next_sql_statement_of_editor()
auto line_maybe = read_next_line_of_editor();
if (!line_maybe.has_value())
return {};
return;
auto& line = line_maybe.value();
auto lexer = SQL::AST::Lexer(line);
@ -490,10 +490,16 @@ DeprecatedString MainWidget::read_next_sql_statement_of_editor()
m_editor_line_level = last_token_ended_statement ? 0 : (m_editor_line_level > 0 ? m_editor_line_level : 1);
} while ((m_editor_line_level > 0) || piece.is_empty());
if (auto statement_id = m_sql_client->prepare_statement(m_connection_id, piece.to_deprecated_string()); statement_id.has_value())
m_sql_client->async_execute_statement(*statement_id, {});
auto sql_statement = piece.to_deprecated_string();
return piece.to_deprecated_string();
if (auto statement_id = m_sql_client->prepare_statement(m_connection_id, sql_statement); statement_id.has_value()) {
m_sql_client->async_execute_statement(*statement_id, {});
} else {
auto* editor = dynamic_cast<ScriptEditor*>(m_tab_widget->active_widget());
VERIFY(editor);
GUI::MessageBox::show_error(window(), DeprecatedString::formatted("Could not parse {}\n{}", editor->path(), sql_statement));
}
}
Optional<DeprecatedString> MainWidget::read_next_line_of_editor()