mirror of
https://github.com/boostorg/mysql.git
synced 2026-01-31 08:22:14 +00:00
Added prepared statement close
This commit is contained in:
@@ -30,6 +30,7 @@ void serialize(DynamicBuffer& buffer, const StmtExecute& value);
|
||||
ReadIterator deserialize(ReadIterator from, ReadIterator last, StmtExecuteResponseHeader& output);
|
||||
std::pair<FieldType, bool> compute_field_type(const BinaryValue&);
|
||||
void serialize(DynamicBuffer& buffer, const StmtFetch& value);
|
||||
void serialize(DynamicBuffer& buffer, const StmtClose& value);
|
||||
|
||||
// Text serialization
|
||||
std::ostream& operator<<(std::ostream& os, const Handshake& value);
|
||||
|
||||
@@ -253,6 +253,11 @@ struct StmtFetch
|
||||
int4 rows_to_fetch;
|
||||
};
|
||||
|
||||
struct StmtClose
|
||||
{
|
||||
int4 statement_id;
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,8 @@ public:
|
||||
|
||||
template <typename... Params>
|
||||
BinaryResultset execute_with_cursor(int4 fetch_count, Params&&... params);
|
||||
// close(Connection)
|
||||
|
||||
void close();
|
||||
// Destructor should try to auto-close
|
||||
|
||||
static PreparedStatement prepare(MysqlStream& stream, std::string_view query);
|
||||
|
||||
7
main.cpp
7
main.cpp
@@ -74,10 +74,11 @@ int main()
|
||||
stream, "SELECT * from users WHERE age < ? and first_name <> ?");
|
||||
auto res = stmt.execute_with_cursor(2, 200, string_lenenc{"hola"});
|
||||
print(res);
|
||||
/*auto make_older = mysql::PreparedStatement::prepare(stream, "UPDATE users SET age = age + 1");
|
||||
auto make_older = mysql::PreparedStatement::prepare(stream, "UPDATE users SET age = age + 1");
|
||||
res = make_older.execute();
|
||||
print(res);
|
||||
res = stmt.execute_with_cursor(2, 40, string_lenenc{"hola"});
|
||||
make_older.close();
|
||||
res = stmt.execute_with_cursor(8, 70, string_lenenc{"hola"});
|
||||
cout << "\n\n";
|
||||
print(res);*/
|
||||
print(res);
|
||||
}
|
||||
|
||||
@@ -217,6 +217,12 @@ void mysql::serialize(DynamicBuffer& buffer, const StmtFetch& value)
|
||||
serialize(buffer, value.rows_to_fetch);
|
||||
}
|
||||
|
||||
void mysql::serialize(DynamicBuffer& buffer, const StmtClose& value)
|
||||
{
|
||||
serialize(buffer, Command::COM_STMT_CLOSE);
|
||||
serialize(buffer, value.statement_id);
|
||||
}
|
||||
|
||||
// Text serialization
|
||||
std::ostream& mysql::operator<<(std::ostream& os, const Handshake& value)
|
||||
{
|
||||
|
||||
@@ -215,7 +215,6 @@ bool mysql::BinaryResultset::retrieve_next()
|
||||
|
||||
const mysql::OkPacket& mysql::BinaryResultset::ok_packet() const
|
||||
{
|
||||
// TODO: fetch semantics are not aligned with this assertion
|
||||
assert(state_ == State::exhausted ||
|
||||
(state_ == State::data_available && cursor_exists()));
|
||||
return ok_packet_;
|
||||
@@ -234,7 +233,6 @@ mysql::BinaryResultset mysql::PreparedStatement::do_execute(
|
||||
{
|
||||
std::vector<std::uint8_t> read_buffer;
|
||||
|
||||
// TODO: other cursor types
|
||||
DynamicBuffer write_buffer;
|
||||
serialize(write_buffer, message);
|
||||
stream_->reset_sequence_number();
|
||||
@@ -243,4 +241,14 @@ mysql::BinaryResultset mysql::PreparedStatement::do_execute(
|
||||
return mysql::BinaryResultset {*stream_, statement_id_, fetch_count};
|
||||
}
|
||||
|
||||
void mysql::PreparedStatement::close()
|
||||
{
|
||||
assert(statement_id_ != 0);
|
||||
StmtClose msg { statement_id_ };
|
||||
|
||||
DynamicBuffer write_buffer;
|
||||
serialize(write_buffer, msg);
|
||||
stream_->reset_sequence_number();
|
||||
stream_->write(write_buffer.get());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user