audio_trans/cmake-build-debug/drogon_ctl/model_cc.cc

2341 lines
118 KiB
C++

//this file is generated by program(drogon_ctl) automatically,don't modify it!
#include "model_cc.h"
#include <drogon/utils/OStringStream.h>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <list>
#include <deque>
#include <queue>
#include "create_model.h"
using namespace drogon_ctl;
using namespace drogon;
std::string model_cc::genText(const DrTemplateData& model_cc_view_data)
{
drogon::OStringStream model_cc_tmp_stream;
std::string layoutName{""};
model_cc_tmp_stream << "/**\n";
model_cc_tmp_stream << " *\n";
model_cc_tmp_stream << " * ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << ".cc\n";
model_cc_tmp_stream << " * DO NOT EDIT. This file is generated by drogon_ctl\n";
model_cc_tmp_stream << " *\n";
model_cc_tmp_stream << " */\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "#include \"";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << ".h\"\n";
std::vector<std::string> relationshipClassNames;
auto &relationships=model_cc_view_data.get<std::vector<Relationship>>("relationships");
auto rdbms=model_cc_view_data.get<std::string>("rdbms");
for(auto &relationship : relationships)
{
if(relationship.type() == Relationship::Type::HasOne ||
relationship.type() == Relationship::Type::HasMany ||
relationship.type() == Relationship::Type::ManyToMany)
{
auto &name=relationship.targetTableName();
auto relationshipClassName=nameTransform(name, true);
auto originalClassName=nameTransform(relationship.originalTableName(),true);
if(relationshipClassName!=originalClassName)
{
relationshipClassNames.push_back(relationshipClassName);
}
}
if(relationship.type() == Relationship::Type::ManyToMany)
{
auto &pivotTableName=relationship.pivotTable().tableName();
auto pivotTableClassName=nameTransform(pivotTableName, true);
relationshipClassNames.push_back(pivotTableClassName);
}
}
std::sort(relationshipClassNames.begin(), relationshipClassNames.end());
relationshipClassNames.erase(std::unique(relationshipClassNames.begin(), relationshipClassNames.end()), relationshipClassNames.end());
for(std::string &relationshipClassName : relationshipClassNames)
{
model_cc_tmp_stream << "#include \"";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ".h\"\n";
}
model_cc_tmp_stream << "#include <drogon/utils/Utilities.h>\n";
auto &convertMethods=model_cc_view_data.get<std::vector<ConvertMethod>>("convertMethods");
for(auto convertMethod : convertMethods ) {
for(auto i : convertMethod.includeFiles()) {
model_cc_tmp_stream<<"#include "<<i<<"\n";
} //for
} //for
model_cc_tmp_stream << "#include <string>\n";
const auto &cols=model_cc_view_data.get<std::vector<ColumnInfo>>("columns");
auto className=model_cc_view_data.get<std::string>("className");
std::string indentStr(model_cc_view_data.get<std::string>("className").length(), ' ');
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "using namespace drogon;\n";
model_cc_tmp_stream << "using namespace drogon::orm;\n";
model_cc_tmp_stream << "using namespace drogon_model::";
{
auto & val=model_cc_view_data["dbName"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
auto &schema=model_cc_view_data.get<std::string>("schema");
if(!schema.empty())
{
model_cc_tmp_stream<<"::"<<schema<<";\n";
}
else
{
model_cc_tmp_stream<<";\n";
}
model_cc_tmp_stream<<"\n";
for(auto col:cols){
model_cc_tmp_stream << "const std::string ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::Cols::_";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << " = \"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\";\n";
}
if(model_cc_view_data.get<int>("hasPrimaryKey")<=1){
model_cc_tmp_stream << "const std::string ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::primaryKeyName = \"";
{
auto & val=model_cc_view_data["primaryKeyName"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "\";\n";
}else{
model_cc_tmp_stream << "const std::vector<std::string> ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::primaryKeyName = {";
auto pkName=model_cc_view_data.get<std::vector<std::string>>("primaryKeyName");
for(size_t i=0;i<pkName.size();i++)
{
model_cc_tmp_stream<<"\""<<pkName[i]<<"\"";
if(i<(pkName.size()-1))
model_cc_tmp_stream<<",";
}
model_cc_tmp_stream << "};\n";
}
if(model_cc_view_data.get<int>("hasPrimaryKey")>0){
model_cc_tmp_stream << "const bool ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::hasPrimaryKey = true;\n";
}else{
model_cc_tmp_stream << "const bool ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::hasPrimaryKey = false;\n";
}
model_cc_tmp_stream << "const std::string ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::tableName = \"";
if(!schema.empty())
{
model_cc_tmp_stream<<schema<<".";
}
{
auto & val=model_cc_view_data["tableName"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "\";\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "const std::vector<typename ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::MetaData> ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::metaData_={\n";
for(size_t i=0;i<cols.size();i++){
auto &col=cols[i];
model_cc_tmp_stream<<"{\""<<col.colName_<<"\",\""<<col.colType_<<"\",\""<<col.colDatabaseType_<<"\","<<col.colLength_<<","<<col.isAutoVal_<<","<<col.isPrimaryKey_<<","<<col.notNull_<<"}";
if(i<(cols.size()-1))
model_cc_tmp_stream<<",\n";
else
model_cc_tmp_stream<<"\n";
}
model_cc_tmp_stream << "};\n";
model_cc_tmp_stream << "const std::string &";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::getColumnName(size_t index) noexcept(false)\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " assert(index < metaData_.size());\n";
model_cc_tmp_stream << " return metaData_[index].colName_;\n";
model_cc_tmp_stream << "}\n";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "(const Row &r, const ssize_t indexOffset) noexcept\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " if(indexOffset < 0)\n";
model_cc_tmp_stream << " {\n";
for(size_t i = 0; i <cols.size(); ++i)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(!r[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"].isNull())\n";
model_cc_tmp_stream << " {\n";
if(col.colDatabaseType_=="date")
{
model_cc_tmp_stream<<" auto daysStr = r[\""<<col.colName_<<"\"].as<std::string>();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" strptime(daysStr.c_str(),\"%Y-%m-%d\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "" ) {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos)
{
model_cc_tmp_stream<<" auto timeStr = r[\""<<col.colName_<<"\"].as<std::string>();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" auto p = strptime(timeStr.c_str(),\"%Y-%m-%d %H:%M:%S\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
model_cc_tmp_stream<<" size_t decimalNum = 0;\n";
model_cc_tmp_stream<<" if(p)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" if(*p=='.')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" std::string decimals(p+1,&timeStr[timeStr.length()]);\n";
model_cc_tmp_stream<<" while(decimals.length()<6)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" decimals += \"0\";\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" decimalNum = (size_t)atol(decimals.c_str());\n";
model_cc_tmp_stream<<" }\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000+decimalNum);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="bytea")
{
model_cc_tmp_stream<<" auto str = r[\""<<col.colName_<<"\"].as<string_view>();\n";
model_cc_tmp_stream<<" if(str.length()>=2&&\n";
model_cc_tmp_stream<<" str[0]=='\\\\'&&str[1]=='x')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::vector<char>>(drogon::utils::hexToBinaryVector(str.data()+2,str.length()-2));\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<col.colValName_;
model_cc_tmp_stream << "_=std::make_shared<";
model_cc_tmp_stream<<col.colType_;
model_cc_tmp_stream << ">(r[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"].as<";
model_cc_tmp_stream<<col.colType_;
model_cc_tmp_stream << ">());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " size_t offset = (size_t)indexOffset;\n";
model_cc_tmp_stream << " if(offset + ";
model_cc_tmp_stream<<cols.size();
model_cc_tmp_stream << " > r.size())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " LOG_FATAL << \"Invalid SQL result for this model\";\n";
model_cc_tmp_stream << " return;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " size_t index;\n";
for(size_t i = 0; i <cols.size(); ++i)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " index = offset + ";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << ";\n";
model_cc_tmp_stream << " if(!r[index].isNull())\n";
model_cc_tmp_stream << " {\n";
if(col.colDatabaseType_=="date")
{
model_cc_tmp_stream<<" auto daysStr = r[index].as<std::string>();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" strptime(daysStr.c_str(),\"%Y-%m-%d\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos)
{
model_cc_tmp_stream<<" auto timeStr = r[index].as<std::string>();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" auto p = strptime(timeStr.c_str(),\"%Y-%m-%d %H:%M:%S\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
model_cc_tmp_stream<<" size_t decimalNum = 0;\n";
model_cc_tmp_stream<<" if(p)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" if(*p=='.')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" std::string decimals(p+1,&timeStr[timeStr.length()]);\n";
model_cc_tmp_stream<<" while(decimals.length()<6)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" decimals += \"0\";\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" decimalNum = (size_t)atol(decimals.c_str());\n";
model_cc_tmp_stream<<" }\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000+decimalNum);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="bytea")
{
model_cc_tmp_stream<<" auto str = r[index].as<string_view>();\n";
model_cc_tmp_stream<<" if(str.length()>=2&&\n";
model_cc_tmp_stream<<" str[0]=='\\\\'&&str[1]=='x')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::vector<char>>(drogon::utils::hexToBinaryVector(str.data()+2,str.length()-2));\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<col.colValName_;
model_cc_tmp_stream << "_=std::make_shared<";
model_cc_tmp_stream<<col.colType_;
model_cc_tmp_stream << ">(r[index].as<";
model_cc_tmp_stream<<col.colType_;
model_cc_tmp_stream << ">());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodAfterDbRead() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodAfterDbRead() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "(const Json::Value &pJson, const std::vector<std::string> &pMasqueradingVector) noexcept(false)\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " if(pMasqueradingVector.size() != ";
model_cc_tmp_stream<<cols.size();
model_cc_tmp_stream << ")\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " LOG_ERROR << \"Bad masquerading vector\";\n";
model_cc_tmp_stream << " return;\n";
model_cc_tmp_stream << " }\n";
for(size_t i=0; i<cols.size(); ++i)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(!pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "].empty() && pJson.isMember(pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]))\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " dirtyFlag_[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "] = true;\n";
if(col.colType_ == "std::string")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::string>(pJson[pMasqueradingVector["<<i<<"]].asString());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="date")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto daysStr = pJson[pMasqueradingVector["<<i<<"]].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" strptime(daysStr.c_str(),\"%Y-%m-%d\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto timeStr = pJson[pMasqueradingVector["<<i<<"]].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" auto p = strptime(timeStr.c_str(),\"%Y-%m-%d %H:%M:%S\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
model_cc_tmp_stream<<" size_t decimalNum = 0;\n";
model_cc_tmp_stream<<" if(p)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" if(*p=='.')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" std::string decimals(p+1,&timeStr[timeStr.length()]);\n";
model_cc_tmp_stream<<" while(decimals.length()<6)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" decimals += \"0\";\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" decimalNum = (size_t)atol(decimals.c_str());\n";
model_cc_tmp_stream<<" }\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000+decimalNum);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="bytea" || col.colDatabaseType_.find("blob") != std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto str = pJson[pMasqueradingVector["<<i<<"]].asString();\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::vector<char>>(drogon::utils::base64DecodeToVector(str));\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("uint") == 0 || col.colType_ == "unsigned short")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[pMasqueradingVector["<<i<<"]].asUInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("int") == 0 || col.colType_ == "short")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[pMasqueradingVector["<<i<<"]].asInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "float")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<float>(pJson[pMasqueradingVector["<<i<<"]].asFloat());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "double")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<double>(pJson[pMasqueradingVector["<<i<<"]].asDouble());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "bool")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<bool>(pJson[pMasqueradingVector["<<i<<"]].asBool());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "(const Json::Value &pJson) noexcept(false)\n";
model_cc_tmp_stream << "{\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(pJson.isMember(\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"))\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " dirtyFlag_[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]=true;\n";
if(col.colType_ == "std::string")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::string>(pJson[\""<<col.colName_<<"\"].asString());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="date")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto daysStr = pJson[\""<<col.colName_<<"\"].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" strptime(daysStr.c_str(),\"%Y-%m-%d\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto timeStr = pJson[\""<<col.colName_<<"\"].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" auto p = strptime(timeStr.c_str(),\"%Y-%m-%d %H:%M:%S\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
model_cc_tmp_stream<<" size_t decimalNum = 0;\n";
model_cc_tmp_stream<<" if(p)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" if(*p=='.')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" std::string decimals(p+1,&timeStr[timeStr.length()]);\n";
model_cc_tmp_stream<<" while(decimals.length()<6)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" decimals += \"0\";\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" decimalNum = (size_t)atol(decimals.c_str());\n";
model_cc_tmp_stream<<" }\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000+decimalNum);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="bytea" || col.colDatabaseType_.find("blob") != std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto str = pJson[\""<<col.colName_<<"\"].asString();\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::vector<char>>(drogon::utils::base64DecodeToVector(str));\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("uint") == 0 || col.colType_ == "unsigned short")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[\""<<col.colName_<<"\"].asUInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("int") == 0 || col.colType_ == "short")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[\""<<col.colName_<<"\"].asInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "float")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<float>(pJson[\""<<col.colName_<<"\"].asFloat());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "double")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<double>(pJson[\""<<col.colName_<<"\"].asDouble());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "bool")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<bool>(pJson[\""<<col.colName_<<"\"].asBool());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::updateByMasqueradedJson(const Json::Value &pJson,\n";
model_cc_tmp_stream << " const std::vector<std::string> &pMasqueradingVector) noexcept(false)\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " if(pMasqueradingVector.size() != ";
model_cc_tmp_stream<<cols.size();
model_cc_tmp_stream << ")\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " LOG_ERROR << \"Bad masquerading vector\";\n";
model_cc_tmp_stream << " return;\n";
model_cc_tmp_stream << " }\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(!pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "].empty() && pJson.isMember(pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]))\n";
model_cc_tmp_stream << " {\n";
if(!col.isAutoVal_ && !col.isPrimaryKey_)
{
model_cc_tmp_stream<<" dirtyFlag_["<<i<<"] = true;\n";
}
if(col.colType_ == "std::string")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::string>(pJson[pMasqueradingVector["<<i<<"]].asString());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="date")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto daysStr = pJson[pMasqueradingVector["<<i<<"]].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" strptime(daysStr.c_str(),\"%Y-%m-%d\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto timeStr = pJson[pMasqueradingVector["<<i<<"]].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" auto p = strptime(timeStr.c_str(),\"%Y-%m-%d %H:%M:%S\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
model_cc_tmp_stream<<" size_t decimalNum = 0;\n";
model_cc_tmp_stream<<" if(p)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" if(*p=='.')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" std::string decimals(p+1,&timeStr[timeStr.length()]);\n";
model_cc_tmp_stream<<" while(decimals.length()<6)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" decimals += \"0\";\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" decimalNum = (size_t)atol(decimals.c_str());\n";
model_cc_tmp_stream<<" }\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000+decimalNum);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="bytea" || col.colDatabaseType_.find("blob") != std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto str = pJson[pMasqueradingVector["<<i<<"]].asString();\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::vector<char>>(drogon::utils::base64DecodeToVector(str));\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("uint") == 0 || col.colType_ == "unsigned short")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[pMasqueradingVector["<<i<<"]].asUInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("int") == 0 || col.colType_ == "short")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[pMasqueradingVector["<<i<<"]].asInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "float")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<float>(pJson[pMasqueradingVector["<<i<<"]].asFloat());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "double")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<double>(pJson[pMasqueradingVector["<<i<<"]].asDouble());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "bool")
{
model_cc_tmp_stream<<" if(!pJson[pMasqueradingVector["<<i<<"]].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<bool>(pJson[pMasqueradingVector["<<i<<"]].asBool());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::updateByJson(const Json::Value &pJson) noexcept(false)\n";
model_cc_tmp_stream << "{\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(pJson.isMember(\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"))\n";
model_cc_tmp_stream << " {\n";
if(!col.isAutoVal_ && !col.isPrimaryKey_)
{
model_cc_tmp_stream<<" dirtyFlag_["<<i<<"] = true;\n";
}
if(col.colType_ == "std::string")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::string>(pJson[\""<<col.colName_<<"\"].asString());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="date")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto daysStr = pJson[\""<<col.colName_<<"\"].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" strptime(daysStr.c_str(),\"%Y-%m-%d\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto timeStr = pJson[\""<<col.colName_<<"\"].asString();\n";
model_cc_tmp_stream<<" struct tm stm;\n";
model_cc_tmp_stream<<" memset(&stm,0,sizeof(stm));\n";
model_cc_tmp_stream<<" auto p = strptime(timeStr.c_str(),\"%Y-%m-%d %H:%M:%S\",&stm);\n";
model_cc_tmp_stream<<" time_t t = mktime(&stm);\n";
model_cc_tmp_stream<<" size_t decimalNum = 0;\n";
model_cc_tmp_stream<<" if(p)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" if(*p=='.')\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" std::string decimals(p+1,&timeStr[timeStr.length()]);\n";
model_cc_tmp_stream<<" while(decimals.length()<6)\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" decimals += \"0\";\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" decimalNum = (size_t)atol(decimals.c_str());\n";
model_cc_tmp_stream<<" }\n";
// model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(::trantor::Date(946656000000000).after(daysNum*86400));\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<::trantor::Date>(t*1000000+decimalNum);\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colDatabaseType_=="bytea" || col.colDatabaseType_.find("blob") != std::string::npos)
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" auto str = pJson[\""<<col.colName_<<"\"].asString();\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<std::vector<char>>(drogon::utils::base64DecodeToVector(str));\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("uint") == 0 || col.colType_ == "unsigned short")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[\""<<col.colName_<<"\"].asUInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_.find("int") == 0 || col.colType_ == "short")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<"<<col.colType_<<">(("<<col.colType_<<")pJson[\""<<col.colName_<<"\"].asInt64());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "float")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<float>(pJson[\""<<col.colName_<<"\"].asFloat());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "double")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<double>(pJson[\""<<col.colName_<<"\"].asDouble());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
else if(col.colType_ == "bool")
{
model_cc_tmp_stream<<" if(!pJson[\""<<col.colName_<<"\"].isNull())\n";
model_cc_tmp_stream<<" {\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_=std::make_shared<bool>(pJson[\""<<col.colName_<<"\"].asBool());\n";
auto convertMethod=std::find_if(convertMethods.begin(),convertMethods.end(),[col](const ConvertMethod& c){ return c.shouldConvert("*", col.colName_); });
if (convertMethod != convertMethods.end() && convertMethod->methodBeforeDbWrite() != "") {
model_cc_tmp_stream<<" "<< convertMethod->methodBeforeDbWrite() << "(" << col.colValName_ << "_);\n";
} //endif
model_cc_tmp_stream<<" }\n";
model_cc_tmp_stream<<" }\n";
continue;
}
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(!col.colType_.empty())
{
model_cc_tmp_stream<<"const "<<col.colType_<<" &"<<className<<"::getValueOf"<<col.colTypeName_<<"() const noexcept\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" const static "<<col.colType_<<" defaultValue = "<<col.colType_<<"();\n";
model_cc_tmp_stream<<" if("<<col.colValName_<<"_)\n";
model_cc_tmp_stream<<" return *"<<col.colValName_<<"_;\n";
model_cc_tmp_stream<<" return defaultValue;\n";
model_cc_tmp_stream<<"}\n";
if(col.colType_=="std::vector<char>")
{
model_cc_tmp_stream<<"std::string "<<className<<"::getValueOf"<<col.colTypeName_<<"AsString() const noexcept\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" const static std::string defaultValue = std::string();\n";
model_cc_tmp_stream<<" if("<<col.colValName_<<"_)\n";
model_cc_tmp_stream<<" return std::string("<<col.colValName_<<"_->data(),"<<col.colValName_<<"_->size());\n";
model_cc_tmp_stream<<" return defaultValue;\n";
model_cc_tmp_stream<<"}\n";
}
model_cc_tmp_stream<<"const std::shared_ptr<"<<col.colType_<<"> &"<<className<<"::get"<<col.colTypeName_<<"() const noexcept\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" return "<<col.colValName_<<"_;\n";
model_cc_tmp_stream<<"}\n";
model_cc_tmp_stream<<"void "<<className<<"::set"<<col.colTypeName_<<"(const "<<col.colType_<<" &p"<<col.colTypeName_<<") noexcept\n";
model_cc_tmp_stream<<"{\n";
if(col.colDatabaseType_=="date")
{
model_cc_tmp_stream<<" "<<col.colValName_<<"_ = std::make_shared<"<<col.colType_<<">(p"<<col.colTypeName_<<".roundDay());\n";
}
else
{
model_cc_tmp_stream<<" "<<col.colValName_<<"_ = std::make_shared<"<<col.colType_<<">(p"<<col.colTypeName_<<");\n";
}
model_cc_tmp_stream<<" dirtyFlag_["<<i<<"] = true;\n";
model_cc_tmp_stream<<"}\n";
if(col.colType_=="std::string")
{
model_cc_tmp_stream<<"void "<<className<<"::set"<<col.colTypeName_<<"("<<col.colType_<<" &&p"<<col.colTypeName_<<") noexcept\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_ = std::make_shared<"<<col.colType_<<">(std::move(p"<<col.colTypeName_<<"));\n";
model_cc_tmp_stream<<" dirtyFlag_["<<i<<"] = true;\n";
model_cc_tmp_stream<<"}\n";
}
if(col.colType_=="std::vector<char>")
{
model_cc_tmp_stream<<"void "<<className<<"::set"<<col.colTypeName_<<"(const std::string &p"<<col.colTypeName_<<") noexcept\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_ = std::make_shared<std::vector<char>>(p"<<col.colTypeName_<<".c_str(),p"<<col.colTypeName_<<".c_str()+p"<<col.colTypeName_<<".length());\n";
model_cc_tmp_stream<<" dirtyFlag_["<<i<<"] = true;\n";
model_cc_tmp_stream<<"}\n";
}
if(!col.notNull_)
{
model_cc_tmp_stream<<"void "<<className<<"::set"<<col.colTypeName_<<"ToNull() noexcept\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" "<<col.colValName_<<"_.reset();\n";
model_cc_tmp_stream<<" dirtyFlag_["<<i<<"] = true;\n";
model_cc_tmp_stream<<"}\n";
}
if(col.isPrimaryKey_&&model_cc_view_data.get<int>("hasPrimaryKey")==1)
{
model_cc_tmp_stream<<"const typename "<<className<<"::PrimaryKeyType & "<<className<<"::getPrimaryKey() const\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" assert("<<col.colValName_<<"_);\n";
model_cc_tmp_stream<<" return *"<<col.colValName_<<"_;\n";
model_cc_tmp_stream<<"}\n";
}
}
model_cc_tmp_stream<<"\n";
}
if(model_cc_view_data.get<std::string>("rdbms")=="postgresql"||model_cc_view_data.get<int>("hasPrimaryKey")!=1)
{
model_cc_tmp_stream<<"void "<<className<<"::updateId(const uint64_t id)\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<"}\n";
}
else if(model_cc_view_data.get<std::string>("rdbms")=="mysql"||model_cc_view_data.get<std::string>("rdbms")=="sqlite3")
{
auto primaryKeyTypeString=model_cc_view_data.get<std::string>("primaryKeyType");
model_cc_tmp_stream<<"void "<<className<<"::updateId(const uint64_t id)\n";
model_cc_tmp_stream<<"{\n";
for(auto col:cols)
{
if(col.isAutoVal_)
{
if(primaryKeyTypeString!="uint64_t")
{
model_cc_tmp_stream<<" "<<col.colValName_<<"_ = std::make_shared<"<<primaryKeyTypeString<<">(static_cast<"<<primaryKeyTypeString<<">(id));\n";
}
else
{
model_cc_tmp_stream<<" "<<col.colValName_<<"_ = std::make_shared<uint64_t>(id);\n";
}
break;
}
}
model_cc_tmp_stream<<"}\n";
}
if(model_cc_view_data.get<int>("hasPrimaryKey")>1)
{
model_cc_tmp_stream<<"typename "<<className<<"::PrimaryKeyType "<<className<<"::getPrimaryKey() const\n";
model_cc_tmp_stream<<"{\n";
model_cc_tmp_stream<<" return std::make_tuple(";
int count=0;
auto pkNames=model_cc_view_data.get<std::vector<std::string>>("primaryKeyValNames");
for(auto pkName:pkNames)
{
++count;
model_cc_tmp_stream<<"*"<<pkName<<"_";
if(count<model_cc_view_data.get<int>("hasPrimaryKey"))
model_cc_tmp_stream<<",";
}
model_cc_tmp_stream<<");\n";
model_cc_tmp_stream<<"}\n";
}
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "const std::vector<std::string> &";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::insertColumns() noexcept\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " static const std::vector<std::string> inCols={\n";
for(size_t i=0;i<cols.size();i++){
auto col=cols[i];
if(!col.isAutoVal_&&!col.colType_.empty())
{
model_cc_tmp_stream<<" \""<<col.colName_<<"\"";
if(i<(cols.size()-1))
model_cc_tmp_stream<<",\n";
else
model_cc_tmp_stream<<"\n";
}
}
model_cc_tmp_stream << " };\n";
model_cc_tmp_stream << " return inCols;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::outputArgs(drogon::orm::internal::SqlBinder &binder) const\n";
model_cc_tmp_stream << "{\n";
for(size_t i = 0; i < cols.size(); ++i){
auto &col = cols[i];
if(!col.isAutoVal_&&!col.colType_.empty())
{
model_cc_tmp_stream << " if(dirtyFlag_[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "])\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " binder << getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " binder << nullptr;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " }\n";
}
}
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "const std::vector<std::string> ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::updateColumns() const\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " std::vector<std::string> ret;\n";
for(size_t i=0;i<cols.size();i++)
{
auto & col=cols[i];
if(col.colType_.empty()||col.isAutoVal_)
continue;
model_cc_tmp_stream << " if(dirtyFlag_[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "])\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ret.push_back(getColumnName(";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "));\n";
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " return ret;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::updateArgs(drogon::orm::internal::SqlBinder &binder) const\n";
model_cc_tmp_stream << "{\n";
for(size_t i=0;i<cols.size();i++)
{
auto & col=cols[i];
if(col.colType_.empty()||col.isAutoVal_)
continue;
model_cc_tmp_stream << " if(dirtyFlag_[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "])\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " binder << getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " binder << nullptr;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream << "Json::Value ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::toJson() const\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " Json::Value ret;\n";
for(auto col:cols){
model_cc_tmp_stream << " if(get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "())\n";
model_cc_tmp_stream << " {\n";
if(col.colDatabaseType_=="date"){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->toDbStringLocal();\n";
}else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->toDbStringLocal();\n";
}else if(col.colDatabaseType_=="bytea"||col.colDatabaseType_.find("blob")!=std::string::npos){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=drogon::utils::base64Encode((const unsigned char *)get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->data(),get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->size());\n";
}else if(col.colType_=="int64_t"){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=(Json::Int64)getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}else if(col.colType_=="uint64_t"){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=(Json::UInt64)getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}else{
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=Json::Value();\n";
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " return ret;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "Json::Value ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::toMasqueradedJson(\n";
model_cc_tmp_stream << " const std::vector<std::string> &pMasqueradingVector) const\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " Json::Value ret;\n";
model_cc_tmp_stream << " if(pMasqueradingVector.size() == ";
model_cc_tmp_stream<<cols.size();
model_cc_tmp_stream << ")\n";
model_cc_tmp_stream << " {\n";
for(size_t i = 0; i < cols.size(); ++i){
auto &col = cols[i];
model_cc_tmp_stream << " if(!pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "].empty())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "())\n";
model_cc_tmp_stream << " {\n";
if(col.colDatabaseType_=="date"){
model_cc_tmp_stream << " ret[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]]=get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->toDbStringLocal();\n";
}else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos){
model_cc_tmp_stream << " ret[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]]=get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->toDbStringLocal();\n";
}else if(col.colDatabaseType_=="bytea"||col.colDatabaseType_.find("blob")!=std::string::npos){
model_cc_tmp_stream << " ret[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]]=drogon::utils::base64Encode((const unsigned char *)get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->data(),get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->size());\n";
}else if(col.colType_=="int64_t"){
model_cc_tmp_stream << " ret[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]]=(Json::Int64)getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}else if(col.colType_=="uint64_t"){
model_cc_tmp_stream << " ret[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]]=(Json::UInt64)getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}else{
model_cc_tmp_stream << " ret[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]]=getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ret[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]]=Json::Value();\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " return ret;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " LOG_ERROR << \"Masquerade failed\";\n";
for(auto col:cols){
model_cc_tmp_stream << " if(get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "())\n";
model_cc_tmp_stream << " {\n";
if(col.colDatabaseType_=="date"){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->toDbStringLocal();\n";
}else if(col.colDatabaseType_.find("timestamp")!=std::string::npos||col.colDatabaseType_.find("datetime")!=std::string::npos){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->toDbStringLocal();\n";
}else if(col.colDatabaseType_=="bytea"||col.colDatabaseType_.find("blob")!=std::string::npos){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=drogon::utils::base64Encode((const unsigned char *)get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->data(),get";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "()->size());\n";
}else if(col.colType_=="int64_t"){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=(Json::Int64)getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}else if(col.colType_=="uint64_t"){
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=(Json::UInt64)getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}else{
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=getValueOf";
model_cc_tmp_stream<<col.colTypeName_;
model_cc_tmp_stream << "();\n";
}
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ret[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"]=Json::Value();\n";
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " return ret;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream<<"\n";
model_cc_tmp_stream << "bool ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::validateJsonForCreation(const Json::Value &pJson, std::string &err)\n";
model_cc_tmp_stream << "{\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(pJson.isMember(\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"))\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(!validJsonOfField(";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << ", \"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\", pJson[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"], err, true))\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
if(col.notNull_ && !col.isAutoVal_ && !col.hasDefaultVal_){
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"The ";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << " column cannot be null\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
}
model_cc_tmp_stream << " return true;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream << "bool ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::validateMasqueradedJsonForCreation(const Json::Value &pJson,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " const std::vector<std::string> &pMasqueradingVector,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " std::string &err)\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " if(pMasqueradingVector.size() != ";
model_cc_tmp_stream<<cols.size();
model_cc_tmp_stream << ")\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err = \"Bad masquerading vector\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " try {\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(!pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "].empty())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(pJson.isMember(pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]))\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(!validJsonOfField(";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << ", pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "], pJson[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]], err, true))\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
if(col.notNull_ && !col.isAutoVal_ && !col.hasDefaultVal_){
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"The \" + pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "] + \" column cannot be null\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " }\n";
}
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " catch(const Json::LogicError &e)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err = e.what();\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " return true;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream << "bool ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::validateJsonForUpdate(const Json::Value &pJson, std::string &err)\n";
model_cc_tmp_stream << "{\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(pJson.isMember(\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"))\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(!validJsonOfField(";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << ", \"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\", pJson[\"";
model_cc_tmp_stream<<col.colName_;
model_cc_tmp_stream << "\"], err, false))\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
if(col.isPrimaryKey_)
{
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err = \"The value of primary key must be set in the json object for update\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
}
model_cc_tmp_stream << " return true;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream << "bool ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::validateMasqueradedJsonForUpdate(const Json::Value &pJson,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " const std::vector<std::string> &pMasqueradingVector,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " std::string &err)\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " if(pMasqueradingVector.size() != ";
model_cc_tmp_stream<<cols.size();
model_cc_tmp_stream << ")\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err = \"Bad masquerading vector\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " try {\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " if(!pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "].empty() && pJson.isMember(pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]))\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " if(!validJsonOfField(";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << ", pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "], pJson[pMasqueradingVector[";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << "]], err, false))\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
if(col.isPrimaryKey_)
{
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err = \"The value of primary key must be set in the json object for update\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
}
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " catch(const Json::LogicError &e)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err = e.what();\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " return true;\n";
model_cc_tmp_stream << "}\n";
model_cc_tmp_stream << "bool ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::validJsonOfField(size_t index,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " const std::string &fieldName,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " const Json::Value &pJson,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " std::string &err,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " bool isForCreation)\n";
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " switch(index)\n";
model_cc_tmp_stream << " {\n";
for(size_t i=0;i<cols.size();i++)
{
auto &col = cols[i];
if(col.colType_.empty())
continue;
model_cc_tmp_stream << " case ";
model_cc_tmp_stream<<i;
model_cc_tmp_stream << ":\n";
if(col.notNull_){
model_cc_tmp_stream << " if(pJson.isNull())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"The \" + fieldName + \" column cannot be null\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
if(col.isAutoVal_)
{
if(col.isPrimaryKey_)
{
model_cc_tmp_stream << " if(isForCreation)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"The automatic primary key cannot be set\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}else
{
model_cc_tmp_stream << " if(isForCreation)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"The automatic primary key cannot be set\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"The automatic primary key cannot be update\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
}
if(!col.notNull_){
model_cc_tmp_stream << " if(pJson.isNull())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " return true;\n";
model_cc_tmp_stream << " }\n";
}
if(col.colType_ == "uint64_t")
{
model_cc_tmp_stream << " if(!pJson.isUInt64())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"Type error in the \"+fieldName+\" field\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
else if(col.colType_ == "int64_t")
{
model_cc_tmp_stream << " if(!pJson.isInt64())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"Type error in the \"+fieldName+\" field\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
else if(col.colType_.find("uint") == 0)
{
model_cc_tmp_stream << " if(!pJson.isUInt())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"Type error in the \"+fieldName+\" field\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
else if(col.colType_.find("int") == 0)
{
model_cc_tmp_stream << " if(!pJson.isInt())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"Type error in the \"+fieldName+\" field\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
else if(col.colType_ == "float" || col.colType_ == "double")
{
model_cc_tmp_stream << " if(!pJson.isNumeric())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"Type error in the \"+fieldName+\" field\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
else if(col.colType_ == "bool")
{
model_cc_tmp_stream << " if(!pJson.isBool())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"Type error in the \"+fieldName+\" field\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
}
else
{
model_cc_tmp_stream << " if(!pJson.isString())\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"Type error in the \"+fieldName+\" field\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
if(col.colType_ == "std::string" && col.colLength_>0)
{
model_cc_tmp_stream << " // asString().length() creates a string object, is there any better way to validate the length?\n";
model_cc_tmp_stream << " if(pJson.isString() && pJson.asString().length() > ";
model_cc_tmp_stream<<col.colLength_;
model_cc_tmp_stream << ")\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " err=\"String length exceeds limit for the \" +\n";
model_cc_tmp_stream << " fieldName +\n";
model_cc_tmp_stream << " \" field (the maximum value is ";
model_cc_tmp_stream<<col.colLength_;
model_cc_tmp_stream << ")\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream<<"\n";
}
}
model_cc_tmp_stream << " break;\n";
}
model_cc_tmp_stream << " default:\n";
model_cc_tmp_stream << " err=\"Internal error in the server\";\n";
model_cc_tmp_stream << " return false;\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " return true;\n";
model_cc_tmp_stream << "}\n";
for(auto &relationship : relationships)
{
if(relationship.targetKey().empty() || relationship.originalKey().empty())
{
continue;
}
auto &name=relationship.targetTableName();
auto relationshipClassName=nameTransform(name, true);
auto relationshipValName=nameTransform(name, false);
auto alias=relationship.targetTableAlias();
auto aliasValName=nameTransform(alias, false);
if(relationship.type() == Relationship::Type::HasOne)
{
if(!alias.empty())
{
if(alias[0] <= 'z' && alias[0] >= 'a')
{
alias[0] += ('A' - 'a');
}
std::string alind(alias.length(), ' ');
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::get";
model_cc_tmp_stream<<alias;
model_cc_tmp_stream << "(const DbClientPtr &clientPtr,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<alind;
model_cc_tmp_stream << " const std::function<void(";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ")> &rcb,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<alind;
model_cc_tmp_stream << " const ExceptionCallback &ecb) const\n";
}
else
{
std::string relationshipClassInde(relationshipClassName.length(), ' ');
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::get";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "(const DbClientPtr &clientPtr,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<relationshipClassInde;
model_cc_tmp_stream << " const std::function<void(";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ")> &rcb,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<relationshipClassInde;
model_cc_tmp_stream << " const ExceptionCallback &ecb) const\n";
}
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " const static std::string sql = \"select * from ";
model_cc_tmp_stream<<name;
model_cc_tmp_stream << " where ";
model_cc_tmp_stream<<relationship.targetKey();
model_cc_tmp_stream << " = ";
if(rdbms=="postgresql")
{
model_cc_tmp_stream<<"$1";
}
else
{
model_cc_tmp_stream<<"?";
}
model_cc_tmp_stream << "\";\n";
model_cc_tmp_stream << " *clientPtr << sql\n";
model_cc_tmp_stream << " << *";
model_cc_tmp_stream<<nameTransform(relationship.originalKey(), false);
model_cc_tmp_stream << "_\n";
model_cc_tmp_stream << " >> [rcb = std::move(rcb), ecb](const Result &r){\n";
model_cc_tmp_stream << " if (r.size() == 0)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ecb(UnexpectedRows(\"0 rows found\"));\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else if (r.size() > 1)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ecb(UnexpectedRows(\"Found more than one row\"));\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " else\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " rcb(";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "(r[0]));\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " >> ecb;\n";
model_cc_tmp_stream << "}\n";
}
else if(relationship.type() == Relationship::Type::HasMany)
{
if(!alias.empty())
{
if(alias[0] <= 'z' && alias[0] >= 'a')
{
alias[0] += ('A' - 'a');
}
std::string alind(alias.length(), ' ');
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::get";
model_cc_tmp_stream<<alias;
model_cc_tmp_stream << "(const DbClientPtr &clientPtr,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<alind;
model_cc_tmp_stream << " const std::function<void(std::vector<";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ">)> &rcb,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<alind;
model_cc_tmp_stream << " const ExceptionCallback &ecb) const\n";
}
else
{
std::string relationshipClassInde(relationshipClassName.length(), ' ');
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::get";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "(const DbClientPtr &clientPtr,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<relationshipClassInde;
model_cc_tmp_stream << " const std::function<void(std::vector<";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ">)> &rcb,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<relationshipClassInde;
model_cc_tmp_stream << " const ExceptionCallback &ecb) const\n";
}
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " const static std::string sql = \"select * from ";
model_cc_tmp_stream<<name;
model_cc_tmp_stream << " where ";
model_cc_tmp_stream<<relationship.targetKey();
model_cc_tmp_stream << " = ";
if(rdbms=="postgresql")
{
model_cc_tmp_stream<<"$1";
}
else
{
model_cc_tmp_stream<<"?";
}
model_cc_tmp_stream << "\";\n";
model_cc_tmp_stream << " *clientPtr << sql\n";
model_cc_tmp_stream << " << *";
model_cc_tmp_stream<<nameTransform(relationship.originalKey(), false);
model_cc_tmp_stream << "_\n";
model_cc_tmp_stream << " >> [rcb = std::move(rcb)](const Result &r){\n";
model_cc_tmp_stream << " std::vector<";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "> ret;\n";
model_cc_tmp_stream << " ret.reserve(r.size());\n";
model_cc_tmp_stream << " for (auto const &row : r)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ret.emplace_back(";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "(row));\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " rcb(ret);\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " >> ecb;\n";
model_cc_tmp_stream << "}\n";
}
else if(relationship.type() == Relationship::Type::ManyToMany)
{
auto &pivotTableName=relationship.pivotTable().tableName();
auto pivotTableClassName=nameTransform(pivotTableName, true);
auto &pivotOriginalKey=relationship.pivotTable().originalKey();
auto &pivotTargetKey=relationship.pivotTable().targetKey();
if(!alias.empty())
{
if(alias[0] <= 'z' && alias[0] >= 'a')
{
alias[0] += ('A' - 'a');
}
std::string alind(alias.length(), ' ');
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::get";
model_cc_tmp_stream<<alias;
model_cc_tmp_stream << "(const DbClientPtr &clientPtr,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<alind;
model_cc_tmp_stream << " const std::function<void(std::vector<std::pair<";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ",";
model_cc_tmp_stream<<pivotTableClassName;
model_cc_tmp_stream << ">>)> &rcb,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<alind;
model_cc_tmp_stream << " const ExceptionCallback &ecb) const\n";
}
else
{
std::string relationshipClassInde(relationshipClassName.length(), ' ');
model_cc_tmp_stream << "void ";
{
auto & val=model_cc_view_data["className"];
if(val.type()==typeid(const char *)){
model_cc_tmp_stream<<*any_cast<const char *>(&val);
}else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){
model_cc_tmp_stream<<*any_cast<const std::string>(&val);
}
}
model_cc_tmp_stream << "::get";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "(const DbClientPtr &clientPtr,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<relationshipClassInde;
model_cc_tmp_stream << " const std::function<void(std::vector<std::pair<";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ",";
model_cc_tmp_stream<<pivotTableClassName;
model_cc_tmp_stream << ">>)> &rcb,\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<indentStr;
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<relationshipClassInde;
model_cc_tmp_stream << " const ExceptionCallback &ecb) const\n";
}
model_cc_tmp_stream << "{\n";
model_cc_tmp_stream << " const static std::string sql = \"select * from ";
model_cc_tmp_stream<<name;
model_cc_tmp_stream << ",";
model_cc_tmp_stream<<pivotTableName;
model_cc_tmp_stream << " where ";
model_cc_tmp_stream<<pivotTableName;
model_cc_tmp_stream << ".";
model_cc_tmp_stream<<pivotOriginalKey;
model_cc_tmp_stream << " = ";
if(rdbms=="postgresql")
{
model_cc_tmp_stream<<"$1";
}
else
{
model_cc_tmp_stream<<"?";
}
model_cc_tmp_stream << " and ";
model_cc_tmp_stream<<pivotTableName;
model_cc_tmp_stream << ".";
model_cc_tmp_stream<<pivotTargetKey;
model_cc_tmp_stream << " = ";
model_cc_tmp_stream<<name;
model_cc_tmp_stream << ".";
model_cc_tmp_stream<<relationship.targetKey();
model_cc_tmp_stream << "\";\n";
model_cc_tmp_stream << " *clientPtr << sql\n";
model_cc_tmp_stream << " << *";
model_cc_tmp_stream<<nameTransform(relationship.originalKey(), false);
model_cc_tmp_stream << "_\n";
model_cc_tmp_stream << " >> [rcb = std::move(rcb)](const Result &r){\n";
model_cc_tmp_stream << " std::vector<std::pair<";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ",";
model_cc_tmp_stream<<pivotTableClassName;
model_cc_tmp_stream << ">> ret;\n";
model_cc_tmp_stream << " ret.reserve(r.size());\n";
model_cc_tmp_stream << " for (auto const &row : r)\n";
model_cc_tmp_stream << " {\n";
model_cc_tmp_stream << " ret.emplace_back(std::pair<";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << ",";
model_cc_tmp_stream<<pivotTableClassName;
model_cc_tmp_stream << ">(\n";
model_cc_tmp_stream << " ";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "(row),";
model_cc_tmp_stream<<pivotTableClassName;
model_cc_tmp_stream << "(row,";
model_cc_tmp_stream<<relationshipClassName;
model_cc_tmp_stream << "::getColumnNumber())));\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " rcb(ret);\n";
model_cc_tmp_stream << " }\n";
model_cc_tmp_stream << " >> ecb;\n";
model_cc_tmp_stream << "}\n";
}
}
if(layoutName.empty())
{
std::string ret{std::move(model_cc_tmp_stream.str())};
return ret;
}else
{
auto templ = DrTemplateBase::newTemplate(layoutName);
if(!templ) return "";
HttpViewData data = model_cc_view_data;
auto str = std::move(model_cc_tmp_stream.str());
if(!str.empty() && str[str.length()-1] == '\n') str.resize(str.length()-1);
data[""] = std::move(str);
return templ->genText(data);
}
}