mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-07 00:19:27 +00:00
LibSQL+SQLServer: Send result column names over IPC to SQL clients
This commit is contained in:
parent
d6dee8c0e8
commit
cb06031180
|
@ -154,7 +154,7 @@ ErrorOr<NonnullRefPtr<SQLClient>> SQLClient::launch_server_and_create_client(Vec
|
|||
|
||||
#endif
|
||||
|
||||
void SQLClient::execution_success(u64 statement_id, u64 execution_id, bool has_results, size_t created, size_t updated, size_t deleted)
|
||||
void SQLClient::execution_success(u64 statement_id, u64 execution_id, Vector<DeprecatedString> const& column_names, bool has_results, size_t created, size_t updated, size_t deleted)
|
||||
{
|
||||
if (!on_execution_success) {
|
||||
outln("{} row(s) created, {} updated, {} deleted", created, updated, deleted);
|
||||
|
@ -164,6 +164,7 @@ void SQLClient::execution_success(u64 statement_id, u64 execution_id, bool has_r
|
|||
ExecutionSuccess success {
|
||||
.statement_id = statement_id,
|
||||
.execution_id = execution_id,
|
||||
.column_names = move(const_cast<Vector<DeprecatedString>&>(column_names)),
|
||||
.has_results = has_results,
|
||||
.rows_created = created,
|
||||
.rows_updated = updated,
|
||||
|
|
|
@ -19,6 +19,7 @@ struct ExecutionSuccess {
|
|||
u64 statement_id { 0 };
|
||||
u64 execution_id { 0 };
|
||||
|
||||
Vector<DeprecatedString> column_names;
|
||||
bool has_results { false };
|
||||
size_t rows_created { 0 };
|
||||
size_t rows_updated { 0 };
|
||||
|
@ -70,7 +71,7 @@ private:
|
|||
{
|
||||
}
|
||||
|
||||
virtual void execution_success(u64 statement_id, u64 execution_id, bool has_results, size_t created, size_t updated, size_t deleted) override;
|
||||
virtual void execution_success(u64 statement_id, u64 execution_id, Vector<DeprecatedString> const& column_names, bool has_results, size_t created, size_t updated, size_t deleted) override;
|
||||
virtual void execution_error(u64 statement_id, u64 execution_id, SQLErrorCode const& code, DeprecatedString const& message) override;
|
||||
virtual void next_result(u64 statement_id, u64 execution_id, Vector<SQL::Value> const&) override;
|
||||
virtual void results_exhausted(u64 statement_id, u64 execution_id, size_t total_rows) override;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
endpoint SQLClient
|
||||
{
|
||||
execution_success(u64 statement_id, u64 execution_id, bool has_results, size_t created, size_t updated, size_t deleted) =|
|
||||
execution_success(u64 statement_id, u64 execution_id, Vector<DeprecatedString> column_names, bool has_results, size_t created, size_t updated, size_t deleted) =|
|
||||
next_result(u64 statement_id, u64 execution_id, Vector<SQL::Value> row) =|
|
||||
results_exhausted(u64 statement_id, u64 execution_id, size_t total_rows) =|
|
||||
execution_error(u64 statement_id, u64 execution_id, SQL::SQLErrorCode code, DeprecatedString message) =|
|
||||
|
|
|
@ -89,19 +89,19 @@ Optional<SQL::ExecutionID> SQLStatement::execute(Vector<SQL::Value> placeholder_
|
|||
auto result = execution_result.release_value();
|
||||
|
||||
if (should_send_result_rows(result)) {
|
||||
client_connection->async_execution_success(statement_id(), execution_id, true, 0, 0, 0);
|
||||
client_connection->async_execution_success(statement_id(), execution_id, result.column_names(), true, 0, 0, 0);
|
||||
|
||||
auto result_size = result.size();
|
||||
next(execution_id, move(result), result_size);
|
||||
} else {
|
||||
if (result.command() == SQL::SQLCommand::Insert)
|
||||
client_connection->async_execution_success(statement_id(), execution_id, false, result.size(), 0, 0);
|
||||
client_connection->async_execution_success(statement_id(), execution_id, result.column_names(), false, result.size(), 0, 0);
|
||||
else if (result.command() == SQL::SQLCommand::Update)
|
||||
client_connection->async_execution_success(statement_id(), execution_id, false, 0, result.size(), 0);
|
||||
client_connection->async_execution_success(statement_id(), execution_id, result.column_names(), false, 0, result.size(), 0);
|
||||
else if (result.command() == SQL::SQLCommand::Delete)
|
||||
client_connection->async_execution_success(statement_id(), execution_id, false, 0, 0, result.size());
|
||||
client_connection->async_execution_success(statement_id(), execution_id, result.column_names(), false, 0, 0, result.size());
|
||||
else
|
||||
client_connection->async_execution_success(statement_id(), execution_id, false, 0, 0, 0);
|
||||
client_connection->async_execution_success(statement_id(), execution_id, result.column_names(), false, 0, 0, 0);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue