query(50%)

This commit is contained in:
jie 2024-10-23 18:45:36 +08:00
parent c587572432
commit 4fe6f23da9
4 changed files with 81 additions and 7 deletions

View File

@ -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

View File

@ -1,6 +1,15 @@
#include "sqlConnection.h"
#include <iostream>
#include <ranges>
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<<err_msg<<"\n";});
auto table_result = conn.GetTables();
ranges::for_each(table_result, [](auto item){cout<<item<<endl;});
return 0;
}

View File

@ -3,6 +3,8 @@
#include <algorithm>
#include <string_view>
#include <expected>
#include <format>
#include <map>
#include "mysql.h"
@ -10,6 +12,31 @@
using util::_support_string;
struct RowItem{
std::vector<std::string_view> row;
};
//Not Implemented;
class Result{
std::vector<std::string_view> fields;
std::map<std::string_view, std::vector<std::string_view>> 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<std::string_view>& 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<std::vector<std::string_view>> Query(std::string_view command){
std::vector<std::string_view> get_fields(std::string_view table_name){
std::vector<std::string_view> 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<field_length; i++){
really_result.emplace_back(row[i]);
}
mysql_free_result(mysql_result);
}
return really_result;
}
std::expected<std::map<std::string_view, std::vector<std::string_view>>, std::string_view> Query(std::string_view command){
//Not Implemented;
return std::nullopt;
std::map<std::string_view, std::vector<std::string_view>> 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<field_length; i++){
}
}
mysql_free_result(mysql_result);
}
return std::unexpected(get_error_msg());
}
bool Execute(std::string_view command){
@ -80,8 +136,17 @@ public:
}
std::vector<std::string_view> GetTables(){
//Not Implemented;
return std::vector<std::string_view>{};
std::vector<std::string_view> 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;
};
};

BIN
sqlconn Executable file

Binary file not shown.