84 lines
3.0 KiB
C++
84 lines
3.0 KiB
C++
#include "PrepareJobCfgDao.h"
|
|
|
|
|
|
PrepareJobCfgDao::PrepareJobCfgDao(SQLite::Database* pdb) : BaseDao(pdb)
|
|
{
|
|
}
|
|
|
|
|
|
PrepareJobCfgDao::~PrepareJobCfgDao()
|
|
{
|
|
}
|
|
|
|
void PrepareJobCfgDao::CreateTable()
|
|
{
|
|
if (m_pDB->tableExists(PrepareJobCfg::TABLE_NAME))return;
|
|
char buffer[512];
|
|
string createsql = "CREATE TABLE %s(%s INTEGER,%s INTEGER,%s INTEGER,UNIQUE(%s,%s))";
|
|
sprintf_s(buffer, sizeof(buffer), createsql.c_str(),
|
|
PrepareJobCfg::TABLE_NAME.c_str(),
|
|
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),
|
|
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),
|
|
PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),
|
|
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),
|
|
PrepareJobCfg::FIELD_LAYER_INDEX.c_str()
|
|
);
|
|
m_pDB->exec(buffer);
|
|
}
|
|
|
|
void PrepareJobCfgDao::Find(int mt,map<int, bool>& cfgs)
|
|
{
|
|
char buffer[1024];
|
|
string strsql = "SELECT %s,%s FROM %s WHERE %s=%d";
|
|
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
|
|
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),
|
|
PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),
|
|
PrepareJobCfg::TABLE_NAME.c_str(),
|
|
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),mt);
|
|
SQLite::Statement query(*m_pDB, buffer);
|
|
while (query.executeStep()) {
|
|
cfgs[query.getColumn(PrepareJobCfg::FIELD_LAYER_INDEX.c_str()).getInt()] = (query.getColumn(PrepareJobCfg::FIELD_IS_PRINTABLE.c_str()).getInt() > 0 ? true : false);
|
|
}
|
|
}
|
|
|
|
void PrepareJobCfgDao::Save(int mt, map<int, bool>& cfgs)
|
|
{
|
|
char buffer[1024];
|
|
string strsql = "SELECT %s,%s FROM %s WHERE %s=%d";
|
|
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),
|
|
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),
|
|
PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),
|
|
PrepareJobCfg::TABLE_NAME.c_str(),
|
|
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(), mt);
|
|
SQLite::Statement query(*m_pDB, buffer);
|
|
map<int, bool> dbMap;
|
|
map<int, bool> insertMap;
|
|
map<int, bool> updateMap;
|
|
while (query.executeStep()) {
|
|
dbMap[query.getColumn(PrepareJobCfg::FIELD_LAYER_INDEX.c_str()).getInt()] = (query.getColumn(PrepareJobCfg::FIELD_IS_PRINTABLE.c_str()).getInt() > 0 ? true : false);
|
|
}
|
|
|
|
for (map<int, bool>::iterator it = cfgs.begin(); it != cfgs.end();it++) {
|
|
if (dbMap.find(it->first) == dbMap.end()) {
|
|
insertMap[it->first] = it->second;
|
|
}
|
|
else {
|
|
updateMap[it->first] = it->second;
|
|
}
|
|
}
|
|
|
|
string updateSql = "UPDATE %s SET %s=%d WHERE %s=%d AND %s=%d";
|
|
for (map<int, bool>::iterator it = updateMap.begin(); it != updateMap.end();it++) {
|
|
sprintf_s(buffer, sizeof(buffer), updateSql.c_str(), PrepareJobCfg::TABLE_NAME.c_str(), PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),it->second?1:0,
|
|
PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),mt,PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),it->first);
|
|
m_pDB->exec(buffer);
|
|
}
|
|
|
|
string insertSql = "INSERT INTO %s(%s,%s,%s) VALUES(%d,%d,%d)";
|
|
for (map<int, bool>::iterator it = insertMap.begin(); it != insertMap.end(); it++) {
|
|
sprintf_s(buffer, sizeof(buffer),insertSql.c_str(),PrepareJobCfg::TABLE_NAME.c_str(),PrepareJobCfg::FIELD_MACHINE_TYPE.c_str(),
|
|
PrepareJobCfg::FIELD_LAYER_INDEX.c_str(),PrepareJobCfg::FIELD_IS_PRINTABLE.c_str(),mt,it->first,it->second?1:0);
|
|
m_pDB->exec(buffer);
|
|
}
|
|
}
|