SQLStudio: Show script execution results in table

Show the results of executing a script in the TableView (if there are
results to show).
This commit is contained in:
martinfalisse 2022-06-05 17:59:54 +02:00 committed by Linus Groh
parent 061525282f
commit e9541bca31
Notes: sideshowbarker 2024-07-17 09:49:49 +09:00
2 changed files with 24 additions and 0 deletions

View File

@ -10,8 +10,10 @@
#include <LibGUI/BoxLayout.h>
#include <LibGUI/FilePicker.h>
#include <LibGUI/GroupBox.h>
#include <LibGUI/JsonArrayModel.h>
#include <LibGUI/Menu.h>
#include <LibGUI/MessageBox.h>
#include <LibGUI/SortingProxyModel.h>
#include <LibGUI/Statusbar.h>
#include <LibGUI/TabWidget.h>
#include <LibGUI/TableView.h>
@ -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<String> 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<GUI::JsonArrayModel::FieldSpec> 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<JsonValue> 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)

View File

@ -57,6 +57,7 @@ private:
RefPtr<GUI::TableView> m_query_results_table_view;
RefPtr<SQL::SQLClient> m_sql_client;
Vector<Vector<String>> m_results;
String read_next_sql_statement_of_editor();
Optional<String> read_next_line_of_editor();