From e9541bca31739f262709651aae86ba576b4553ab Mon Sep 17 00:00:00 2001 From: martinfalisse Date: Sun, 5 Jun 2022 17:59:54 +0200 Subject: [PATCH] SQLStudio: Show script execution results in table Show the results of executing a script in the TableView (if there are results to show). --- Userland/DevTools/SQLStudio/MainWidget.cpp | 23 ++++++++++++++++++++++ Userland/DevTools/SQLStudio/MainWidget.h | 1 + 2 files changed, 24 insertions(+) diff --git a/Userland/DevTools/SQLStudio/MainWidget.cpp b/Userland/DevTools/SQLStudio/MainWidget.cpp index 9f113c33f0..21cc82fae4 100644 --- a/Userland/DevTools/SQLStudio/MainWidget.cpp +++ b/Userland/DevTools/SQLStudio/MainWidget.cpp @@ -10,8 +10,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -141,6 +143,7 @@ MainWidget::MainWidget() }); m_run_script_action = GUI::Action::create("Run script", { Mod_Alt, Key_F9 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { + m_results.clear(); m_current_line_for_parsing = 0; // TODO select the database to use in UI. m_connection_id = m_sql_client->connect("test"); @@ -205,6 +208,26 @@ MainWidget::MainWidget() m_sql_client->on_execution_success = [this](int, bool, int, int, int) { read_next_sql_statement_of_editor(); }; + m_sql_client->on_next_result = [this](int, Vector const& row) { + m_results.append(row); + }; + m_sql_client->on_results_exhausted = [this](int, int) { + if (m_results.size() == 0) + return; + if (m_results[0].size() == 0) + return; + Vector query_result_fields; + for (size_t i = 0; i < m_results[0].size(); i++) + query_result_fields.empend(String::formatted("column_{}", i + 1), String::formatted("Column {}", i + 1), Gfx::TextAlignment::CenterLeft); + auto query_results_model = GUI::JsonArrayModel::create("{}", move(query_result_fields)); + m_query_results_table_view->set_model(MUST(GUI::SortingProxyModel::create(*query_results_model))); + for (auto& result_row : m_results) { + Vector individual_result_as_json; + for (auto& result_row_column : result_row) + individual_result_as_json.append(result_row_column); + query_results_model->add(move(individual_result_as_json)); + } + }; } void MainWidget::initialize_menu(GUI::Window* window) diff --git a/Userland/DevTools/SQLStudio/MainWidget.h b/Userland/DevTools/SQLStudio/MainWidget.h index 4698a9c5c1..d5955eda3e 100644 --- a/Userland/DevTools/SQLStudio/MainWidget.h +++ b/Userland/DevTools/SQLStudio/MainWidget.h @@ -57,6 +57,7 @@ private: RefPtr m_query_results_table_view; RefPtr m_sql_client; + Vector> m_results; String read_next_sql_statement_of_editor(); Optional read_next_line_of_editor();