增加pstt、conn

This commit is contained in:
xx
2024-06-11 14:59:52 +08:00
parent 2d27de0fde
commit a3ac5149af
3 changed files with 77 additions and 21 deletions

View File

@@ -41,9 +41,16 @@ include_directories(
${FASTWEB}/include/lua
)
if(MSVC)
add_definitions(/bigobj)
set(MYSQL_CPP_LIB_DIR "$ENV{USERPROFILE}/MySQL/MySQL Connector C++ 8.2.0/lib64")
endif()
# 添加共享库
add_library(${MODULE_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
if(MSVC)
target_link_libraries(${MODULE_NAME} PRIVATE
odbc32.lib
@@ -55,17 +62,19 @@ if(MSVC)
${YLIB}/lib/libcrypto_static_win64.lib
$<$<CONFIG:Debug>:${FASTWEB}/bin/debug/3rdparty/lib/lua.lib>
$<$<CONFIG:Debug>:D:/3rdparty/mysql-connector-c++-8.2.0-winx64/lib64/vs14/debug/mysqlcppconn.lib>
$<$<CONFIG:Debug>:>
$<$<CONFIG:Debug>:${YLIB}/lib/ylib_d.lib>
$<$<CONFIG:Debug>:${MYSQL_CPP_LIB_DIR}/vs14/debug/mysqlcppconn.lib>
$<$<CONFIG:Release>:${FASTWEB}/bin/release/3rdparty/lib/lua.lib>
$<$<CONFIG:Release>:D:/mysql-connector-c++-8.2.0-winx64-release/lib64/vs14/mysqlcppconn.lib>
$<$<CONFIG:Release>:${YLIB}/lib/ylib.lib>
$<$<CONFIG:Release>:${MYSQL_CPP_LIB_DIR}/vs14/mysqlcppconn.lib>
)
else()
target_link_libraries(${MODULE_NAME}
hpsocket
ylib
ylib
crypto
lua5.3
mysqlcppconn

View File

@@ -561,7 +561,7 @@ sol::object module::mysql_result::get(sol::object obj, sol::this_state s)
type = m_result->field_type(obj.as<std::string>());
else if (obj.get_type() == sol::type::number)
type = m_result->field_type(obj.as<int>());
#define GET_VALUE(FUNCTION) \
if (obj.get_type() == sol::type::string) \
return sol::make_object(s, m_result->FUNCTION(obj.as<std::string>())); \
@@ -573,7 +573,7 @@ sol::object module::mysql_result::get(sol::object obj, sol::this_state s)
GET_VALUE(get_int32);
}
else if (type == "varchar" || type == "char" || type == "text" || type == "datetime" || type == "binary")
else if (type == "varchar" || type == "char" || type == "text" || type == "datetime")
{
GET_VALUE(get_string);
}
@@ -589,6 +589,23 @@ sol::object module::mysql_result::get(sol::object obj, sol::this_state s)
{
GET_VALUE(get_double);
}
else if (type == "blob" || type == "binary")
{
std::vector<char> rd;
ylib::buffer rb;
if (obj.get_type() == sol::type::string)
{
rb = m_result->get_blob(obj.as<std::string>());
}
else if (obj.get_type() == sol::type::number)
{
rb = m_result->get_blob(obj.as<uint32>());
}
rd.resize(rb.size());
for (size_t i = 0; i < rb.size(); i++)
rd[i] = rb[i];
return sol::make_object(s,rd);
}
return sol::make_object(s, sol::nil);
}
@@ -622,6 +639,11 @@ void module::mysql_result::regist(sol::state* lua)
);
}
module::mysql_conn::mysql_conn()
{
m_conn = new ylib::mysql::conn();
}
module::mysql_conn::mysql_conn(ylib::mysql::conn* conn)
{
m_conn = conn;
@@ -631,11 +653,26 @@ module::mysql_conn::~mysql_conn()
{
if (m_conn != nullptr)
{
m_conn->pool()->recover(m_conn);
if (m_conn->pool() != nullptr)
m_conn->pool()->recover(m_conn);
else
delete m_conn;
m_conn = nullptr;
}
}
int module::mysql_conn::connect(const std::string& ipaddress, const std::string& username, const std::string& password, const std::string& database, const std::string& charset, ushort port)
{
ylib::mysql::mysql_conn_info info;
info.ipaddress = ipaddress;
info.username = username;
info.password = password;
info.charset = charset;
info.port = port;
info.database = database;
return m_conn->start(info);
}
void module::mysql_conn::clear()
{
m_conn->clear();
@@ -671,18 +708,26 @@ void module::mysql_conn::setDatabase(const std::string& name)
m_conn->setDatabase(name);
}
std::string module::mysql_conn::last_error()
{
return m_conn->last_error();
}
void module::mysql_conn::regist(sol::state* lua)
{
lua->new_usertype<module::mysql_conn>("mysql_conn",
"new", sol::constructors<module::mysql_conn(), module::mysql_conn(ylib::mysql::conn*)>(),
"begin", &module::mysql_conn::begin,
"clear", &module::mysql_conn::clear,
"commit", &module::mysql_conn::commit,
"commit", &module::mysql_conn::commit,
"insert_id", &module::mysql_conn::insert_id,
"rollback", &module::mysql_conn::rollback,
"setDatabase", &module::mysql_conn::setDatabase,
"setsql", &module::mysql_conn::setsql
"setsql", &module::mysql_conn::setsql,
"connect", &module::mysql_conn::connect,
"last_error", &module::mysql_conn::last_error
);
}
}
module::mysql_prepare_statement::mysql_prepare_statement(ylib::mysql::prepare_statement* pstt):m_pstt(pstt)
{
@@ -727,16 +772,14 @@ void module::mysql_prepare_statement::set_null(uint32 index)
m_pstt->set_null(index);
}
void module::mysql_prepare_statement::set_str(uint32 index, const std::string& value)
void module::mysql_prepare_statement::set_str(uint32 index, const std::string_view& value)
{
m_pstt->set_string(index, value);
m_pstt->set_string(index, (char*)value.data(), value.size());
}
void module::mysql_prepare_statement::set_blob(uint32 index, const ylib::buffer& value)
void module::mysql_prepare_statement::set_blob(uint32 index,const std::string_view& value)
{
m_pstt->set_blob(index, value);
m_pstt->set_blob(index,value.data(),value.length());
}
void module::mysql_prepare_statement::clear()
{
m_pstt->clear();
@@ -755,8 +798,9 @@ std::shared_ptr<module::mysql_result> module::mysql_prepare_statement::query()
void module::mysql_prepare_statement::regist(sol::state* lua)
{
lua->new_usertype<module::mysql_prepare_statement>("mysql_prepare_statement",
"begin", &module::mysql_prepare_statement::clear,
"clear", &module::mysql_prepare_statement::query,
"update", &module::mysql_prepare_statement::update,
"clear", &module::mysql_prepare_statement::clear,
"query", &module::mysql_prepare_statement::query,
"set_bigint", &module::mysql_prepare_statement::set_bigint,
"set_blob", &module::mysql_prepare_statement::set_blob,
"set_boolean", &module::mysql_prepare_statement::set_boolean,
@@ -765,6 +809,5 @@ void module::mysql_prepare_statement::regist(sol::state* lua)
"set_i32", &module::mysql_prepare_statement::set_i32,
"set_i64", &module::mysql_prepare_statement::set_i64,
"set_str", &module::mysql_prepare_statement::set_str
);
}

View File

@@ -160,8 +160,8 @@ namespace module
void set_i32(uint32 index, int32 value);
void set_i64(uint32 index, int64 value);
void set_null(uint32 index);
void set_str(uint32 index, const std::string& value);
void set_blob(uint32 index, const ylib::buffer& value);
void set_str(uint32 index, const std::string_view& value);
void set_blob(uint32 index,const std::string_view& value);
void clear();
uint64 update();
std::shared_ptr<module::mysql_result> query();
@@ -174,9 +174,13 @@ namespace module
class mysql_conn
{
public:
mysql_conn();
mysql_conn(ylib::mysql::conn* conn);
~mysql_conn();
int connect(const std::string& ipaddress, const std::string& username, const std::string& password, const std::string& database, const std::string& charset, ushort port);
void clear();
std::shared_ptr<module::mysql_prepare_statement> setsql(const std::string& sql);
uint64 insert_id();
@@ -184,7 +188,7 @@ namespace module
void commit();
void rollback();
void setDatabase(const std::string& name);
std::string last_error();
static void regist(sol::state* lua);
private:
ylib::mysql::conn* m_conn = nullptr;