unsigned int CallManager::storeCall(Connection *sqlCon, bool phone, unsigned int client, unsigned int translator) { if (!sqlCon) return 0; PreparedStatement *pstmt = sqlCon->prepareStatement( "INSERT INTO calls SET phone=(?), client=(?), translator=(?), request_time=NOW()"); pstmt->setInt(1, phone); pstmt->setInt(2, client); pstmt->setInt(3, translator); try { pstmt->execute(); } catch (SQLException &ex) { log(LOG_ERROR, "[%s] MySQL error(%d): %s", __func__, ex.getErrorCode(), ex.what()); delete pstmt; return 0; } delete pstmt; pstmt = sqlCon->prepareStatement("SELECT LAST_INSERT_ID()"); ResultSet *res; try { res = pstmt->executeQuery(); } catch (SQLException &ex) { log(LOG_ERROR, "[%s] MySQL error(%d): %s", __func__, ex.getErrorCode(), ex.what()); delete pstmt; return 0; } delete pstmt; res->first(); unsigned int id = res->getInt(1); delete res; return id; }
int PhoneCall::DBread(Connection *sqlCon) { if (!sqlCon || !id) return -1; PreparedStatement *pstmt = sqlCon->prepareStatement( "SELECT phone, client, translator, client_country, translator_country, lang, price, start_time, accounted, cost, error, request_time, confirm_time, accepted FROM calls WHERE id=(?)"); pstmt->setInt(1, id); ResultSet *res; try { res = pstmt->executeQuery(); } catch (SQLException &ex) { log(LOG_ERROR, "[%s] MySQL error(%d): %s", __func__, ex.getErrorCode(), ex.what()); delete pstmt; return 0; } delete pstmt; if (res->rowsCount() != 1) return -1; res->first(); if (!res->getInt("phone")) { delete res; return -1; } client = res->getInt("client"); translator = res->getInt("translator"); translateLang = res->getString("lang").c_str(); price = res->getInt("price"); const char *time = res->getString("start_time").c_str(); if (strlen(time) > 0) start_time = mktime(getdate(time)); accounted = res->getInt("accounted"); cost = res->getInt("cost"); if (res->getInt("error")) state = ERROR; time = res->getString("request_time").c_str(); if (strlen(time) > 0) request_time = mktime(getdate(time)); time = res->getString("confirm_time").c_str(); if (strlen(time) > 0) confirm_time = mktime(getdate(time)); accepted = res->getBoolean("accepted"); setClientCountry(res->getString("client_country").c_str()); setTranslatorCountry(res->getString("translator_country").c_str()); delete res; return 0; }