#include #include #include #include #include namespace db { uint32_t insert_events(sql::Database *db, const ical::IcalObject *object) { uint32_t event_id; for(auto const& event : object->get_events()) { stmt::Statement select_event_by_uid = stmt::Statement::select().columns("1").from_table("events").where("uid = \"" + event->get_uid() + "\"").exists(); uint32_t ret = db->execAndGet(select_event_by_uid.str()); if(ret > 0) { DEBUG << "Updating " << event->print(); stmt::Statement update_event = stmt::Statement::update().table("events").set(event->update_row_string()).where("uid = \"" + event->get_uid() + "\"").close(); DEBUG << update_event.str(); db->exec(update_event.str()); stmt::Statement get_event_id = stmt::Statement::select().columns("id").from_table("events").where("uid = \"" + event->get_uid() + "\"").close(); uint32_t event_id = db->execAndGet(get_event_id.str()); stmt::Statement delete_alarms = stmt::Statement::remove().table("alarms").where("event_id = \"" + std::to_string(event_id) + "\"").close(); db->exec(delete_alarms.str()); for(auto const& alarm : event->get_alarms()) { insert_alarm(db, &alarm, event_id); } } else { DEBUG << "Inserting " << event->print(); stmt::Statement insert_object = stmt::Statement::insert().table("events").columns("uid, summary, dtstart, dtend, filename").values().row(event->get_db_row()).close(); DEBUG << insert_object.str() << std::endl; db->exec(insert_object.str()); event_id = db->execAndGet("SELECT last_insert_rowid();"); for(auto const& alarm : event->get_alarms()) { insert_alarm(db, &alarm, event_id); } } } return 0; } uint32_t insert_alarm(sql::Database *db, const ical::Alarm *alarm, const uint32_t event_id) { std::vector row = alarm->get_db_row(); row.push_back(std::to_string(event_id)); stmt::Statement insert_alarm = stmt::Statement::insert().table("alarms").columns("action, description, absolute_trigger, event_id").values().row(row).close(); DEBUG << insert_alarm.str(); try { db->exec(insert_alarm.str()); } catch(sql::Exception &e) { WARN << e.what() << std::endl; } return 0; } uint32_t remove_events(sql::Database *db, const std::string &filename) { stmt::Statement delete_event = stmt::Statement::remove().table("events").where("filename = \"" + filename + "\"").close(); DEBUG << delete_event.str(); try { db->exec(delete_event.str()); } catch(sql::Exception &e) { WARN << e.what() << std::endl; } return 0; } //uint32_t update_alarm(sql::Database *db, const ical::Alarm *alarm) { // std::vector row = alarm->get_db_row(); // row.push_back(std::to_string(event_id)); // stmt::Statement insert_alarm = stmt::Statement::insert().table("alarms").columns("action, description, absolute_trigger, event_id").values().row(row).close(); // DEBUG << insert_alarm.str(); // db->exec(insert_alarm.str()); // return 0; //} }