databaseupdatestest.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "databaseupdatestest.h"
  2. #include <Cutelyst/Plugins/Utils/Sql>
  3. #include <QtSql/QSqlQuery>
  4. #include <QtCore/QThread>
  5. #include <QtCore/QJsonDocument>
  6. #include <QtCore/QJsonObject>
  7. #include <QtCore/QJsonArray>
  8. DatabaseUpdatesTest::DatabaseUpdatesTest(QObject *parent) : Controller(parent)
  9. {
  10. }
  11. void DatabaseUpdatesTest::updates_postgres(Context *c)
  12. {
  13. QSqlQuery query = CPreparedSqlQueryForDatabase(
  14. QLatin1String("SELECT randomNumber FROM world WHERE id = :id"),
  15. QSqlDatabase::database(QLatin1String("postgres")));
  16. QSqlQuery updateQuery = CPreparedSqlQueryForDatabase(
  17. QLatin1String("UPDATE world SET randomNumber = :randomNumber WHERE id = :id"),
  18. QSqlDatabase::database(QLatin1String("postgres")));
  19. processQuery(c, query, updateQuery);
  20. }
  21. void DatabaseUpdatesTest::updates_mysql(Context *c)
  22. {
  23. QSqlQuery query = CPreparedSqlQueryForDatabase(
  24. QLatin1String("SELECT randomNumber FROM world WHERE id = :id"),
  25. QSqlDatabase::database(QLatin1String("mysql")));
  26. QSqlQuery updateQuery = CPreparedSqlQueryForDatabase(
  27. QLatin1String("UPDATE world SET randomNumber = :randomNumber WHERE id = :id"),
  28. QSqlDatabase::database(QLatin1String("mysql")));
  29. processQuery(c, query, updateQuery);
  30. }
  31. void DatabaseUpdatesTest::processQuery(Context *c, QSqlQuery &query, QSqlQuery &updateQuery)
  32. {
  33. QJsonArray array;
  34. int queries = c->request()->queryParam(QStringLiteral("queries"), QStringLiteral("1")).toInt();
  35. if (queries < 1) {
  36. queries = 1;
  37. } else if (queries > 500) {
  38. queries = 500;
  39. }
  40. for (int i = 0; i < queries; ++i) {
  41. int id = (qrand() % 9999) + 1;
  42. query.bindValue(QStringLiteral(":id"), id);
  43. if (!query.exec() || !query.next()) {
  44. c->res()->setStatus(Response::InternalServerError);
  45. return;
  46. }
  47. int randomNumber = (qrand() % 9999) + 1;
  48. updateQuery.bindValue(QStringLiteral(":id"), id);
  49. updateQuery.bindValue(QStringLiteral(":randomNumber"), randomNumber);
  50. if (!updateQuery.exec()) {
  51. c->res()->setStatus(Response::InternalServerError);
  52. return;
  53. }
  54. QJsonObject obj;
  55. obj.insert(QStringLiteral("id"), query.value(0).toInt());
  56. obj.insert(QStringLiteral("randomNumber"), randomNumber);
  57. array.append(obj);
  58. }
  59. c->response()->setJsonBody(QJsonDocument(array));
  60. }