#include "ParamSetCfgDao.h" #include ParamSetCfgDao::ParamSetCfgDao(SQLite::Database* pdb) : BaseDao(pdb) {} ParamSetCfgDao::~ParamSetCfgDao() {} void ParamSetCfgDao::CreateTable() { if (m_pDB->tableExists(ParamSetCfg::TABLE_NAME))return; char buffer[2048]; memset(buffer, '\0', sizeof(buffer)); string createsql = "CREATE TABLE %s(%s INTEGER PRIMARY KEY,%s VARCHAR(20),%s VARCHAR(20),%s double,%s double,%s double)"; sprintf_s(buffer, sizeof(buffer), createsql.c_str(), ParamSetCfg::TABLE_NAME.c_str(), ParamSetCfg::FIELD_ID.c_str(), ParamSetCfg::FIELD_CONFIG_NAME.c_str(), ParamSetCfg::FIELD_SET_TYPE.c_str(), ParamSetCfg::FIELD_DATA1.c_str(), ParamSetCfg::FIELD_DATA2.c_str(), ParamSetCfg::FIELD_DATA3.c_str() ); SQLite::Transaction transaction(*m_pDB); m_pDB->exec(buffer); vector insertsql; ParamSetCfg::Generate(insertsql); for (size_t i = 0; i < insertsql.size(); ++i) { m_pDB->exec(insertsql[i]); } transaction.commit(); } void ParamSetCfgDao::Find(ParamSetCfg& cfg) { for (auto pps : cfg.ParamSetVec) delete pps; cfg.ParamSetVec.clear(); char buffer[2048]; string strsql = "SELECT DISTINCT %s FROM %s"; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), ParamSetCfg::FIELD_CONFIG_NAME.c_str(), ParamSetCfg::TABLE_NAME.c_str()); SQLite::Statement query(*m_pDB, buffer); while (query.executeStep()) { ParamSetCfg::ParamSet* pps = new ParamSetCfg::ParamSet; pps->ConfigName = query.getColumn(ParamSetCfg::FIELD_CONFIG_NAME.c_str()).getString(); cfg.ParamSetVec.push_back(pps); } for (auto pps : cfg.ParamSetVec) { string strsql = "SELECT %s,%s,%s,%s FROM %s WHERE %s='%s'"; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), ParamSetCfg::FIELD_SET_TYPE.c_str(), ParamSetCfg::FIELD_DATA1.c_str(), ParamSetCfg::FIELD_DATA2.c_str(), ParamSetCfg::FIELD_DATA3.c_str(), ParamSetCfg::TABLE_NAME.c_str(), ParamSetCfg::FIELD_CONFIG_NAME.c_str(), pps->ConfigName.c_str()); SQLite::Statement query(*m_pDB, buffer); while (query.executeStep()) { string set_type = query.getColumn(ParamSetCfg::FIELD_SET_TYPE.c_str()).getString(); if (set_type == "PowderSet") { ParamSetCfg::PowderSet* ps = new ParamSetCfg::PowderSet; ps->start_layer = query.getColumn(ParamSetCfg::FIELD_DATA1.c_str()).getInt(); ps->end_layer = query.getColumn(ParamSetCfg::FIELD_DATA2.c_str()).getInt(); ps->powder = query.getColumn(ParamSetCfg::FIELD_DATA3.c_str()).getDouble(); pps->PowderSets.push_back(ps); } else { ParamSetCfg::LaserSet* pls = new ParamSetCfg::LaserSet; pls->laser_speed = query.getColumn(ParamSetCfg::FIELD_DATA1.c_str()).getDouble(); pls->laser_diameter = query.getColumn(ParamSetCfg::FIELD_DATA2.c_str()).getDouble(); pls->laser_power = query.getColumn(ParamSetCfg::FIELD_DATA3.c_str()).getDouble(); pps->LaserSetMap[set_type] = pls; } } } } void ParamSetCfgDao::Save(ParamSetCfg& cfg) { char buffer[512]; sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s", ParamSetCfg::TABLE_NAME.c_str()); m_pDB->exec(string(buffer)); string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES("; sprintf_s(buffer, sizeof(buffer), strtemp.c_str(), ParamSetCfg::TABLE_NAME.c_str(), ParamSetCfg::FIELD_CONFIG_NAME.c_str(), ParamSetCfg::FIELD_SET_TYPE.c_str(), ParamSetCfg::FIELD_DATA1.c_str(), ParamSetCfg::FIELD_DATA2.c_str(), ParamSetCfg::FIELD_DATA3.c_str()); string strsql = string(buffer) + "'%s','%s',%f,%f,%f)"; for (auto pps : cfg.ParamSetVec) { std::map::iterator it; for (it = pps->LaserSetMap.begin(); it != pps->LaserSetMap.end(); it++) { if (it->second == nullptr) continue; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), pps->ConfigName.c_str(), it->first.c_str(), it->second->laser_speed, it->second->laser_diameter, it->second->laser_power); m_pDB->exec(string(buffer)); } for (unsigned int i = 0; i < pps->PowderSets.size(); i++) { ParamSetCfg::PowderSet* ps = pps->PowderSets[i]; if (ps == nullptr) continue; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), pps->ConfigName.c_str(), "PowderSet", (double)ps->start_layer, (double)ps->end_layer, (double)ps->powder); m_pDB->exec(string(buffer)); } } } void ParamSetCfgDao::Export(ParamSetCfg &cfg, stringstream &sql) { char buffer[512]; sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s", ParamSetCfg::TABLE_NAME.c_str()); sql<< string(buffer) << "\n"; string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES("; sprintf_s(buffer, sizeof(buffer), strtemp.c_str(), ParamSetCfg::TABLE_NAME.c_str(), ParamSetCfg::FIELD_CONFIG_NAME.c_str(), ParamSetCfg::FIELD_SET_TYPE.c_str(), ParamSetCfg::FIELD_DATA1.c_str(), ParamSetCfg::FIELD_DATA2.c_str(), ParamSetCfg::FIELD_DATA3.c_str()); string strsql = string(buffer) + "'%s','%s',%f,%f,%f)"; for (auto pps : cfg.ParamSetVec) { std::map::iterator it; for (it = pps->LaserSetMap.begin(); it != pps->LaserSetMap.end(); it++) { sprintf_s(buffer, sizeof(buffer), strsql.c_str(), pps->ConfigName.c_str(), it->first.c_str(), it->second->laser_speed, it->second->laser_diameter, it->second->laser_power); sql << string(buffer) << "\n"; } for (unsigned int i = 0; i < pps->PowderSets.size(); i++) { ParamSetCfg::PowderSet* ps = pps->PowderSets[i]; if (ps == nullptr) continue; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), pps->ConfigName.c_str(), "PowderSet", (double)ps->start_layer, (double)ps->end_layer, (double)ps->powder); sql << string(buffer) << "\n"; } } } void ParamSetCfgDao::Import(ParamSetCfg &cfg, string &sql) { std::stringstream ss(sql); string cmd; std::getline(ss, cmd); if (cmd.find(ParamSetCfg::TABLE_NAME) == string::npos) return; do { m_pDB->exec(cmd); } while (std::getline(ss, cmd)); for (auto pps : cfg.ParamSetVec) { std::map::iterator it; for (it = pps->LaserSetMap.begin(); it != pps->LaserSetMap.end(); it++) delete it->second; pps->LaserSetMap.clear(); for (unsigned int i = 0; i < pps->PowderSets.size(); i++) delete pps->PowderSets[i]; pps->PowderSets.clear(); delete pps; } cfg.ParamSetVec.clear(); Find(cfg); }