#include "DataFields.h" #include "common/Utils.h" void DataFields::set(string key, string val) { mapFields_[key] = val; } void DataFields::set(string key, float val) { mapFields_[key] = std::to_string(val); } void DataFields::set(string key, int val) { mapFields_[key] = std::to_string(val); } void DataFields::set(string key, int64_t val) { mapFields_[key] = std::to_string(val); } string DataFields::getStr(string key) { if (mapFields_.count(key) > 0) { return mapFields_[key]; } else { return ""; } } int DataFields::getInt(string key) { return mapFields_.count(key) > 0 ? Utils::toInt(mapFields_[key]) : 0; } float DataFields::getFloat(string key) { return mapFields_.count(key) > 0 ? Utils::toFloat(mapFields_[key]) : 0.0f; } void DataFields::remove(string key) { auto it = mapFields_.find(key); if (it != mapFields_.end()) { mapFields_.erase(it); } } void DataFields::append(DataFields& datafield) { auto& map_f = datafield.fields(); for (auto it = map_f.begin(); it != map_f.end(); it++) { mapFields_[it->first] = it->second; } } map& DataFields::fields() { return mapFields_; } void DataFields::check(string key, string val, string d) { if (mapFields_.count(key) > 0 && mapFields_[key] == val) { mapFields_[key] = d; } } string DataFields::get_insert_sql(string tbname) { string key; string val; for (auto it = mapFields_.begin(); it != mapFields_.end(); it++) { if (!key.empty()) { key += ","; val += ","; } key += ("`" + it->first + "`"); if (it->second == "null" || it->second == "NULL") { val += "NULL"; } else { val += ("'" + it->second + "'"); } } return "INSERT INTO `" + tbname + "` (" + key + ") VALUES(" + val + ");"; } string DataFields::get_update_sql(string tbname, string sql_c) { ostringstream oss; oss << "update " << tbname << " set "; for (auto iter = mapFields_.begin(); iter != mapFields_.end(); iter++) { if (iter != mapFields_.begin()) { oss << ","; }; oss << "`" << iter->first << "`="; if (iter->second == "null" || iter->second == "NULL") { oss << "NULL"; } else { oss << "'" << iter->second << "'"; } } oss << " " << sql_c << ";"; return oss.str(); } string DataFields::get_update_sql(string tbname, std::vector vec_keys, string sql_c) { std::map map_keys; for (auto& k : vec_keys) { map_keys[k] = true; } ostringstream oss; oss << "update " << tbname << " set "; for (auto iter = mapFields_.begin(); iter != mapFields_.end(); iter++) { auto& k = iter->first; auto& v = iter->second; if (!map_keys[k]) { continue; } if (iter != mapFields_.begin()) { oss << ","; }; oss << "`" << k << "`="; if (v == "null" || v == "NULL") { oss << "NULL"; } else { oss << "'" << v << "'"; } } oss << " " << sql_c << ";"; return oss.str(); } void DataFields::foreach_item(function on_foraach) { for (auto it = mapFields_.begin(); it != mapFields_.end(); it++) { if (on_foraach) { on_foraach(it->first, it->second); } } } bool DataFields::isEmpty(string key) { auto& s = mapFields_[key]; return s.empty(); } bool DataFields::is_float_number(string key) { auto& s = mapFields_[key]; if (s.empty()) { return false; } for (auto& c : s) { if (std::isdigit(c) == 0 && c != '.') { return false; } } return true; } string DataFields::to_str() { string s; for (auto it = mapFields_.begin(); it != mapFields_.end(); it++) { s += ("[" + it->first + ":" + it->second + "] "); } return s; } int DataFields::size() { return mapFields_.size(); } void DataFields::clear() { mapFields_.clear(); }