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 "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){
|
int main(int argc, char** const argv){
|
||||||
SqlConnection conn{};
|
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;
|
return 0;
|
||||||
}
|
}
|
@ -3,6 +3,8 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <expected>
|
#include <expected>
|
||||||
|
#include <format>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
#include "mysql.h"
|
#include "mysql.h"
|
||||||
|
|
||||||
@ -10,6 +12,31 @@
|
|||||||
|
|
||||||
using util::_support_string;
|
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{
|
class SqlConnection{
|
||||||
private:
|
private:
|
||||||
MYSQL mysql_client;
|
MYSQL mysql_client;
|
||||||
@ -59,8 +86,7 @@ public:
|
|||||||
this->password = util::to_char(_password);
|
this->password = util::to_char(_password);
|
||||||
this->database_name = util::to_char(_database_name);
|
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){
|
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(get_error_msg());
|
||||||
return std::unexpected(error_msg);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -69,9 +95,39 @@ public:
|
|||||||
mysql_close(&mysql_client);
|
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;
|
//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){
|
bool Execute(std::string_view command){
|
||||||
@ -80,8 +136,17 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string_view> GetTables(){
|
std::vector<std::string_view> GetTables(){
|
||||||
//Not Implemented;
|
std::vector<std::string_view> really_result;
|
||||||
return std::vector<std::string_view>{};
|
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