|
@@ -1,378 +1,213 @@
|
|
#ifndef ORM_DEFAULT_FORTUNEBASEMATA_H
|
|
#ifndef ORM_DEFAULT_FORTUNEBASEMATA_H
|
|
#define ORM_DEFAULT_FORTUNEBASEMATA_H
|
|
#define ORM_DEFAULT_FORTUNEBASEMATA_H
|
|
/*
|
|
/*
|
|
-*This file is auto create from cli
|
|
|
|
-*本文件为自动生成 Fri, 26 Jan 2024 02:59:30 GMT
|
|
|
|
-***/
|
|
|
|
|
|
+ *This file is auto create from cli
|
|
|
|
+ *本文件为自动生成 Fri, 26 Jan 2024 02:59:30 GMT
|
|
|
|
+ ***/
|
|
#include <iostream>
|
|
#include <iostream>
|
|
#include <cstdio>
|
|
#include <cstdio>
|
|
#include <sstream>
|
|
#include <sstream>
|
|
#include <array>
|
|
#include <array>
|
|
-#include <map>
|
|
|
|
-#include <string_view>
|
|
|
|
-#include <string>
|
|
|
|
|
|
+#include <map>
|
|
|
|
+#include <string_view>
|
|
|
|
+#include <string>
|
|
#include <vector>
|
|
#include <vector>
|
|
#include <ctime>
|
|
#include <ctime>
|
|
#include <array>
|
|
#include <array>
|
|
-#include "mysql.h"
|
|
|
|
-namespace orm {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+namespace orm
|
|
|
|
+{
|
|
|
|
+
|
|
struct fortunebase
|
|
struct fortunebase
|
|
{
|
|
{
|
|
- struct meta{
|
|
|
|
- unsigned int id= 0; //
|
|
|
|
- std::string message=""; //
|
|
|
|
- } data;
|
|
|
|
- std::vector<fortunebase::meta> record;
|
|
|
|
-std::string _rmstag="default";//this value must be default or tag value, tag in mysqlconnect config file .
|
|
|
|
-std::vector<unsigned char> _keypos{0x00};
|
|
|
|
-MYSQL_ROW _row;
|
|
|
|
-std::vector<fortunebase::meta>::iterator begin(){ return record.begin(); }
|
|
|
|
-std::vector<fortunebase::meta>::iterator end(){ return record.end(); }
|
|
|
|
-std::vector<fortunebase::meta>::const_iterator begin() const{ return record.begin(); }
|
|
|
|
-std::vector<fortunebase::meta>::const_iterator end() const{ return record.end(); }
|
|
|
|
-const std::array<std::string,2> colnames={"id","message"};
|
|
|
|
-const std::array<unsigned char,2> colnamestype= {3,253};
|
|
|
|
-std::string tablename="fortune";
|
|
|
|
-std::string modelname="Fortune";
|
|
|
|
-
|
|
|
|
- unsigned char findcolpos(const std::string &coln){
|
|
|
|
- if(coln.size()==0)
|
|
|
|
- {
|
|
|
|
- return 255;
|
|
|
|
- }
|
|
|
|
- unsigned char bi=coln[0];
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if(bi<91&&bi>64){
|
|
|
|
- bi+=32;
|
|
|
|
- }
|
|
|
|
- switch(coln[0]){
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- case 'i':
|
|
|
|
- return 0;
|
|
|
|
-break;
|
|
|
|
-case 'm':
|
|
|
|
- return 1;
|
|
|
|
-break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- return 255;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- int size(){ return record.size(); }
|
|
|
|
-
|
|
|
|
- std::string getPKname(){
|
|
|
|
- return "id";
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
- void record_reset()
|
|
|
|
- {
|
|
|
|
- record.clear();
|
|
|
|
- }
|
|
|
|
- void data_reset(){
|
|
|
|
- fortunebase::meta metatemp;
|
|
|
|
- data = metatemp;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql){
|
|
|
|
- std::string temp;
|
|
|
|
-
|
|
|
|
- return temp;
|
|
|
|
- }
|
|
|
|
- void _setColnamevalue()
|
|
|
|
- {
|
|
|
|
- for(unsigned char i=0;i<_keypos.size();i++)
|
|
|
|
- {
|
|
|
|
- switch(_keypos[i]){
|
|
|
|
- case 0:
|
|
|
|
- try{
|
|
|
|
- data.id=std::stoul(_row[i]);
|
|
|
|
- }catch (...) {
|
|
|
|
- data.id=0;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- try{
|
|
|
|
- data.message.append((_row[i]==NULL?"":_row[i]));
|
|
|
|
- }catch (...) {
|
|
|
|
- data.message.clear();
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- { }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if(i>210){
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- void _addnewrowvalue(){
|
|
|
|
- fortunebase::meta metatemp;
|
|
|
|
-
|
|
|
|
- for(unsigned char i=0;i<_keypos.size();i++){
|
|
|
|
-
|
|
|
|
- switch(_keypos[i]){
|
|
|
|
-
|
|
|
|
- case 0:
|
|
|
|
- try{
|
|
|
|
- metatemp.id=std::stoul(_row[i]);
|
|
|
|
- }catch (...) {
|
|
|
|
- metatemp.id=0;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- try{
|
|
|
|
- metatemp.message.append((_row[i]==NULL?"":_row[i]));
|
|
|
|
- }catch (...) {
|
|
|
|
- metatemp.message.clear();
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- { }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- if(i>210){
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- record.emplace_back(std::move(metatemp));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- inline std::string stringaddslash(std::string &content){
|
|
|
|
|
|
+ struct meta
|
|
|
|
+ {
|
|
|
|
+ unsigned int id = 0; //
|
|
|
|
+ std::string message = "";//
|
|
|
|
+ } data;
|
|
|
|
+ std::vector<fortunebase::meta> record;
|
|
|
|
+ std::string _rmstag = "default";//this value must be default or tag value, tag in mysqlconnect config file .
|
|
|
|
+ std::vector<unsigned char> _keypos{0x00};
|
|
|
|
+
|
|
|
|
+ std::vector<fortunebase::meta>::iterator begin() { return record.begin(); }
|
|
|
|
+ std::vector<fortunebase::meta>::iterator end() { return record.end(); }
|
|
|
|
+ std::vector<fortunebase::meta>::const_iterator begin() const { return record.begin(); }
|
|
|
|
+ std::vector<fortunebase::meta>::const_iterator end() const { return record.end(); }
|
|
|
|
+ const std::array<std::string, 2> colnames = {"id", "message"};
|
|
|
|
+ const std::array<unsigned char, 2> colnamestype = {3, 253};
|
|
|
|
+ std::string tablename = "fortune";
|
|
|
|
+ std::string modelname = "Fortune";
|
|
|
|
+
|
|
|
|
+ unsigned char findcolpos(const std::string &coln)
|
|
|
|
+ {
|
|
|
|
+ if (coln.size() == 0)
|
|
|
|
+ {
|
|
|
|
+ return 255;
|
|
|
|
+ }
|
|
|
|
+ unsigned char bi = coln[0];
|
|
|
|
+
|
|
|
|
+ if (bi < 91 && bi > 64)
|
|
|
|
+ {
|
|
|
|
+ bi += 32;
|
|
|
|
+ }
|
|
|
|
+ switch (coln[0])
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 'i':
|
|
|
|
+ return 0;
|
|
|
|
+ break;
|
|
|
|
+ case 'm':
|
|
|
|
+ return 1;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ return 255;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ int size() { return record.size(); }
|
|
|
|
+
|
|
|
|
+ void assign_field_value(unsigned char index_pos, unsigned char *result_temp_data, unsigned int value_size, meta &data_temp)
|
|
|
|
+ {
|
|
|
|
+ /*
|
|
|
|
+ unsigned int id = 0; //
|
|
|
|
+ std::string message = "";//
|
|
|
|
+ */
|
|
|
|
+ //bool is_minus = false;
|
|
|
|
+ switch (index_pos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ data_temp.id = 0;
|
|
|
|
+ for (size_t i = 0; i < value_size; i++)
|
|
|
|
+ {
|
|
|
|
+ if (result_temp_data[i] >= '0' && result_temp_data[i] <= '9')
|
|
|
|
+ {
|
|
|
|
+ data_temp.id = data_temp.id * 10 + (result_temp_data[i] - '0');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+
|
|
|
|
+ data_temp.message.clear();
|
|
|
|
+ data_temp.message.resize(value_size);
|
|
|
|
+ for (size_t i = 0; i < value_size; i++)
|
|
|
|
+ {
|
|
|
|
+ data_temp.message[i] = result_temp_data[i];
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string getPKname()
|
|
|
|
+ {
|
|
|
|
+ return "id";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ void record_reset()
|
|
|
|
+ {
|
|
|
|
+ record.clear();
|
|
|
|
+ }
|
|
|
|
+ void data_reset()
|
|
|
|
+ {
|
|
|
|
+ fortunebase::meta metatemp;
|
|
|
|
+ data = metatemp;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql)
|
|
|
|
+ {
|
|
|
|
+ std::string temp;
|
|
|
|
+
|
|
|
|
+ return temp;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ inline std::string stringaddslash(std::string &content)
|
|
|
|
+ {
|
|
std::string temp;
|
|
std::string temp;
|
|
- for(unsigned int i=0;i<content.size();i++){
|
|
|
|
- if(content[i]=='\''){
|
|
|
|
|
|
+ for (unsigned int i = 0; i < content.size(); i++)
|
|
|
|
+ {
|
|
|
|
+ if (content[i] == '\'')
|
|
|
|
+ {
|
|
temp.append("\\'");
|
|
temp.append("\\'");
|
|
continue;
|
|
continue;
|
|
- }else if(content[i]=='"'){
|
|
|
|
|
|
+ }
|
|
|
|
+ else if (content[i] == '"')
|
|
|
|
+ {
|
|
temp.append("\\\"");
|
|
temp.append("\\\"");
|
|
continue;
|
|
continue;
|
|
- }else if(content[i]=='\\'){
|
|
|
|
|
|
+ }
|
|
|
|
+ else if (content[i] == '\\')
|
|
|
|
+ {
|
|
temp.append("\\\\");
|
|
temp.append("\\\\");
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
temp.push_back(content[i]);
|
|
temp.push_back(content[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
return temp;
|
|
- }
|
|
|
|
- inline std::string jsonaddslash(std::string &content){
|
|
|
|
|
|
+ }
|
|
|
|
+ inline std::string jsonaddslash(std::string &content)
|
|
|
|
+ {
|
|
std::string temp;
|
|
std::string temp;
|
|
- for(unsigned int i=0;i<content.size();i++){
|
|
|
|
- if(content[i]=='"'){
|
|
|
|
|
|
+ for (unsigned int i = 0; i < content.size(); i++)
|
|
|
|
+ {
|
|
|
|
+ if (content[i] == '"')
|
|
|
|
+ {
|
|
temp.append("\\\"");
|
|
temp.append("\\\"");
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- else if(content[i]=='\\'){
|
|
|
|
|
|
+ else if (content[i] == '\\')
|
|
|
|
+ {
|
|
temp.append("\\\\");
|
|
temp.append("\\\\");
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
temp.push_back(content[i]);
|
|
temp.push_back(content[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
return temp;
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string _makeinsertsql(){
|
|
|
|
- unsigned int j=0;
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
- tempsql<<"INSERT INTO ";
|
|
|
|
- tempsql<<tablename;
|
|
|
|
- tempsql<<" (";
|
|
|
|
- for(;j<colnames.size();j++){
|
|
|
|
- if(j>0){
|
|
|
|
- tempsql<<"`,`";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"`";
|
|
|
|
- }
|
|
|
|
- tempsql<<colnames[j];
|
|
|
|
- }
|
|
|
|
- if(j>0){
|
|
|
|
- tempsql<<"`";
|
|
|
|
- }
|
|
|
|
- tempsql<<") VALUES (";
|
|
|
|
-
|
|
|
|
- if(data.id==0){
|
|
|
|
-tempsql<<"null";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<std::to_string(data.id);
|
|
|
|
-}
|
|
|
|
-tempsql<<",'"<<stringaddslash(data.message)<<"'";
|
|
|
|
-tempsql<<")";
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return tempsql.str();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string _makerecordinsertsql( meta &insert_data){
|
|
|
|
- unsigned int j=0;
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
- tempsql<<"INSERT INTO ";
|
|
|
|
- tempsql<<tablename;
|
|
|
|
- tempsql<<" (";
|
|
|
|
- for(;j<colnames.size();j++){
|
|
|
|
- if(j>0){
|
|
|
|
- tempsql<<"`,`";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"`";
|
|
|
|
- }
|
|
|
|
- tempsql<<colnames[j];
|
|
|
|
- }
|
|
|
|
- if(j>0){
|
|
|
|
- tempsql<<"`";
|
|
|
|
- }
|
|
|
|
- tempsql<<") VALUES (";
|
|
|
|
-
|
|
|
|
- if(insert_data.id==0){
|
|
|
|
-tempsql<<"null";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<std::to_string(insert_data.id);
|
|
|
|
-}
|
|
|
|
-tempsql<<",'"<<stringaddslash(insert_data.message)<<"'";
|
|
|
|
-tempsql<<")";
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return tempsql.str();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string _makerecordinsertsql( std::vector<meta> &insert_data){
|
|
|
|
- unsigned int j=0;
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
- tempsql<<"INSERT INTO ";
|
|
|
|
- tempsql<<tablename;
|
|
|
|
- tempsql<<" (";
|
|
|
|
- for(;j<colnames.size();j++){
|
|
|
|
- if(j>0){
|
|
|
|
- tempsql<<"`,`";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"`";
|
|
|
|
- }
|
|
|
|
- tempsql<<colnames[j];
|
|
|
|
- }
|
|
|
|
- if(j>0){
|
|
|
|
- tempsql<<"`";
|
|
|
|
- }
|
|
|
|
- tempsql<<") VALUES ";
|
|
|
|
-
|
|
|
|
- for(unsigned int i=0;i<insert_data.size();i++)
|
|
|
|
- {
|
|
|
|
- if(i>0)
|
|
|
|
- {
|
|
|
|
- tempsql<<",";
|
|
|
|
- }
|
|
|
|
- tempsql<<"(";
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if(insert_data[i].id==0){
|
|
|
|
- tempsql<<"null";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<std::to_string(insert_data[i].id);
|
|
|
|
- }
|
|
|
|
- tempsql<<",'"<<stringaddslash(insert_data[i].message)<<"'";
|
|
|
|
- tempsql<<")";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return tempsql.str();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string _makeupdatesql(const std::string &fileld){
|
|
|
|
- //int j=0;
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
- tempsql<<"UPDATE ";
|
|
|
|
- tempsql<<tablename;
|
|
|
|
- tempsql<<" SET ";
|
|
|
|
-
|
|
|
|
- bool isall=false;
|
|
|
|
- if(fileld.empty()){
|
|
|
|
- isall=true;
|
|
|
|
- }
|
|
|
|
- if(isall){
|
|
|
|
-
|
|
|
|
- if(data.id==0){
|
|
|
|
- tempsql<<"`id`=0";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"`id`="<<std::to_string(data.id);
|
|
|
|
-}
|
|
|
|
-tempsql<<",`message`='"<<stringaddslash(data.message)<<"'";
|
|
|
|
- }else{
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- unsigned int jj=0;
|
|
|
|
- std::string keyname;
|
|
|
|
- std::vector<unsigned char> keypos;
|
|
|
|
- for(;jj<fileld.size();jj++){
|
|
|
|
- if(fileld[jj]==','){
|
|
|
|
- unsigned char bpos_i=findcolpos(keyname);
|
|
|
|
- keypos.emplace_back(bpos_i);
|
|
|
|
-#ifdef DEBUG
|
|
|
|
- if (bpos_i == 254)
|
|
|
|
- {
|
|
|
|
- std::cout << "\033[1m\033[31m-----------\n"
|
|
|
|
- << keyname << " not in " << tablename << " table Field.\n-----------\033[0m"
|
|
|
|
- << std::endl;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
- keyname.clear();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if(fileld[jj]==0x20){
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- keyname.push_back(fileld[jj]);
|
|
|
|
|
|
+ std::string _makeinsertsql()
|
|
|
|
+ {
|
|
|
|
+ unsigned int j = 0;
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+ tempsql << "INSERT INTO ";
|
|
|
|
+ tempsql << tablename;
|
|
|
|
+ tempsql << " (";
|
|
|
|
+ for (; j < colnames.size(); j++)
|
|
|
|
+ {
|
|
|
|
+ if (j > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`,`";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`";
|
|
|
|
+ }
|
|
|
|
+ tempsql << colnames[j];
|
|
|
|
+ }
|
|
|
|
+ if (j > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`";
|
|
|
|
+ }
|
|
|
|
+ tempsql << ") VALUES (";
|
|
|
|
|
|
- }
|
|
|
|
- if(keyname.size()>0){
|
|
|
|
- unsigned char bpos_i=findcolpos(keyname);
|
|
|
|
- #ifdef DEBUG
|
|
|
|
- if (bpos_i == 254)
|
|
|
|
- {
|
|
|
|
- std::cout << "\033[1m\033[31m-----------\n"
|
|
|
|
- << keyname << " not in " << tablename << " table Field.\n-----------\033[0m"
|
|
|
|
- << std::endl;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
- keypos.emplace_back(bpos_i);
|
|
|
|
- keyname.clear();
|
|
|
|
- }
|
|
|
|
- for(jj=0;jj<keypos.size();jj++){
|
|
|
|
- switch(keypos[jj]){
|
|
|
|
-
|
|
|
|
- case 0:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-if(data.id==0){
|
|
|
|
- tempsql<<"`id`=0";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"`id`="<<std::to_string(data.id);
|
|
|
|
-}
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-tempsql<<"`message`='"<<stringaddslash(data.message)<<"'";
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- ;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ if (data.id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "null";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << std::to_string(data.id);
|
|
|
|
+ }
|
|
|
|
+ tempsql << ",'" << stringaddslash(data.message) << "'";
|
|
|
|
+ tempsql << ")";
|
|
|
|
|
|
return tempsql.str();
|
|
return tempsql.str();
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string _make_replace_into_sql()
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string _makerecordinsertsql(meta &insert_data)
|
|
{
|
|
{
|
|
unsigned int j = 0;
|
|
unsigned int j = 0;
|
|
std::ostringstream tempsql;
|
|
std::ostringstream tempsql;
|
|
- tempsql << "REPLACE INTO ";
|
|
|
|
|
|
+ tempsql << "INSERT INTO ";
|
|
tempsql << tablename;
|
|
tempsql << tablename;
|
|
tempsql << " (";
|
|
tempsql << " (";
|
|
for (; j < colnames.size(); j++)
|
|
for (; j < colnames.size(); j++)
|
|
@@ -391,28 +226,23 @@ tempsql<<"`message`='"<<stringaddslash(data.message)<<"'";
|
|
{
|
|
{
|
|
tempsql << "`";
|
|
tempsql << "`";
|
|
}
|
|
}
|
|
- tempsql << ") VALUES ";
|
|
|
|
|
|
+ tempsql << ") VALUES (";
|
|
|
|
|
|
- for (unsigned int i = 0; i < record.size(); i++)
|
|
|
|
|
|
+ if (insert_data.id == 0)
|
|
{
|
|
{
|
|
- if (i > 0)
|
|
|
|
- {
|
|
|
|
- tempsql << ",\n";
|
|
|
|
- }
|
|
|
|
- tempsql << "(";
|
|
|
|
- if(record[i].id==0){
|
|
|
|
- tempsql<<"null";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<std::to_string(record[i].id);
|
|
|
|
- }
|
|
|
|
- tempsql<<",'"<<stringaddslash(record[i].message)<<"'";
|
|
|
|
- tempsql<<")";
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- return tempsql.str();
|
|
|
|
-}
|
|
|
|
|
|
+ tempsql << "null";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << std::to_string(insert_data.id);
|
|
|
|
+ }
|
|
|
|
+ tempsql << ",'" << stringaddslash(insert_data.message) << "'";
|
|
|
|
+ tempsql << ")";
|
|
|
|
|
|
- std::string _make_insert_into_sql(const std::string &fileld)
|
|
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string _makerecordinsertsql(std::vector<meta> &insert_data)
|
|
{
|
|
{
|
|
unsigned int j = 0;
|
|
unsigned int j = 0;
|
|
std::ostringstream tempsql;
|
|
std::ostringstream tempsql;
|
|
@@ -437,2251 +267,2528 @@ tempsql<<"`message`='"<<stringaddslash(data.message)<<"'";
|
|
}
|
|
}
|
|
tempsql << ") VALUES ";
|
|
tempsql << ") VALUES ";
|
|
|
|
|
|
- for (unsigned int i = 0; i < record.size(); i++)
|
|
|
|
|
|
+ for (unsigned int i = 0; i < insert_data.size(); i++)
|
|
{
|
|
{
|
|
if (i > 0)
|
|
if (i > 0)
|
|
{
|
|
{
|
|
- tempsql << ",\n";
|
|
|
|
|
|
+ tempsql << ",";
|
|
}
|
|
}
|
|
tempsql << "(";
|
|
tempsql << "(";
|
|
- if(record[i].id==0){
|
|
|
|
- tempsql<<"null";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<std::to_string(record[i].id);
|
|
|
|
- }
|
|
|
|
- tempsql<<",'"<<stringaddslash(record[i].message)<<"'";
|
|
|
|
- tempsql<<")";
|
|
|
|
- }
|
|
|
|
- tempsql<<" as new ON DUPLICATE KEY UPDATE ";
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- std::string keyname;
|
|
|
|
- unsigned char jj=0;
|
|
|
|
- j=0;
|
|
|
|
- if(fileld.size()>0){
|
|
|
|
- for(;jj<fileld.size();jj++){
|
|
|
|
- if(fileld[jj]==','){
|
|
|
|
- if(findcolpos(keyname)<255)
|
|
|
|
- {
|
|
|
|
- if(j>0)
|
|
|
|
- {
|
|
|
|
- tempsql<<",";
|
|
|
|
- }
|
|
|
|
- tempsql<<keyname;
|
|
|
|
- tempsql<<"=new.";
|
|
|
|
- tempsql<<keyname;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if(fileld[jj]==0x20){
|
|
|
|
-
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- keyname.push_back(fileld[jj]);
|
|
|
|
|
|
|
|
- }
|
|
|
|
- if(keyname.size()>0){
|
|
|
|
- if(findcolpos(keyname)<255)
|
|
|
|
- {
|
|
|
|
- if(j>0)
|
|
|
|
- {
|
|
|
|
- tempsql<<",";
|
|
|
|
- }
|
|
|
|
- tempsql<<keyname;
|
|
|
|
- tempsql<<"=new.";
|
|
|
|
- tempsql<<keyname;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ if (insert_data[i].id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "null";
|
|
}
|
|
}
|
|
- }
|
|
|
|
-
|
|
|
|
- return tempsql.str();
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
- std::vector<std::string> data_toarray(std::string fileld=""){
|
|
|
|
- std::vector<std::string> temparray;
|
|
|
|
- std::string keyname;
|
|
|
|
- unsigned char jj=0;
|
|
|
|
- std::vector<unsigned char> keypos;
|
|
|
|
- if(fileld.size()>1){
|
|
|
|
- for(;jj<fileld.size();jj++){
|
|
|
|
- if(fileld[jj]==','){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if(fileld[jj]==0x20){
|
|
|
|
-
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- keyname.push_back(fileld[jj]);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- if(keyname.size()>0){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- }
|
|
|
|
- }else{
|
|
|
|
- for(jj=0;jj<colnames.size();jj++){
|
|
|
|
- keypos.emplace_back(jj);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for(jj=0;jj<keypos.size();jj++){
|
|
|
|
- switch(keypos[jj]){
|
|
|
|
- case 0:
|
|
|
|
-if(data.id==0){
|
|
|
|
- temparray.push_back("0");
|
|
|
|
- }else{
|
|
|
|
- temparray.push_back(std::to_string(data.id));
|
|
|
|
-}
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- temparray.push_back(data.message);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- ;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return temparray;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::map<std::string,std::string> data_tomap(std::string fileld=""){
|
|
|
|
- std::map<std::string,std::string> tempsql;
|
|
|
|
- std::string keyname;
|
|
|
|
- unsigned char jj=0;
|
|
|
|
- std::vector<unsigned char> keypos;
|
|
|
|
- if(fileld.size()>1){
|
|
|
|
- for(;jj<fileld.size();jj++){
|
|
|
|
- if(fileld[jj]==','){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if(fileld[jj]==0x20){
|
|
|
|
-
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- keyname.push_back(fileld[jj]);
|
|
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << std::to_string(insert_data[i].id);
|
|
|
|
+ }
|
|
|
|
+ tempsql << ",'" << stringaddslash(insert_data[i].message) << "'";
|
|
|
|
+ tempsql << ")";
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- if(keyname.size()>0){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- }
|
|
|
|
- }else{
|
|
|
|
- for(jj=0;jj<colnames.size();jj++){
|
|
|
|
- keypos.emplace_back(jj);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for(jj=0;jj<keypos.size();jj++){
|
|
|
|
- switch(keypos[jj]){
|
|
|
|
- case 0:
|
|
|
|
-if(data.id==0){
|
|
|
|
- tempsql.insert({"id","0"});
|
|
|
|
- }else{
|
|
|
|
- tempsql.insert({"id",std::to_string(data.id)});
|
|
|
|
-}
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- tempsql.insert({"message",data.message});
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- ;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return tempsql;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string data_tojson(){
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
-
|
|
|
|
- tempsql<<"{";
|
|
|
|
-if(data.id==0){
|
|
|
|
- tempsql<<"\"id\":0";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"\"id\":"<<std::to_string(data.id);
|
|
|
|
-}
|
|
|
|
-tempsql<<",\"message\":\""<<http::utf8_to_jsonstring(data.message);
|
|
|
|
-tempsql<<"\"";
|
|
|
|
-tempsql<<"}";
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return tempsql.str();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string data_tojson(std::string fileld){
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
- std::string keyname;
|
|
|
|
- unsigned char jj=0;
|
|
|
|
- std::vector<unsigned char> keypos;
|
|
|
|
- if(fileld.size()>0){
|
|
|
|
- for(;jj<fileld.size();jj++){
|
|
|
|
- if(fileld[jj]==','){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if(fileld[jj]==0x20){
|
|
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- keyname.push_back(fileld[jj]);
|
|
|
|
|
|
+ std::string _makeupdatesql(const std::string &fileld)
|
|
|
|
+ {
|
|
|
|
+ //int j=0;
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+ tempsql << "UPDATE ";
|
|
|
|
+ tempsql << tablename;
|
|
|
|
+ tempsql << " SET ";
|
|
|
|
|
|
- }
|
|
|
|
- if(keyname.size()>0){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- }
|
|
|
|
- }else{
|
|
|
|
- for(jj=0;jj<colnames.size();jj++){
|
|
|
|
- keypos.emplace_back(jj);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- tempsql<<"{";
|
|
|
|
- for(jj=0;jj<keypos.size();jj++){
|
|
|
|
- switch(keypos[jj]){
|
|
|
|
- case 0:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-if(data.id==0){
|
|
|
|
- tempsql<<"\"id\":0";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"\"id\":"<<std::to_string(data.id);
|
|
|
|
-}
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-tempsql<<"\"message\":\""<<http::utf8_to_jsonstring(data.message)<<"\"";
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- ;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- tempsql<<"}";
|
|
|
|
- return tempsql.str();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- void from_json(const std::string &json_content)
|
|
|
|
- {
|
|
|
|
- record.clear();
|
|
|
|
- fortunebase::meta metatemp;
|
|
|
|
- data=metatemp;
|
|
|
|
- unsigned int json_offset=0;
|
|
|
|
- bool isarray=false;
|
|
|
|
- //std::vector<std::string> list_content;
|
|
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
|
|
+ bool isall = false;
|
|
|
|
+ if (fileld.empty())
|
|
|
|
+ {
|
|
|
|
+ isall = true;
|
|
|
|
+ }
|
|
|
|
+ if (isall)
|
|
{
|
|
{
|
|
- if(json_content[json_offset]=='{')
|
|
|
|
|
|
+
|
|
|
|
+ if (data.id == 0)
|
|
{
|
|
{
|
|
- break;
|
|
|
|
|
|
+ tempsql << "`id`=0";
|
|
}
|
|
}
|
|
- if(json_content[json_offset]=='[')
|
|
|
|
|
|
+ else
|
|
{
|
|
{
|
|
- isarray=true;
|
|
|
|
- break;
|
|
|
|
|
|
+ tempsql << "`id`=" << std::to_string(data.id);
|
|
}
|
|
}
|
|
|
|
+ tempsql << ",`message`='" << stringaddslash(data.message) << "'";
|
|
}
|
|
}
|
|
- if(isarray)
|
|
|
|
|
|
+ else
|
|
{
|
|
{
|
|
- json_offset+=1;
|
|
|
|
- std::string json_key_name,json_value_name;
|
|
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
|
|
+
|
|
|
|
+ unsigned int jj = 0;
|
|
|
|
+ std::string keyname;
|
|
|
|
+ std::vector<unsigned char> keypos;
|
|
|
|
+ for (; jj < fileld.size(); jj++)
|
|
{
|
|
{
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
|
|
+ if (fileld[jj] == ',')
|
|
{
|
|
{
|
|
- if(json_content[json_offset]=='{')
|
|
|
|
|
|
+ unsigned char bpos_i = findcolpos(keyname);
|
|
|
|
+ keypos.emplace_back(bpos_i);
|
|
|
|
+#ifdef DEBUG
|
|
|
|
+ if (bpos_i == 254)
|
|
{
|
|
{
|
|
- json_offset+=1;
|
|
|
|
- break;
|
|
|
|
|
|
+ std::cout << "\033[1m\033[31m-----------\n"
|
|
|
|
+ << keyname << " not in " << tablename << " table Field.\n-----------\033[0m"
|
|
|
|
+ << std::endl;
|
|
}
|
|
}
|
|
|
|
+#endif
|
|
|
|
+ keyname.clear();
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
- if(record.size()>0)
|
|
|
|
- {
|
|
|
|
- data=metatemp;
|
|
|
|
- }
|
|
|
|
- if(json_offset>=json_content.size())
|
|
|
|
|
|
+ if (fileld[jj] == 0x20)
|
|
{
|
|
{
|
|
- break;
|
|
|
|
|
|
+
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
|
|
+ keyname.push_back(fileld[jj]);
|
|
|
|
+ }
|
|
|
|
+ if (keyname.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ unsigned char bpos_i = findcolpos(keyname);
|
|
|
|
+#ifdef DEBUG
|
|
|
|
+ if (bpos_i == 254)
|
|
{
|
|
{
|
|
-
|
|
|
|
- if(json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
- {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
- {
|
|
|
|
- unsigned int temp_offset=json_offset;
|
|
|
|
- json_key_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset);
|
|
|
|
- json_offset=temp_offset;
|
|
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
- {
|
|
|
|
- json_offset+=1;
|
|
|
|
- }
|
|
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- if(json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
- {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- if(json_content[json_offset]!=':')
|
|
|
|
- {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
- {
|
|
|
|
- if(json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
- {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- json_offset+=1;
|
|
|
|
- if(json_offset>=json_content.size())
|
|
|
|
- {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- json_value_name.clear();
|
|
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- temp_offset=json_offset;
|
|
|
|
- json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset);
|
|
|
|
- json_offset=temp_offset;
|
|
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
- {
|
|
|
|
- json_offset+=1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- if(json_content[json_offset]!='{'&&json_content[json_offset]!=']')
|
|
|
|
- {
|
|
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
- {
|
|
|
|
- if(json_content[json_offset]==0x5D||json_content[json_offset]==0x7D||json_content[json_offset]==0x22||json_content[json_offset]==0x2C||json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
- {
|
|
|
|
- if(json_content[json_offset]==0x7D)
|
|
|
|
- {
|
|
|
|
- json_offset-=1;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- json_value_name.push_back(json_content[json_offset]);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //////////////////////////
|
|
|
|
- set_val(json_key_name,json_value_name);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ std::cout << "\033[1m\033[31m-----------\n"
|
|
|
|
+ << keyname << " not in " << tablename << " table Field.\n-----------\033[0m"
|
|
|
|
+ << std::endl;
|
|
}
|
|
}
|
|
- record.emplace_back(data);
|
|
|
|
-
|
|
|
|
- json_offset+=1;
|
|
|
|
|
|
+#endif
|
|
|
|
+ keypos.emplace_back(bpos_i);
|
|
|
|
+ keyname.clear();
|
|
}
|
|
}
|
|
- if(record.size()>1)
|
|
|
|
|
|
+ for (jj = 0; jj < keypos.size(); jj++)
|
|
{
|
|
{
|
|
- data=record[0];
|
|
|
|
|
|
+ switch (keypos[jj])
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ if (data.id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`id`=0";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`id`=" << std::to_string(data.id);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "`message`='" << stringaddslash(data.message) << "'";
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- else
|
|
|
|
|
|
+
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string _make_replace_into_sql()
|
|
|
|
+ {
|
|
|
|
+ unsigned int j = 0;
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+ tempsql << "REPLACE INTO ";
|
|
|
|
+ tempsql << tablename;
|
|
|
|
+ tempsql << " (";
|
|
|
|
+ for (; j < colnames.size(); j++)
|
|
{
|
|
{
|
|
- if(json_content[json_offset]=='{')
|
|
|
|
|
|
+ if (j > 0)
|
|
{
|
|
{
|
|
- json_offset+=1;
|
|
|
|
- std::string json_key_name,json_value_name;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
|
|
+ tempsql << "`,`";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`";
|
|
|
|
+ }
|
|
|
|
+ tempsql << colnames[j];
|
|
|
|
+ }
|
|
|
|
+ if (j > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`";
|
|
|
|
+ }
|
|
|
|
+ tempsql << ") VALUES ";
|
|
|
|
+
|
|
|
|
+ for (unsigned int i = 0; i < record.size(); i++)
|
|
|
|
+ {
|
|
|
|
+ if (i > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",\n";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "(";
|
|
|
|
+ if (record[i].id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "null";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << std::to_string(record[i].id);
|
|
|
|
+ }
|
|
|
|
+ tempsql << ",'" << stringaddslash(record[i].message) << "'";
|
|
|
|
+ tempsql << ")";
|
|
|
|
+ }
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string _make_insert_into_sql(const std::string &fileld)
|
|
|
|
+ {
|
|
|
|
+ unsigned int j = 0;
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+ tempsql << "INSERT INTO ";
|
|
|
|
+ tempsql << tablename;
|
|
|
|
+ tempsql << " (";
|
|
|
|
+ for (; j < colnames.size(); j++)
|
|
|
|
+ {
|
|
|
|
+ if (j > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`,`";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`";
|
|
|
|
+ }
|
|
|
|
+ tempsql << colnames[j];
|
|
|
|
+ }
|
|
|
|
+ if (j > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "`";
|
|
|
|
+ }
|
|
|
|
+ tempsql << ") VALUES ";
|
|
|
|
+
|
|
|
|
+ for (unsigned int i = 0; i < record.size(); i++)
|
|
|
|
+ {
|
|
|
|
+ if (i > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",\n";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "(";
|
|
|
|
+ if (record[i].id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "null";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << std::to_string(record[i].id);
|
|
|
|
+ }
|
|
|
|
+ tempsql << ",'" << stringaddslash(record[i].message) << "'";
|
|
|
|
+ tempsql << ")";
|
|
|
|
+ }
|
|
|
|
+ tempsql << " as new ON DUPLICATE KEY UPDATE ";
|
|
|
|
+
|
|
|
|
+ std::string keyname;
|
|
|
|
+ unsigned char jj = 0;
|
|
|
|
+ j = 0;
|
|
|
|
+ if (fileld.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ for (; jj < fileld.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ if (fileld[jj] == ',')
|
|
{
|
|
{
|
|
-
|
|
|
|
- if(json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
|
|
+ if (findcolpos(keyname) < 255)
|
|
|
|
+ {
|
|
|
|
+ if (j > 0)
|
|
{
|
|
{
|
|
- continue;
|
|
|
|
|
|
+ tempsql << ",";
|
|
}
|
|
}
|
|
- else
|
|
|
|
|
|
+ tempsql << keyname;
|
|
|
|
+ tempsql << "=new.";
|
|
|
|
+ tempsql << keyname;
|
|
|
|
+ }
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (fileld[jj] == 0x20)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ keyname.push_back(fileld[jj]);
|
|
|
|
+ }
|
|
|
|
+ if (keyname.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ if (findcolpos(keyname) < 255)
|
|
|
|
+ {
|
|
|
|
+ if (j > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ tempsql << keyname;
|
|
|
|
+ tempsql << "=new.";
|
|
|
|
+ tempsql << keyname;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::vector<std::string> data_toarray(std::string fileld = "")
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::string> temparray;
|
|
|
|
+ std::string keyname;
|
|
|
|
+ unsigned char jj = 0;
|
|
|
|
+ std::vector<unsigned char> keypos;
|
|
|
|
+ if (fileld.size() > 1)
|
|
|
|
+ {
|
|
|
|
+ for (; jj < fileld.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ if (fileld[jj] == ',')
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (fileld[jj] == 0x20)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ keyname.push_back(fileld[jj]);
|
|
|
|
+ }
|
|
|
|
+ if (keyname.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ for (jj = 0; jj < colnames.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(jj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (jj = 0; jj < keypos.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ switch (keypos[jj])
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ if (data.id == 0)
|
|
|
|
+ {
|
|
|
|
+ temparray.push_back("0");
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ temparray.push_back(std::to_string(data.id));
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ temparray.push_back(data.message);
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return temparray;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::map<std::string, std::string> data_tomap(std::string fileld = "")
|
|
|
|
+ {
|
|
|
|
+ std::map<std::string, std::string> tempsql;
|
|
|
|
+ std::string keyname;
|
|
|
|
+ unsigned char jj = 0;
|
|
|
|
+ std::vector<unsigned char> keypos;
|
|
|
|
+ if (fileld.size() > 1)
|
|
|
|
+ {
|
|
|
|
+ for (; jj < fileld.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ if (fileld[jj] == ',')
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (fileld[jj] == 0x20)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ keyname.push_back(fileld[jj]);
|
|
|
|
+ }
|
|
|
|
+ if (keyname.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ for (jj = 0; jj < colnames.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(jj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (jj = 0; jj < keypos.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ switch (keypos[jj])
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ if (data.id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql.insert({"id", "0"});
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql.insert({"id", std::to_string(data.id)});
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ tempsql.insert({"message", data.message});
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return tempsql;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string data_tojson()
|
|
|
|
+ {
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+
|
|
|
|
+ tempsql << "{";
|
|
|
|
+ if (data.id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":0";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":" << std::to_string(data.id);
|
|
|
|
+ }
|
|
|
|
+ tempsql << ",\"message\":\"" << http::utf8_to_jsonstring(data.message);
|
|
|
|
+ tempsql << "\"";
|
|
|
|
+ tempsql << "}";
|
|
|
|
+
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string data_tojson(std::string fileld)
|
|
|
|
+ {
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+ std::string keyname;
|
|
|
|
+ unsigned char jj = 0;
|
|
|
|
+ std::vector<unsigned char> keypos;
|
|
|
|
+ if (fileld.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ for (; jj < fileld.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ if (fileld[jj] == ',')
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (fileld[jj] == 0x20)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ keyname.push_back(fileld[jj]);
|
|
|
|
+ }
|
|
|
|
+ if (keyname.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ for (jj = 0; jj < colnames.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(jj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tempsql << "{";
|
|
|
|
+ for (jj = 0; jj < keypos.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ switch (keypos[jj])
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ if (data.id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":0";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":" << std::to_string(data.id);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "\"message\":\"" << http::utf8_to_jsonstring(data.message) << "\"";
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tempsql << "}";
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ void from_json(const std::string &json_content)
|
|
|
|
+ {
|
|
|
|
+ record.clear();
|
|
|
|
+ fortunebase::meta metatemp;
|
|
|
|
+ data = metatemp;
|
|
|
|
+ unsigned int json_offset = 0;
|
|
|
|
+ bool isarray = false;
|
|
|
|
+ //std::vector<std::string> list_content;
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == '{')
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (json_content[json_offset] == '[')
|
|
|
|
+ {
|
|
|
|
+ isarray = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (isarray)
|
|
|
|
+ {
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ std::string json_key_name, json_value_name;
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == '{')
|
|
|
|
+ {
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (record.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ data = metatemp;
|
|
|
|
+ }
|
|
|
|
+ if (json_offset >= json_content.size())
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ if (json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
{
|
|
{
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
|
|
+ unsigned int temp_offset = json_offset;
|
|
|
|
+ json_key_name = http::jsonstring_to_utf8(&json_content[json_offset], json_content.size() - json_offset, temp_offset);
|
|
|
|
+ json_offset = temp_offset;
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
{
|
|
{
|
|
- unsigned int temp_offset=json_offset;
|
|
|
|
- json_key_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset);
|
|
|
|
- json_offset=temp_offset;
|
|
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
- {
|
|
|
|
- json_offset+=1;
|
|
|
|
- }
|
|
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- if(json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
- {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- if(json_content[json_offset]!=':')
|
|
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ }
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ if (json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
{
|
|
{
|
|
- break;
|
|
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
- {
|
|
|
|
- if(json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
- {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- json_offset+=1;
|
|
|
|
- if(json_offset>=json_content.size())
|
|
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (json_content[json_offset] != ':')
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
{
|
|
{
|
|
- break;
|
|
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
- json_value_name.clear();
|
|
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ if (json_offset >= json_content.size())
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ json_value_name.clear();
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ temp_offset = json_offset;
|
|
|
|
+ json_value_name = http::jsonstring_to_utf8(&json_content[json_offset], json_content.size() - json_offset, temp_offset);
|
|
|
|
+ json_offset = temp_offset;
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
{
|
|
{
|
|
-
|
|
|
|
- temp_offset=json_offset;
|
|
|
|
- json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset);
|
|
|
|
- json_offset=temp_offset;
|
|
|
|
- if(json_content[json_offset]==0x22)
|
|
|
|
- {
|
|
|
|
- json_offset+=1;
|
|
|
|
- }
|
|
|
|
|
|
+ json_offset += 1;
|
|
}
|
|
}
|
|
- else
|
|
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] != '{' && json_content[json_offset] != ']')
|
|
{
|
|
{
|
|
- if(json_content[json_offset]!='{'&&json_content[json_offset]!=']')
|
|
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
{
|
|
{
|
|
- for(;json_offset<json_content.size();json_offset++)
|
|
|
|
|
|
+ if (json_content[json_offset] == 0x5D || json_content[json_offset] == 0x7D || json_content[json_offset] == 0x22 || json_content[json_offset] == 0x2C || json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
{
|
|
{
|
|
- if(json_content[json_offset]==0x5D||json_content[json_offset]==0x7D||json_content[json_offset]==0x22||json_content[json_offset]==0x2C||json_content[json_offset]==0x20||json_content[json_offset]==0x0A||json_content[json_offset]==0x0D||json_content[json_offset]=='\t')
|
|
|
|
|
|
+ if (json_content[json_offset] == 0x7D)
|
|
{
|
|
{
|
|
- if(json_content[json_offset]==0x7D)
|
|
|
|
- {
|
|
|
|
- json_offset-=1;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
|
|
+ json_offset -= 1;
|
|
}
|
|
}
|
|
- json_value_name.push_back(json_content[json_offset]);
|
|
|
|
- }
|
|
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ json_value_name.push_back(json_content[json_offset]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- //////////////////////////
|
|
|
|
- set_val(json_key_name,json_value_name);
|
|
|
|
- continue;
|
|
|
|
}
|
|
}
|
|
- else
|
|
|
|
|
|
+ //////////////////////////
|
|
|
|
+ set_val(json_key_name, json_value_name);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ record.emplace_back(data);
|
|
|
|
+
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ }
|
|
|
|
+ if (record.size() > 1)
|
|
|
|
+ {
|
|
|
|
+ data = record[0];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == '{')
|
|
|
|
+ {
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ std::string json_key_name, json_value_name;
|
|
|
|
+
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ if (json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
|
|
+ {
|
|
|
|
+ unsigned int temp_offset = json_offset;
|
|
|
|
+ json_key_name = http::jsonstring_to_utf8(&json_content[json_offset], json_content.size() - json_offset, temp_offset);
|
|
|
|
+ json_offset = temp_offset;
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
|
|
+ {
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ }
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ if (json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (json_content[json_offset] != ':')
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ if (json_offset >= json_content.size())
|
|
{
|
|
{
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ json_value_name.clear();
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ temp_offset = json_offset;
|
|
|
|
+ json_value_name = http::jsonstring_to_utf8(&json_content[json_offset], json_content.size() - json_offset, temp_offset);
|
|
|
|
+ json_offset = temp_offset;
|
|
|
|
+ if (json_content[json_offset] == 0x22)
|
|
|
|
+ {
|
|
|
|
+ json_offset += 1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] != '{' && json_content[json_offset] != ']')
|
|
|
|
+ {
|
|
|
|
+ for (; json_offset < json_content.size(); json_offset++)
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == 0x5D || json_content[json_offset] == 0x7D || json_content[json_offset] == 0x22 || json_content[json_offset] == 0x2C || json_content[json_offset] == 0x20 || json_content[json_offset] == 0x0A || json_content[json_offset] == 0x0D || json_content[json_offset] == '\t')
|
|
|
|
+ {
|
|
|
|
+ if (json_content[json_offset] == 0x7D)
|
|
|
|
+ {
|
|
|
|
+ json_offset -= 1;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ json_value_name.push_back(json_content[json_offset]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //////////////////////////
|
|
|
|
+ set_val(json_key_name, json_value_name);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ }
|
|
}
|
|
}
|
|
record.emplace_back(data);
|
|
record.emplace_back(data);
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- void set_val(const std::string& set_key_name,const std::string& set_value_name)
|
|
|
|
- {
|
|
|
|
- switch(findcolpos(set_key_name))
|
|
|
|
- {
|
|
|
|
- case 0:
|
|
|
|
- try{
|
|
|
|
- data.id=std::stoul(set_value_name);
|
|
|
|
- }catch (...) {
|
|
|
|
- data.id=0;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- try{
|
|
|
|
- data.message.append(set_value_name);
|
|
|
|
- }catch (...) {
|
|
|
|
- data.message.clear();
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- { }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- void set_val(const std::string& set_key_name,const long long set_value_name)
|
|
|
|
- {
|
|
|
|
- switch(findcolpos(set_key_name))
|
|
|
|
- {
|
|
|
|
- case 0:
|
|
|
|
- try{
|
|
|
|
- data.id=set_value_name;
|
|
|
|
- }catch (...) {
|
|
|
|
- data.id=0;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- try{
|
|
|
|
- data.message=std::to_string(set_value_name);
|
|
|
|
- }catch (...) {
|
|
|
|
- data.message.clear();
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- { }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- void set_val(const std::string& set_key_name,const double set_value_name)
|
|
|
|
- {
|
|
|
|
- switch(findcolpos(set_key_name))
|
|
|
|
- {
|
|
|
|
- case 0:
|
|
|
|
- try{
|
|
|
|
- data.id=(unsigned int)set_value_name;
|
|
|
|
- }catch (...) {
|
|
|
|
- data.id=0;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- try{
|
|
|
|
- data.message=std::to_string(set_value_name);
|
|
|
|
- }catch (...) {
|
|
|
|
- data.message.clear();
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- { }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string to_json(std::string fileld=""){
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
- std::string keyname;
|
|
|
|
- unsigned char jj=0;
|
|
|
|
- std::vector<unsigned char> keypos;
|
|
|
|
- if(fileld.size()>0){
|
|
|
|
- for(;jj<fileld.size();jj++){
|
|
|
|
- if(fileld[jj]==','){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if(fileld[jj]==0x20){
|
|
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- keyname.push_back(fileld[jj]);
|
|
|
|
|
|
+ void set_val(const std::string &set_key_name, const std::string &set_value_name)
|
|
|
|
+ {
|
|
|
|
+ switch (findcolpos(set_key_name))
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ data.id = std::stoul(set_value_name);
|
|
|
|
+ }
|
|
|
|
+ catch (...)
|
|
|
|
+ {
|
|
|
|
+ data.id = 0;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ data.message.append(set_value_name);
|
|
|
|
+ }
|
|
|
|
+ catch (...)
|
|
|
|
+ {
|
|
|
|
+ data.message.clear();
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ void set_val(const std::string &set_key_name, const long long set_value_name)
|
|
|
|
+ {
|
|
|
|
+ switch (findcolpos(set_key_name))
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ data.id = set_value_name;
|
|
|
|
+ }
|
|
|
|
+ catch (...)
|
|
|
|
+ {
|
|
|
|
+ data.id = 0;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ data.message = std::to_string(set_value_name);
|
|
|
|
+ }
|
|
|
|
+ catch (...)
|
|
|
|
+ {
|
|
|
|
+ data.message.clear();
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ void set_val(const std::string &set_key_name, const double set_value_name)
|
|
|
|
+ {
|
|
|
|
+ switch (findcolpos(set_key_name))
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ data.id = (unsigned int)set_value_name;
|
|
|
|
+ }
|
|
|
|
+ catch (...)
|
|
|
|
+ {
|
|
|
|
+ data.id = 0;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ data.message = std::to_string(set_value_name);
|
|
|
|
+ }
|
|
|
|
+ catch (...)
|
|
|
|
+ {
|
|
|
|
+ data.message.clear();
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string to_json(std::string fileld = "")
|
|
|
|
+ {
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+ std::string keyname;
|
|
|
|
+ unsigned char jj = 0;
|
|
|
|
+ std::vector<unsigned char> keypos;
|
|
|
|
+ if (fileld.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ for (; jj < fileld.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ if (fileld[jj] == ',')
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (fileld[jj] == 0x20)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ keyname.push_back(fileld[jj]);
|
|
|
|
+ }
|
|
|
|
+ if (keyname.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ for (jj = 0; jj < colnames.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(jj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tempsql << "[";
|
|
|
|
+ for (size_t n = 0; n < record.size(); n++)
|
|
|
|
+ {
|
|
|
|
+ if (n > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",{";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "{";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (jj = 0; jj < keypos.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ switch (keypos[jj])
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ if (record[n].id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":0";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":" << std::to_string(record[n].id);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "\"message\":\"" << http::utf8_to_jsonstring(record[n].message) << "\"";
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tempsql << "}";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "]";
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string to_json(std::function<bool(std::string &, meta &)> func, std::string fileld = "")
|
|
|
|
+ {
|
|
|
|
+ std::ostringstream tempsql;
|
|
|
|
+ std::string keyname;
|
|
|
|
+ unsigned char jj = 0;
|
|
|
|
+ std::vector<unsigned char> keypos;
|
|
|
|
+ if (fileld.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ for (; jj < fileld.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ if (fileld[jj] == ',')
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (fileld[jj] == 0x20)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ keyname.push_back(fileld[jj]);
|
|
|
|
+ }
|
|
|
|
+ if (keyname.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(findcolpos(keyname));
|
|
|
|
+ keyname.clear();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ for (jj = 0; jj < colnames.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+ keypos.emplace_back(jj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tempsql << "[";
|
|
|
|
+ for (size_t n = 0; n < record.size(); n++)
|
|
|
|
+ {
|
|
|
|
+ keyname.clear();
|
|
|
|
+ if (func(keyname, record[n]))
|
|
|
|
+ {
|
|
|
|
+ if (n > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",{";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "{";
|
|
|
|
+ }
|
|
|
|
+ tempsql << keyname;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (jj = 0; jj < keypos.size(); jj++)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ switch (keypos[jj])
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ if (record[n].id == 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":0";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ tempsql << "\"id\":" << std::to_string(record[n].id);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ if (jj > 0)
|
|
|
|
+ {
|
|
|
|
+ tempsql << ",";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "\"message\":\"" << http::utf8_to_jsonstring(record[n].message) << "\"";
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tempsql << "}";
|
|
|
|
+ }
|
|
|
|
+ tempsql << "]";
|
|
|
|
+ return tempsql.str();
|
|
|
|
+ }
|
|
|
|
+ long long getPK() { return data.id; }
|
|
|
|
+ void setPK(long long val) { data.id = val; }
|
|
|
|
+ unsigned int getId() { return data.id; }
|
|
|
|
+ void setId(unsigned int val) { data.id = val; }
|
|
|
|
+
|
|
|
|
+ std::string getMessage() { return data.message; }
|
|
|
|
+ std::string &getRefMessage() { return std::ref(data.message); }
|
|
|
|
+ void setMessage(std::string &val) { data.message = val; }
|
|
|
|
+ void setMessage(std::string_view val) { data.message = val; }
|
|
|
|
+
|
|
|
|
+ fortunebase::meta getnewData()
|
|
|
|
+ {
|
|
|
|
+ struct meta newdata;
|
|
|
|
+ return newdata;
|
|
|
|
+ }
|
|
|
|
+ fortunebase::meta getData()
|
|
|
|
+ {
|
|
|
|
+ return data;
|
|
|
|
+ }
|
|
|
|
+ std::vector<fortunebase::meta> getRecord()
|
|
|
|
+ {
|
|
|
|
+ return record;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ T &ref_meta([[maybe_unused]] std::string key_name)
|
|
|
|
+ {
|
|
|
|
+ if (key_name == "message")
|
|
|
|
+ {
|
|
|
|
+ return data.message;
|
|
|
|
+ }
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_integral_v<T>, bool>::type = true>
|
|
|
|
+ T &ref_meta([[maybe_unused]] std::string key_name)
|
|
|
|
+ {
|
|
|
|
+ if (key_name == "id")
|
|
|
|
+ {
|
|
|
|
+ return data.id;
|
|
|
|
+ }
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_floating_point_v<T>, bool>::type = true>
|
|
|
|
+ T &ref_meta([[maybe_unused]] std::string key_name)
|
|
|
|
+ {
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_integral_v<T>, bool>::type = true>
|
|
|
|
+ std::vector<T> getCol([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<T> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a.emplace_back(iter.id);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_floating_point_v<T>, bool>::type = true>
|
|
|
|
+ std::vector<T> getCol([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<T> a;
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_integral_v<T>, bool>::type = true>
|
|
|
|
+ T getVal([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ return data.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_integral_v<T>, bool>::type = true>
|
|
|
|
+ T getVal([[maybe_unused]] fortunebase::meta &iter, [[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ return iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_floating_point_v<T>, bool>::type = true>
|
|
|
|
+ T getVal(std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0.0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_floating_point_v<T>, bool>::type = true>
|
|
|
|
+ T getVal([[maybe_unused]] fortunebase::meta &iter, std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0.0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ std::string getVal(std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ return data.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ std::string getVal([[maybe_unused]] fortunebase::meta &iter, std::string keyname)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ return iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ std::vector<std::string> getCol([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::string> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ a.emplace_back(iter.message);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::string getstrCol(std::string keyname, [[maybe_unused]] bool isyinhao = false)
|
|
|
|
+ {
|
|
|
|
+ std::ostringstream a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ int j = 0;
|
|
|
|
+ if (isyinhao && record.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ a << '"';
|
|
|
|
+ }
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ if (j > 0)
|
|
|
|
+ {
|
|
|
|
+ if (isyinhao)
|
|
|
|
+ {
|
|
|
|
+ a << "\",\"";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ a << ',';
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ a << std::to_string(iter.id);
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ if (isyinhao)
|
|
|
|
+ {
|
|
|
|
+ a << jsonaddslash(iter.message);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ a << iter.message;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ j++;
|
|
|
|
+ }
|
|
|
|
+ if (isyinhao && j > 0)
|
|
|
|
+ {
|
|
|
|
+ a << '"';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a.str();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<std::string, std::string> getCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<std::string, std::string> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ std::string ktemp, vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (ktemp.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ a.emplace(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value, bool>::type = true>
|
|
|
|
+ std::map<std::string, U> getCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<std::string, U> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ std::string ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ if (ktemp.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ a.emplace(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value, bool>::type = true>
|
|
|
|
+ std::map<T, U> getCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, U> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ if (ktemp.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ a.emplace(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::string> getCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::string> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ std::string vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (ktemp.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ a.emplace(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::map<std::string, U> getCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<std::string, U> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ std::string ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (ktemp.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ a.emplace(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::map<T, U> getCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, U> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (ktemp.size() > 0)
|
|
|
|
+ {
|
|
|
|
+ a.emplace(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_integral_v<T>, bool>::type = true>
|
|
|
|
+ std::map<T, meta> getmapRows([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, meta> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ a.emplace(iter.id, iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<std::string, meta> getmapRows([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::map<std::string, meta> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ a.emplace(iter.message, iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ //a.emplace(ktemp,iter);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<std::string, U>> getvecCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<std::string, U>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ std::string ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ a.emplace_back(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<T, U>> getvecCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<T, U>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ a.emplace_back(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<T, U>> getvecCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<T, U>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ a.emplace_back(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<T, U>> getvecCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<T, U>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ a.emplace_back(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<T, U>> getvecCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<T, U>> a;
|
|
|
|
|
|
- }
|
|
|
|
- if(keyname.size()>0){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- }
|
|
|
|
- }else{
|
|
|
|
- for(jj=0;jj<colnames.size();jj++){
|
|
|
|
- keypos.emplace_back(jj);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- tempsql<<"[";
|
|
|
|
- for(size_t n=0;n<record.size();n++){
|
|
|
|
- if(n>0){
|
|
|
|
- tempsql<<",{";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"{";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for(jj=0;jj<keypos.size();jj++){
|
|
|
|
- switch(keypos[jj]){
|
|
|
|
- case 0:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-if(record[n].id==0){
|
|
|
|
- tempsql<<"\"id\":0";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"\"id\":"<<std::to_string(record[n].id);
|
|
|
|
-}
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-tempsql<<"\"message\":\""<<http::utf8_to_jsonstring(record[n].message)<<"\"";
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- ;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- tempsql<<"}";
|
|
|
|
- }
|
|
|
|
- tempsql<<"]";
|
|
|
|
- return tempsql.str();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- std::string to_json(std::function<bool(std::string&,meta&)> func,std::string fileld=""){
|
|
|
|
- std::ostringstream tempsql;
|
|
|
|
- std::string keyname;
|
|
|
|
- unsigned char jj=0;
|
|
|
|
- std::vector<unsigned char> keypos;
|
|
|
|
- if(fileld.size()>0){
|
|
|
|
- for(;jj<fileld.size();jj++){
|
|
|
|
- if(fileld[jj]==','){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if(fileld[jj]==0x20){
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- keyname.push_back(fileld[jj]);
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ a.emplace_back(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- if(keyname.size()>0){
|
|
|
|
- keypos.emplace_back(findcolpos(keyname));
|
|
|
|
- keyname.clear();
|
|
|
|
- }
|
|
|
|
- }else{
|
|
|
|
- for(jj=0;jj<colnames.size();jj++){
|
|
|
|
- keypos.emplace_back(jj);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- tempsql<<"[";
|
|
|
|
- for(size_t n=0;n<record.size();n++){
|
|
|
|
- keyname.clear();
|
|
|
|
- if(func(keyname,record[n])){
|
|
|
|
- if(n>0){
|
|
|
|
- tempsql<<",{";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"{";
|
|
|
|
- }
|
|
|
|
- tempsql<<keyname;
|
|
|
|
- }else{
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for(jj=0;jj<keypos.size();jj++){
|
|
|
|
-
|
|
|
|
- switch(keypos[jj]){
|
|
|
|
- case 0:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-if(record[n].id==0){
|
|
|
|
- tempsql<<"\"id\":0";
|
|
|
|
- }else{
|
|
|
|
- tempsql<<"\"id\":"<<std::to_string(record[n].id);
|
|
|
|
-}
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- if(jj>0){ tempsql<<","; }
|
|
|
|
-tempsql<<"\"message\":\""<<http::utf8_to_jsonstring(record[n].message)<<"\"";
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- ;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- tempsql<<"}";
|
|
|
|
- }
|
|
|
|
- tempsql<<"]";
|
|
|
|
- return tempsql.str();
|
|
|
|
- }
|
|
|
|
- long long getPK(){ return data.id; }
|
|
|
|
- void setPK(long long val){ data.id=val;}
|
|
|
|
-unsigned int getId(){ return data.id; }
|
|
|
|
- void setId(unsigned int val){ data.id=val;}
|
|
|
|
-
|
|
|
|
-std::string getMessage(){ return data.message; }
|
|
|
|
-std::string& getRefMessage(){ return std::ref(data.message); }
|
|
|
|
- void setMessage(std::string &val){ data.message=val;}
|
|
|
|
- void setMessage(std::string_view val){ data.message=val;}
|
|
|
|
-
|
|
|
|
-fortunebase::meta getnewData(){
|
|
|
|
- struct meta newdata;
|
|
|
|
- return newdata;
|
|
|
|
-}
|
|
|
|
-fortunebase::meta getData(){
|
|
|
|
- return data;
|
|
|
|
-}
|
|
|
|
-std::vector<fortunebase::meta> getRecord(){
|
|
|
|
- return record;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true>
|
|
|
|
- T& ref_meta([[maybe_unused]] std::string key_name)
|
|
|
|
- {
|
|
|
|
- if(key_name=="message")
|
|
|
|
- {
|
|
|
|
- return data.message;
|
|
|
|
- }
|
|
|
|
- return nullptr;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_integral_v<T>,bool>::type = true>
|
|
|
|
- T& ref_meta([[maybe_unused]] std::string key_name)
|
|
|
|
- {
|
|
|
|
- if(key_name=="id")
|
|
|
|
- {
|
|
|
|
- return data.id;
|
|
|
|
- }
|
|
|
|
- return nullptr;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_floating_point_v<T>,bool>::type = true >
|
|
|
|
- T& ref_meta([[maybe_unused]] std::string key_name)
|
|
|
|
- {
|
|
|
|
- return nullptr;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_integral_v<T>,bool>::type = true >
|
|
|
|
- std::vector<T> getCol([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
- std::vector<T> a;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
- case 0:
|
|
|
|
- a.emplace_back(iter.id);
|
|
|
|
- break;
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_floating_point_v<T>,bool>::type = true >
|
|
|
|
- std::vector<T> getCol([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
- std::vector<T> a;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_integral_v<T>,bool>::type = true >
|
|
|
|
- T getVal([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<T, U>> getvecCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<T, U>> a;
|
|
|
|
|
|
- case 0:
|
|
|
|
- return data.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_integral_v<T>,bool>::type = true >
|
|
|
|
- T getVal([[maybe_unused]] fortunebase::meta & iter,[[maybe_unused]] std::string keyname)
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- switch(kpos)
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ switch (vpos)
|
|
{
|
|
{
|
|
- case 0:
|
|
|
|
- return iter.id;
|
|
|
|
- break;
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ a.emplace_back(ktemp, vtemp);
|
|
|
|
+ }
|
|
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_floating_point_v<T>,bool>::type = true >
|
|
|
|
- T getVal(std::string keyname)
|
|
|
|
- {
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return 0.0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_floating_point_v<T>,bool>::type = true >
|
|
|
|
- T getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname)
|
|
|
|
- {
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return 0.0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true >
|
|
|
|
- std::string getVal(std::string keyname)
|
|
|
|
- {
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_integral_v<T>, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<T, meta>> getvecRows([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<T, meta>> a;
|
|
|
|
|
|
- case 1:
|
|
|
|
- return data.message;
|
|
|
|
- break;
|
|
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- }
|
|
|
|
- return "";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true >
|
|
|
|
- std::string getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ a.emplace_back(iter.id, iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- return iter.message;
|
|
|
|
- break;
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ std::vector<std::pair<std::string, meta>> getvecRows([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::vector<std::pair<std::string, meta>> a;
|
|
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return "";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true >
|
|
|
|
- std::vector<std::string> getCol([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
- std::vector<std::string> a;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- case 1:
|
|
|
|
- a.emplace_back(iter.message);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ a.emplace_back(iter.message, iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
return a;
|
|
return a;
|
|
}
|
|
}
|
|
-
|
|
|
|
- std::string getstrCol(std::string keyname,[[maybe_unused]] bool isyinhao=false)
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::ostringstream a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- int j=0;
|
|
|
|
- if(isyinhao&&record.size()>0)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
- a<<'"';
|
|
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+
|
|
|
|
+ switch (vpos)
|
|
{
|
|
{
|
|
- if(j>0)
|
|
|
|
- {
|
|
|
|
- if(isyinhao)
|
|
|
|
- {
|
|
|
|
- a<<"\",\"";
|
|
|
|
- }else{
|
|
|
|
- a<<',';
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- a<<std::to_string(iter.id);
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- if(isyinhao){ a<<jsonaddslash(iter.message);
|
|
|
|
- }else{
|
|
|
|
- a<<iter.message;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- j++;
|
|
|
|
- }
|
|
|
|
- if(isyinhao&&j>0){
|
|
|
|
- a<<'"';
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a.str();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<std::string,std::string> getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<std::string,std::string> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- std::string ktemp,vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true, typename std::enable_if<std::is_integral_v<D>, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
|
|
- }
|
|
|
|
- if(ktemp.size()>0)
|
|
|
|
- {
|
|
|
|
- a.emplace(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value,bool>::type = true>
|
|
|
|
- std::map<std::string,U> getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<std::string,U> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- std::string ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ //D vtemp;
|
|
|
|
|
|
- }
|
|
|
|
- if(ktemp.size()>0)
|
|
|
|
- {
|
|
|
|
- a.emplace(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value,bool>::type = true>
|
|
|
|
- std::map<T,U> getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,U> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- if(ktemp.size()>0)
|
|
|
|
- {
|
|
|
|
- a.emplace(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return a;
|
|
return a;
|
|
- }
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::string> getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::string> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- std::string vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true, typename std::enable_if<std::is_same<D, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
|
|
- }
|
|
|
|
- if(ktemp.size()>0)
|
|
|
|
- {
|
|
|
|
- a.emplace(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::map<std::string,U> getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<std::string,U> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- std::string ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ // D dtemp;
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- if(ktemp.size()>0)
|
|
|
|
- {
|
|
|
|
- a.emplace(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return a;
|
|
return a;
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U, typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::map<T,U> getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,U> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
|
|
- }
|
|
|
|
- if(ktemp.size()>0)
|
|
|
|
- {
|
|
|
|
- a.emplace(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_integral_v<T>,bool>::type = true >
|
|
|
|
- std::map<T,meta> getmapRows([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
- std::map<T,meta> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ // D dtemp;
|
|
|
|
+
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
|
|
- case 0:
|
|
|
|
- a.emplace(iter.id,iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true >
|
|
|
|
- std::map<std::string,meta> getmapRows([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
- std::map<std::string,meta> a;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- a.emplace(iter.message,iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- //a.emplace(ktemp,iter);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
return a;
|
|
return a;
|
|
}
|
|
}
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value,bool>::type = true>
|
|
|
|
- std::vector<std::pair<std::string,U>> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<D>, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ // D dtemp;
|
|
|
|
+
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::vector<std::pair<std::string,U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- std::string ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- a.emplace_back(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value,bool>::type = true>
|
|
|
|
- std::vector<std::pair<T,U>> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::vector<std::pair<T,U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- a.emplace_back(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<D, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
|
|
-
|
|
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ // D dtemp;
|
|
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true>
|
|
|
|
- std::vector<std::pair<T,U>> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::vector<std::pair<T,U>> a;
|
|
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- a.emplace_back(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::vector<std::pair<T,U>> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::vector<std::pair<T,U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- a.emplace_back(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U, typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::vector<std::pair<T,U>> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::vector<std::pair<T,U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- a.emplace_back(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true>
|
|
|
|
- std::vector<std::pair<T,U>> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::vector<std::pair<T,U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- switch(vpos){
|
|
|
|
-case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- a.emplace_back(ktemp,vtemp);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T, typename std::enable_if<std::is_integral_v<T>,bool>::type = true >
|
|
|
|
- std::vector<std::pair<T,meta>> getvecRows([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
- std::vector<std::pair<T,meta>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ //D vtemp;
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- a.emplace_back(iter.id,iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true, typename std::enable_if<std::is_integral_v<D>, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ //D vtemp;
|
|
|
|
+
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true, typename std::enable_if<std::is_same<D, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ // D dtemp;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
- template<typename T, typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true >
|
|
|
|
- std::vector<std::pair<std::string,meta>> getvecRows([[maybe_unused]] std::string keyname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::vector<std::pair<std::string,meta>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 1:
|
|
|
|
- a.emplace_back(iter.message,iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ vtemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
return a;
|
|
return a;
|
|
}
|
|
}
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch(dpos){
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ // D dtemp;
|
|
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true, typename std::enable_if<std::is_integral_v<D>,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- //D vtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
- break;
|
|
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true, typename std::enable_if<std::is_same<D,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- // D dtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<D>, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ U vtemp;
|
|
|
|
+ // D dtemp;
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
- break;
|
|
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- // D dtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true, typename std::enable_if<std::is_integral_v<D>,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<D, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname, [[maybe_unused]] std::string dataname)
|
|
{
|
|
{
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
|
|
+ std::map<T, std::map<U, std::vector<D>>> a;
|
|
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
|
|
+ unsigned char kpos, vpos, dpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ dpos = findcolpos(dataname);
|
|
T ktemp;
|
|
T ktemp;
|
|
U vtemp;
|
|
U vtemp;
|
|
- // D dtemp;
|
|
|
|
|
|
+ // D dtemp;
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
- break;
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ vtemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ switch (dpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
return a;
|
|
return a;
|
|
}
|
|
}
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true, typename std::enable_if<std::is_same<D,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- // D dtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::vector<U>> a;
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ //U vtemp;
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
- break;
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- //D vtemp;
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp].emplace_back(iter.message);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::vector<U>> a;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ //U vtemp;
|
|
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true, typename std::enable_if<std::is_integral_v<D>,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- //D vtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
- break;
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true, typename std::enable_if<std::is_same<D,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
{
|
|
{
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
|
|
+ std::map<T, std::vector<U>> a;
|
|
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
T ktemp;
|
|
T ktemp;
|
|
- U vtemp;
|
|
|
|
- // D dtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ //U vtemp;
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- vtemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
- break;
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp].emplace_back(iter.id);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true, typename std::enable_if<std::is_floating_point<D>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::vector<U>> a;
|
|
|
|
+
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ //U vtemp;
|
|
|
|
+
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- // D dtemp;
|
|
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp].emplace_back(iter.message);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_floating_point<U>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::vector<U>> a;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ //U vtemp;
|
|
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true, typename std::enable_if<std::is_integral_v<D>,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- // D dtemp;
|
|
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch(dpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.id);
|
|
|
|
- break;
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true, typename std::enable_if<std::is_same<D,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<D>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos,dpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- dpos=findcolpos(dataname);
|
|
|
|
- T ktemp;
|
|
|
|
- U vtemp;
|
|
|
|
- // D dtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- vtemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::vector<U>> a;
|
|
|
|
|
|
- switch(dpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp][vtemp].emplace_back(iter.message);
|
|
|
|
- break;
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+ //U vtemp;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::vector<U>> a;
|
|
|
|
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- //U vtemp;
|
|
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (vpos)
|
|
{
|
|
{
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp].emplace_back(iter.id);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_integral_v<T>, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<meta>> getgroupRows([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::vector<meta>> a;
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp].emplace_back(iter.message);
|
|
|
|
- break;
|
|
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_floating_point<U>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::vector<U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- //U vtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ a[iter.id].emplace_back(iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
|
|
+ template <typename T, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::vector<meta>> getgroupRows([[maybe_unused]] std::string keyname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::vector<meta>> a;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ unsigned char kpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::vector<U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- //U vtemp;
|
|
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp].emplace_back(iter.id);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::vector<U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- //U vtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ a[iter.message].emplace_back(iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp].emplace_back(iter.message);
|
|
|
|
- break;
|
|
|
|
|
|
+ template <typename T, typename U, typename D, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> a;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_floating_point<U>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::vector<U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- //U vtemp;
|
|
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp][iter.message].emplace_back(iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<U>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::vector<U>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
- //U vtemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_same<T, std::string>::value, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> a;
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp].emplace_back(iter.id);
|
|
|
|
- break;
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename std::enable_if<std::is_integral_v<T>,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<meta>> getgroupRows([[maybe_unused]] std::string keyname)
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::vector<meta>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- case 0:
|
|
|
|
- a[iter.id].emplace_back(iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ case 1:
|
|
|
|
+ ktemp = iter.message;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp][iter.id].emplace_back(iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
- template<typename T,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::vector<meta>> getgroupRows([[maybe_unused]] std::string keyname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::vector<meta>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- a[iter.message].emplace_back(iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<U>, bool>::type = true, typename std::enable_if<std::is_integral_v<U>, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> a;
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename D,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true, typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
|
|
+ T ktemp;
|
|
|
|
+
|
|
|
|
+ for (auto &iter : record)
|
|
{
|
|
{
|
|
- std::map<T,std::map<U,std::vector<meta>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
|
|
|
|
- for(auto &iter:record)
|
|
|
|
|
|
+ switch (kpos)
|
|
{
|
|
{
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp][iter.message].emplace_back(iter);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_same<T,std::string>::value,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<meta>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- case 1:
|
|
|
|
- ktemp=iter.message;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ a[ktemp][iter.id].emplace_back(iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp][iter.id].emplace_back(iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ template <typename T, typename U, typename std::enable_if<std::is_integral_v<T>, bool>::type = true, typename std::enable_if<std::is_same<U, std::string>::value, bool>::type = true>
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname, [[maybe_unused]] std::string valname)
|
|
|
|
+ {
|
|
|
|
+ std::map<T, std::map<U, std::vector<meta>>> a;
|
|
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<U>,bool>::type = true,typename std::enable_if<std::is_integral_v<U>,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<meta>>> a;
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
|
|
+ unsigned char kpos, vpos;
|
|
|
|
+ kpos = findcolpos(keyname);
|
|
|
|
+ vpos = findcolpos(valname);
|
|
T ktemp;
|
|
T ktemp;
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 0:
|
|
|
|
- a[ktemp][iter.id].emplace_back(iter);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename T,typename U,typename std::enable_if<std::is_integral_v<T>,bool>::type = true,typename std::enable_if<std::is_same<U,std::string>::value,bool>::type = true>
|
|
|
|
- std::map<T,std::map<U,std::vector<meta>>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname)
|
|
|
|
- {
|
|
|
|
- std::map<T,std::map<U,std::vector<meta>>> a;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- unsigned char kpos,vpos;
|
|
|
|
- kpos=findcolpos(keyname);
|
|
|
|
- vpos=findcolpos(valname);
|
|
|
|
- T ktemp;
|
|
|
|
-
|
|
|
|
- for(auto &iter:record)
|
|
|
|
- {
|
|
|
|
-
|
|
|
|
- switch(kpos)
|
|
|
|
- {
|
|
|
|
|
|
+ for (auto &iter : record)
|
|
|
|
+ {
|
|
|
|
|
|
- case 0:
|
|
|
|
- ktemp=iter.id;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ switch (kpos)
|
|
|
|
+ {
|
|
|
|
|
|
- switch(vpos){
|
|
|
|
- case 1:
|
|
|
|
- a[ktemp][iter.message].emplace_back(iter);
|
|
|
|
- break;
|
|
|
|
|
|
+ case 0:
|
|
|
|
+ ktemp = iter.id;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return a;
|
|
|
|
|
|
+ switch (vpos)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ a[ktemp][iter.message].emplace_back(iter);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
+ return a;
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+}// namespace orm
|
|
#endif
|
|
#endif
|
|
-
|
|
|