强化conn功能,可获取构建器

This commit is contained in:
xx
2024-06-11 16:37:51 +08:00
parent a3ac5149af
commit f6af678d6b
2 changed files with 102 additions and 23 deletions

View File

@@ -13,13 +13,15 @@ extern "C" {
return 0; return 0;
} }
} }
module::select::select(ylib::mysql::conn *conn) module::select::select(ylib::mysql::conn *conn, bool auto_free_conn):mysql_builder(auto_free_conn)
{ {
m_select = std::make_shared<ylib::select>(conn); m_select = std::make_shared<ylib::select>(conn);
} }
module::select::~select() module::select::~select()
{ {
if (m_auto_free_conn == false)
m_select->m_conn = nullptr;
} }
module::select& module::select::where_i32(const std::string& name, const std::string& expression, int32 value) module::select& module::select::where_i32(const std::string& name, const std::string& expression, int32 value)
@@ -114,7 +116,6 @@ uint64 module::select::count()
void module::select::regist(sol::state* lua) void module::select::regist(sol::state* lua)
{ {
lua->new_usertype<module::select>("mysql_builder_select", lua->new_usertype<module::select>("mysql_builder_select",
"new", sol::constructors<module::select(ylib::mysql::conn*)>(),
"count", &module::select::count, "count", &module::select::count,
"field", &module::select::field, "field", &module::select::field,
"limit", &module::select::limit, "limit", &module::select::limit,
@@ -133,13 +134,15 @@ void module::select::regist(sol::state* lua)
); );
} }
module::update::update(ylib::mysql::conn* conn) module::update::update(ylib::mysql::conn* conn, bool auto_free_conn) :mysql_builder(auto_free_conn)
{ {
m_update = std::make_shared<ylib::update>(conn); m_update = std::make_shared<ylib::update>(conn);
} }
module::update::~update() module::update::~update()
{ {
if (m_auto_free_conn == false)
m_update->m_conn = nullptr;
} }
module::update& module::update::table(const std::string& table_name) module::update& module::update::table(const std::string& table_name)
@@ -166,6 +169,18 @@ module::update& module::update::set_dob(const std::string& name, double value)
return *this; return *this;
} }
module::update& module::update::set_blob(const std::string& name, const std::string_view& value)
{
std::vector<uchar> byte_vct;
byte_vct.resize(value.length());
for (size_t i = 0; i < value.size(); i++)
byte_vct[i] = (uchar)value[i];
m_update->set(name,byte_vct);
return *this;
}
module::update& module::update::set_str(const std::string& name, const std::string& value) module::update& module::update::set_str(const std::string& name, const std::string& value)
{ {
m_update->set(name, value); m_update->set(name, value);
@@ -239,7 +254,6 @@ void module::update::clear()
void module::update::regist(sol::state* lua) void module::update::regist(sol::state* lua)
{ {
lua->new_usertype<module::update>("mysql_builder_update", lua->new_usertype<module::update>("mysql_builder_update",
"new", sol::constructors<module::update(ylib::mysql::conn*)>(),
"exec", &module::update::exec, "exec", &module::update::exec,
"limit", &module::update::limit, "limit", &module::update::limit,
"orderby", &module::update::orderby, "orderby", &module::update::orderby,
@@ -255,17 +269,20 @@ void module::update::regist(sol::state* lua)
"set_i32", &module::update::set_i32, "set_i32", &module::update::set_i32,
"set_i64", &module::update::set_i64, "set_i64", &module::update::set_i64,
"set_str", &module::update::set_str, "set_str", &module::update::set_str,
"set_blob", &module::update::set_blob,
"clear", &module::update::clear "clear", &module::update::clear
); );
} }
module::insert::insert(ylib::mysql::conn* conn) module::insert::insert(ylib::mysql::conn* conn, bool auto_free_conn) :mysql_builder(auto_free_conn)
{ {
m_insert = std::make_shared<ylib::insert>(conn); m_insert = std::make_shared<ylib::insert>(conn);
} }
module::insert::~insert() module::insert::~insert()
{ {
if (m_auto_free_conn == false)
m_insert->m_conn = nullptr;
} }
module::insert& module::insert::table(const std::string& table_name) module::insert& module::insert::table(const std::string& table_name)
@@ -298,6 +315,18 @@ module::insert& module::insert::set_str(const std::string& name, const std::stri
return *this; return *this;
} }
module::insert& module::insert::set_blob(const std::string& name, const std::string_view& value)
{
std::vector<uchar> byte_vct;
byte_vct.resize(value.length());
for (size_t i = 0; i < value.size(); i++)
byte_vct[i] = (uchar)value[i];
m_insert->set(name, byte_vct);
return *this;
}
module::insert& module::insert::set_not_ppst(const std::string& name, const std::string& value) module::insert& module::insert::set_not_ppst(const std::string& name, const std::string& value)
{ {
m_insert->set_not_pret(name, value); m_insert->set_not_pret(name, value);
@@ -317,7 +346,6 @@ void module::insert::clear()
void module::insert::regist(sol::state* lua) void module::insert::regist(sol::state* lua)
{ {
lua->new_usertype<module::insert>("mysql_builder_insert", lua->new_usertype<module::insert>("mysql_builder_insert",
"new", sol::constructors<module::insert(ylib::mysql::conn*)>(),
"exec", &module::insert::exec, "exec", &module::insert::exec,
"table", &module::insert::table, "table", &module::insert::table,
"set_not_ppst", &module::insert::set_not_ppst, "set_not_ppst", &module::insert::set_not_ppst,
@@ -325,19 +353,22 @@ void module::insert::regist(sol::state* lua)
"set_i32", &module::insert::set_i32, "set_i32", &module::insert::set_i32,
"set_i64", &module::insert::set_i64, "set_i64", &module::insert::set_i64,
"set_str", &module::insert::set_str, "set_str", &module::insert::set_str,
"set_blob", &module::insert::set_blob,
"clear", &module::insert::clear "clear", &module::insert::clear
); );
} }
module::delete_::delete_(ylib::mysql::conn* conn) module::delete_::delete_(ylib::mysql::conn* conn, bool auto_free_conn) :mysql_builder(auto_free_conn)
{ {
m_delete = std::make_shared<ylib::delete_>(conn); m_delete = std::make_shared<ylib::delete_>(conn);
} }
module::delete_::~delete_() module::delete_::~delete_()
{ {
if (m_auto_free_conn == false)
m_delete->m_conn = nullptr;
} }
module::delete_& module::delete_::table(const std::string& table_name) module::delete_& module::delete_::table(const std::string& table_name)
@@ -406,7 +437,6 @@ void module::delete_::clear()
void module::delete_::regist(sol::state* lua) void module::delete_::regist(sol::state* lua)
{ {
lua->new_usertype<module::delete_>("mysql_builder_delete", lua->new_usertype<module::delete_>("mysql_builder_delete",
"new", sol::constructors<module::delete_(ylib::mysql::conn*)>(),
"exec", &module::delete_::exec, "exec", &module::delete_::exec,
"limit", &module::delete_::limit, "limit", &module::delete_::limit,
"orderby", &module::delete_::orderby, "orderby", &module::delete_::orderby,
@@ -444,7 +474,8 @@ void module::mysql_regist(sol::state* lua)
"select", &module::mysql::select, "select", &module::mysql::select,
"update", &module::mysql::update, "update", &module::mysql::update,
"insert", &module::mysql::insert, "insert", &module::mysql::insert,
"delete", &module::mysql::delete_ "delete", &module::mysql::delete_,
"get", &module::mysql::get
); );
module::mysql_result::regist(lua); module::mysql_result::regist(lua);
@@ -487,22 +518,22 @@ void module::mysql::close()
std::shared_ptr<module::select> module::mysql::select() std::shared_ptr<module::select> module::mysql::select()
{ {
return std::make_shared<module::select>(m_pool->get()); return std::make_shared<module::select>(m_pool->get(), true);
} }
std::shared_ptr<module::insert> module::mysql::insert() std::shared_ptr<module::insert> module::mysql::insert()
{ {
return std::make_shared<module::insert>(m_pool->get()); return std::make_shared<module::insert>(m_pool->get(),true);
} }
std::shared_ptr<module::update> module::mysql::update() std::shared_ptr<module::update> module::mysql::update()
{ {
return std::make_shared<module::update>(m_pool->get()); return std::make_shared<module::update>(m_pool->get(), true);
} }
std::shared_ptr<module::delete_> module::mysql::delete_() std::shared_ptr<module::delete_> module::mysql::delete_()
{ {
return std::make_shared<module::delete_>(m_pool->get()); return std::make_shared<module::delete_>(m_pool->get(), true);
} }
std::shared_ptr<module::mysql_conn> module::mysql::get() std::shared_ptr<module::mysql_conn> module::mysql::get()
@@ -712,6 +743,26 @@ std::string module::mysql_conn::last_error()
{ {
return m_conn->last_error(); return m_conn->last_error();
} }
std::shared_ptr<module::select> module::mysql_conn::select()
{
return std::make_shared<module::select>(m_conn, false);
}
std::shared_ptr<module::insert> module::mysql_conn::insert()
{
return std::make_shared<module::insert>(m_conn, false);
}
std::shared_ptr<module::update> module::mysql_conn::update()
{
return std::make_shared<module::update>(m_conn, false);
}
std::shared_ptr<module::delete_> module::mysql_conn::delete_()
{
return std::make_shared<module::delete_>(m_conn, false);
}
void module::mysql_conn::regist(sol::state* lua) void module::mysql_conn::regist(sol::state* lua)
{ {
@@ -725,7 +776,11 @@ void module::mysql_conn::regist(sol::state* lua)
"setDatabase", &module::mysql_conn::setDatabase, "setDatabase", &module::mysql_conn::setDatabase,
"setsql", &module::mysql_conn::setsql, "setsql", &module::mysql_conn::setsql,
"connect", &module::mysql_conn::connect, "connect", &module::mysql_conn::connect,
"last_error", &module::mysql_conn::last_error "last_error", &module::mysql_conn::last_error,
"select", &module::mysql_conn::select,
"update", &module::mysql_conn::update,
"insert", &module::mysql_conn::insert,
"delete", &module::mysql_conn::delete_
); );
} }

View File

@@ -66,10 +66,22 @@ namespace module
ylib::mysql::result* m_result = nullptr; ylib::mysql::result* m_result = nullptr;
}; };
class mysql_builder {
class select {
public: public:
select(ylib::mysql::conn* conn); mysql_builder(bool auto_free_conn) {
this->m_auto_free_conn = auto_free_conn;
}
~mysql_builder()
{
}
protected:
bool m_auto_free_conn = false;
};
class select :public mysql_builder {
public:
select(ylib::mysql::conn* conn,bool auto_free_conn);
~select(); ~select();
module::select& where_i32(const std::string& name, const std::string& expression, int32 value); module::select& where_i32(const std::string& name, const std::string& expression, int32 value);
module::select& where_i64(const std::string& name, const std::string& expression, int64 value); module::select& where_i64(const std::string& name, const std::string& expression, int64 value);
@@ -89,15 +101,17 @@ namespace module
private: private:
std::shared_ptr<ylib::select> m_select; std::shared_ptr<ylib::select> m_select;
}; };
class update { class update :public mysql_builder {
public: public:
update(ylib::mysql::conn* conn); update(ylib::mysql::conn* conn, bool auto_free_conn);
~update(); ~update();
module::update& table(const std::string& table_name); module::update& table(const std::string& table_name);
module::update& set_i32(const std::string& name, int32 value); module::update& set_i32(const std::string& name, int32 value);
module::update& set_i64(const std::string& name, int64 value); module::update& set_i64(const std::string& name, int64 value);
module::update& set_dob(const std::string& name, double value); module::update& set_dob(const std::string& name, double value);
module::update& set_str(const std::string& name, const std::string& value); module::update& set_str(const std::string& name, const std::string& value);
module::update& set_blob(const std::string& name, const std::string_view& value);
module::update& set(const std::string& expression); module::update& set(const std::string& expression);
module::update& where_i32(const std::string& name, const std::string& expression, int32 value); module::update& where_i32(const std::string& name, const std::string& expression, int32 value);
module::update& where_i64(const std::string& name, const std::string& expression, int64 value); module::update& where_i64(const std::string& name, const std::string& expression, int64 value);
@@ -113,25 +127,28 @@ namespace module
private: private:
std::shared_ptr<ylib::update> m_update; std::shared_ptr<ylib::update> m_update;
}; };
class insert { class insert :public mysql_builder {
public: public:
insert(ylib::mysql::conn* conn); insert(ylib::mysql::conn* conn, bool auto_free_conn);
~insert(); ~insert();
module::insert& table(const std::string& table_name); module::insert& table(const std::string& table_name);
module::insert& set_i32(const std::string& name, int32 value); module::insert& set_i32(const std::string& name, int32 value);
module::insert& set_i64(const std::string& name, int64 value); module::insert& set_i64(const std::string& name, int64 value);
module::insert& set_dob(const std::string& name, double value); module::insert& set_dob(const std::string& name, double value);
module::insert& set_str(const std::string& name, const std::string& value); module::insert& set_str(const std::string& name, const std::string& value);
module::insert& set_blob(const std::string& name, const std::string_view& value);
module::insert& set_not_ppst(const std::string& name, const std::string& value); module::insert& set_not_ppst(const std::string& name, const std::string& value);
uint64 exec(); uint64 exec();
void clear(); void clear();
static void regist(sol::state* lua); static void regist(sol::state* lua);
private: private:
std::shared_ptr<ylib::insert> m_insert; std::shared_ptr<ylib::insert> m_insert;
}; };
class delete_ { class delete_ :public mysql_builder {
public: public:
delete_(ylib::mysql::conn* conn); delete_(ylib::mysql::conn* conn, bool auto_free_conn);
~delete_(); ~delete_();
module::delete_& table(const std::string& table_name); module::delete_& table(const std::string& table_name);
module::delete_& where_i32(const std::string& name, const std::string& expression, int32 value); module::delete_& where_i32(const std::string& name, const std::string& expression, int32 value);
@@ -189,6 +206,13 @@ namespace module
void rollback(); void rollback();
void setDatabase(const std::string& name); void setDatabase(const std::string& name);
std::string last_error(); std::string last_error();
std::shared_ptr<module::select> select();
std::shared_ptr<module::insert> insert();
std::shared_ptr<module::update> update();
std::shared_ptr<module::delete_> delete_();
static void regist(sol::state* lua); static void regist(sol::state* lua);
private: private:
ylib::mysql::conn* m_conn = nullptr; ylib::mysql::conn* m_conn = nullptr;