query(50%)
This commit is contained in:
parent
c587572432
commit
4fe6f23da9
2
build.sh
2
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
|
||||
|
9
main.cc
9
main.cc
@ -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;
|
||||
}
|
@ -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;
|
||||
};
|
||||
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user