diff --git a/build.sh b/build.sh index 88b2619..d9f2136 100755 --- a/build.sh +++ b/build.sh @@ -1 +1 @@ -g++ -o demo main.cc -I/usr/include/mysql -lmysqlclient -std=c++23 -g +g++ -o sqlconn main.cc -I/usr/include/mysql -lmysqlclient -std=c++23 -g && ./sqlconn diff --git a/main.cc b/main.cc index 3f7b1b2..36f0931 100644 --- a/main.cc +++ b/main.cc @@ -1,6 +1,15 @@ #include "sqlConnection.h" +#include +#include +namespace ranges = std::ranges; +namespace views = std::ranges::views; +using namespace std; int main(int argc, char** const argv){ SqlConnection conn{}; + auto resp = conn.Connect("192.168.1.17", "3306", "root", "", "mysql"); +// resp.or_else([](auto err_msg){cout< #include #include +#include +#include #include "mysql.h" @@ -10,6 +12,31 @@ using util::_support_string; +struct RowItem{ + std::vector row; +}; + +//Not Implemented; +class Result{ + std::vector fields; + std::map> datas; + +public: + //get size; + size_t size() const{ + size_t size = 0; + for(auto&& [key, value] : datas){ + if(datas.size() > size) size = datas.size(); + } + return size; + } + //return fields + const std::vector& get_fields() const { + return fields; + } + +}; + class SqlConnection{ private: MYSQL mysql_client; @@ -59,8 +86,7 @@ public: this->password = util::to_char(_password); this->database_name = util::to_char(_database_name); if(mysql_real_connect(&mysql_client, ip, username, password, database_name, std::stoi(port), nullptr, 0) == nullptr){ - auto error_msg = get_error_msg(); - return std::unexpected(error_msg); + return std::unexpected(get_error_msg()); } return true; } @@ -69,9 +95,39 @@ public: mysql_close(&mysql_client); } - std::optional> Query(std::string_view command){ + std::vector get_fields(std::string_view table_name){ + std::vector really_result; + std::string command; + std::format_to(std::back_inserter(command), "SHOW COLUMNS FROM %s;", table_name); + auto _ = mysql_query(&mysql_client, command.c_str()); + if(auto mysql_result = mysql_store_result(&mysql_client); mysql_result != nullptr){ + auto field_length = mysql_num_fields(mysql_result); + auto row = mysql_fetch_row(mysql_result); + for(int i=0; i>, std::string_view> Query(std::string_view command){ //Not Implemented; - return std::nullopt; + std::map> really_result; + mysql_query(&mysql_client, command.data()); + if(auto mysql_result = mysql_store_result(&mysql_client); mysql_result != nullptr){ + auto row_length = mysql_fetch_lengths(mysql_result); + auto field_length = mysql_num_fields(mysql_result); + while(auto row = mysql_fetch_row(mysql_result)){ + for(int i=0; i GetTables(){ - //Not Implemented; - return std::vector{}; + std::vector really_result; + mysql_query(&mysql_client, "SHOW TABLES;"); + if(auto mysql_result = mysql_store_result(&mysql_client); mysql_result != nullptr){ + auto row_length = mysql_fetch_lengths(mysql_result); + while(auto row = mysql_fetch_row(mysql_result)){ + really_result.emplace_back(row[0]); + } + mysql_free_result(mysql_result); + } + + return really_result; }; }; diff --git a/sqlconn b/sqlconn new file mode 100755 index 0000000..6ca37e4 Binary files /dev/null and b/sqlconn differ