Commit 5fb9030d authored by yiwenshao's avatar yiwenshao

fix bug

parent 2b651e0f
../tls/mysql_wrapper/backFieldsToFiles tdb 1
......@@ -8,7 +8,7 @@ CXX=g++
.PHONY: all
executables:=main createInsert backFieldsToFiles analysis
executables:=main backFieldsToFiles
all: $(executables)
......
#include <iostream>
#include <stdlib.h>
#include "mysqllib/utilities.h"
#include "mysqllib/MyConnect.h"
#include <vector>
#include <string>
using namespace std;
extern Connect *con;
void createSelect(string database,string table){
auto dbresult = con->execute(string("SELECT * FROM `")+database+"`.`"+string(table)+"` LIMIT 1;");
DBResult * result = dbresult.get();
vector<vector<string>> rows = result->getRows();
vector<enum_field_types> types = result->getTypes();
vector<string> fields = result->getFields();
}
int main(int argc,char**argv){
system("rm -rf allTables");
system("mkdir allTables");
if(argc!=3){
cout<<"db, table"<<endl;
return 0;
}
string db(argv[1]),table(argv[2]);
createSelect(db,table);
return 0;
}
#include <iostream>
#include "mysqllib/utilities.h"
#include "mysqllib/MyConnect.h"
#include <vector>
#include <string>
using namespace std;
extern Connect *con;
string createSelect(string database,string table,bool isQuote=true){
auto dbresult = con->execute(string("SELECT * FROM `")+database+"`.`"+string(table)+"` LIMIT 1;");
DBResult * result = dbresult.get();
vector<vector<string>> rows = result->getRows();
vector<enum_field_types> types = result->getTypes();
vector<string> fields = result->getFields();
string head = "SELECT ";
for(int i=0;i<types.size();i++){
if(IS_NUM(types[i])){
head += fields[i]+",";
}
else{
if(isQuote)
head+=string("QUOTE(")+fields[i]+"),";
else head+=string("HEX(")+fields[i]+"),";
}
}
head[head.size()-1]=' ';
head += "FROM `"+database+"`.`"+table+"`";
return head;
}
//http://php.net/manual/zh/function.mysql-escape-string.php
//https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_quote
//backup in configurable extended version
static int numOfPipe = 3;
void backupselect(string query,string table){
auto dbresult = con->execute(query);
DBResult * result = dbresult.get();
vector<vector<string>> rows = result->getRows();
vector<enum_field_types> types = result->getTypes();
vector<string> fieldNames = result->getFields();
string head = string("INSERT INTO ")+"`"+table+"`"+string(" VALUES (");
for(auto i=0;i<rows.size();i++){
string cur=head;
for(int j=0;j<rows[i].size();j++){
if(IS_NUM(types[j]))
cur+=rows[i][j]+",";
else{
cur+=rows[i][j]+",";
}
}
cur[cur.size()-1]=')';
for(int k=1;k<numOfPipe;k++){
//for each pipe
i++;
if(i>=rows.size()) break;
cur+=",(";
for(int j=0;j<rows[i].size();j++){
if(IS_NUM(types[j]))
cur+=rows[i][j]+",";
else{
cur+=rows[i][j]+",";
}
}
cur[cur.size()-1]=')';
}
cur+=";";
cout<<cur<<endl;
}
}
vector<string> getTables(string db){
string query = string("SHOW TABLES IN ")+db;
auto dbresult = con->execute(query);
DBResult * result = dbresult.get();
vector<vector<string>> rows = result->getRows();
vector<enum_field_types> types = result->getTypes();
vector<string> fieldNames = result->getFields();
vector<string> res;
for(auto item:rows){
assert(item.size()==1);
res.push_back(item[0]);
}
return res;
}
int main(int argc,char**argv){
if(argc!=4){
cout<<"numOfpipe, db, isQuote"<<endl;
return 0;
}
string num = string(argv[1]);
numOfPipe = stoi(num);
vector<string> tables = getTables(string(argv[2]));
bool isQuote;
if(string(argv[3]) == "true"){
isQuote = true;
}else if(string(argv[3]) == "false"){
isQuote = false;
}else{
printf("error\n");
return 0;
}
for(auto item:tables){
string query = createSelect(string(argv[2]),item,isQuote);
backupselect(query,item);
}
return 0;
}
......@@ -6,7 +6,7 @@
using namespace std;
extern Connect *con;
string createSelect(string database,string table){
string createSelect(string database,string table,bool isQuote=true){
auto dbresult = con->execute(string("SELECT * FROM `")+database+"`.`"+string(table)+"` LIMIT 1;");
DBResult * result = dbresult.get();
vector<vector<string>> rows = result->getRows();
......@@ -18,7 +18,9 @@ string createSelect(string database,string table){
head += fields[i]+",";
}
else{
if(isQuote)
head+=string("QUOTE(")+fields[i]+"),";
else head+=string("HEX(")+fields[i]+"),";
}
}
head[head.size()-1]=' ';
......@@ -38,16 +40,6 @@ void backupselect(string query,string table){
vector<enum_field_types> types = result->getTypes();
vector<string> fieldNames = result->getFields();
string head = string("INSERT INTO ")+"`"+table+"`"+string(" VALUES (");
system("rm -rf allColumns");
system("mkdir allColumns");
vector<FILE *> files;
for(auto i=0u;i<types.size();i++){
FILE * cur = fopen((string("allColumns/")+fieldNames[i]).c_str(),"w");
if(cur==NULL) exit(1);
files.push_back(cur);
}
for(auto i=0;i<rows.size();i++){
string cur=head;
for(int j=0;j<rows[i].size();j++){
......@@ -75,17 +67,28 @@ void backupselect(string query,string table){
cur+=";";
cout<<cur<<endl;
}
}
for(auto i=0u;i<files.size();i++ ){
vector<string> getTables(string db){
string query = string("SHOW TABLES IN ")+db;
auto dbresult = con->execute(query);
DBResult * result = dbresult.get();
vector<vector<string>> rows = result->getRows();
vector<enum_field_types> types = result->getTypes();
vector<string> fieldNames = result->getFields();
vector<string> res;
for(auto item:rows){
fwrite(item[i].c_str(),1,item[i].size(),files[i]);
fprintf(files[i],"\n");
assert(item.size()==1);
res.push_back(item[0]);
}
}
for(auto i=0u;i<files.size();i++)
fclose(files[i]);
return res;
}
int main(int argc,char**argv){
if(argc!=4){
cout<<"numOfpipe, db, table"<<endl;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment