diff --git a/include/db/mysql.h b/include/db/mysql.h index 2fa6f51..1518691 100644 --- a/include/db/mysql.h +++ b/include/db/mysql.h @@ -3,7 +3,7 @@ #include #include #include -#ifndef _WIN32 +#ifndef _WIN32 #include #endif #include "base/define.h" @@ -37,12 +37,13 @@ namespace ylib::mysql class result :public ylib::error_base { public: - result(); + result(void* handle); ~result(); // 列名 std::string field_name(uint32 index); - ylib::mysql::field field(uint32 index); - + // 列类型 + std::string field_type(uint32 index); + std::string field_type(const std::string& name); // 列数量 uint32 field_count(); // 行数量 @@ -72,11 +73,12 @@ namespace ylib::mysql ylib::json to_json(); - friend class ylib::mysql::prepare_statement; private: void* m_handle = nullptr; uint32 m_field_count = 0; uint32 m_row_count = 0; + + std::vector m_fields; }; class prepare_statement:public ylib::error_base{ diff --git a/include/db/sqler.h b/include/db/sqler.h index 16c1c57..e026ac7 100644 --- a/include/db/sqler.h +++ b/include/db/sqler.h @@ -81,11 +81,13 @@ namespace ylib /// 查询 /// ylib::mysql::result* query(); +#if 0 /// /// 查询转换为layui需求模板 /// /// ylib::json query_layui(); +#endif private: /// /// 生成SQL片段 diff --git a/include/net/http_interceptor.h b/include/net/http_interceptor.h index f6b42db..3d0d103 100644 --- a/include/net/http_interceptor.h +++ b/include/net/http_interceptor.h @@ -17,7 +17,7 @@ namespace ylib struct interceptor_info { std::regex express; std::string express_string; - std::function callback; + std::function callback; }; /****************************************************** * class:拦截器 @@ -26,9 +26,8 @@ namespace ylib { public: interceptor(); - ~interceptor(); - size_t add(const std::string& regex_express, std::function callback); - void remove(size_t index); + ~interceptor(); + size_t add(const std::string& regex_express, std::function callback); bool trigger(const std::string& url, network::http::reqpack* rp); private: ylib::nolock_array m_array; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 73da8be..8e499d0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,7 +8,7 @@ file(GLOB_RECURSE HEADER_FILES "${PROJECT_SOURCE_DIR}/include/*.h" ) -include_directories(${PROJECT_SOURCE_DIR}/3rdparty/mysql/jdbc) +include_directories(D:/3rdparty/mysql-connector-c++-8.2.0-winx64/include/jdbc) if(MSVC) include_directories(${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Windows/Include) add_compile_options(/utf-8) diff --git a/src/db/mysql.cpp b/src/db/mysql.cpp index 9f8a7e9..8a71ea2 100644 --- a/src/db/mysql.cpp +++ b/src/db/mysql.cpp @@ -409,8 +409,7 @@ ylib::mysql::result *ylib::mysql::prepare_statement::query() clear(); try { - m_result = new ylib::mysql::result; - m_result->m_handle = PREPARE_STATEMENT->executeQuery(); + m_result = new ylib::mysql::result(PREPARE_STATEMENT->executeQuery()); } catch (const sql::SQLException & e) { @@ -419,9 +418,16 @@ ylib::mysql::result *ylib::mysql::prepare_statement::query() return m_result; } -ylib::mysql::result::result() +ylib::mysql::result::result(void* handle):m_handle(handle) { - m_handle = nullptr; + for (uint32 i = 0; i < RESULT_SET->getMetaData()->getColumnCount(); i++) + { + ylib::mysql::field field; + field.name = RESULT_SET->getMetaData()->getColumnName(i + 1).c_str();; + field.type_name = strutils::change_case(RESULT_SET->getMetaData()->getColumnTypeName(i + 1).c_str(), false); + field.index = i; + m_fields.push_back(field); + } } ylib::mysql::result::~result() @@ -448,13 +454,19 @@ std::string ylib::mysql::result::field_name(uint32 index) return RESULT_SET->getMetaData()->getColumnName(index); } -ylib::mysql::field ylib::mysql::result::field(uint32 index) +std::string ylib::mysql::result::field_type(uint32 index) { - ylib::mysql::field result; - result.index = index; - result.name = RESULT_SET->getMetaData()->getColumnName(index).c_str(); - result.type_name = strutils::change_case(RESULT_SET->getMetaData()->getColumnTypeName(index).c_str(), false); - return result; + return RESULT_SET->getMetaData()->getColumnTypeName(index); +} + +std::string ylib::mysql::result::field_type(const std::string& name) +{ + for (size_t i = 0; i < m_fields.size(); i++) + { + if (m_fields[i].name == name) + return m_fields[i].type_name; + } + throw ylib::exception("not found field: "+name); } uint32 ylib::mysql::result::field_count() diff --git a/src/db/sqler.cpp b/src/db/sqler.cpp index beb3651..c325176 100644 --- a/src/db/sqler.cpp +++ b/src/db/sqler.cpp @@ -209,7 +209,7 @@ ylib::mysql::result* ylib::select::query() setInsetValue(ppst, i + 1, insert_values[i]); return ppst->query(); } - +#if 0 ylib::json ylib::select::query_layui() { auto __orderby = m_orderby; @@ -236,7 +236,7 @@ ylib::json ylib::select::query_layui() } return table; } - +#endif void ylib::select::make_sql(std::string& field_name, std::string& where, std::string& orderby, std::string& limit, std::vector& insert_values) { if (m_fields.size() == 0)