DbRaw.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace controllers;
  3. use controllers\utils\DbTrait;
  4. /**
  5. * Bench controller.
  6. */
  7. class DbRaw extends \Ubiquity\controllers\Controller {
  8. protected static $statement;
  9. protected static $uStatements;
  10. /**
  11. *
  12. * @var \Ubiquity\db\Database
  13. */
  14. protected static $db;
  15. private static function prepareUpdate(int $count) {
  16. $sql = 'UPDATE World SET randomNumber = CASE id' . \str_repeat(' WHEN ?::INTEGER THEN ?::INTEGER ', $count) . 'END WHERE id IN (' . \str_repeat('?::INTEGER,', $count - 1) . '?::INTEGER)';
  17. return self::$uStatements[$count] = self::$db->prepareStatement($sql);
  18. }
  19. public function __construct() {}
  20. public static function warmup(\Ubiquity\db\Database $db) {
  21. self::$db = $db;
  22. self::$statement = $db->prepareStatement('SELECT id,randomNumber FROM World WHERE id=?');
  23. }
  24. public function initialize() {
  25. \Ubiquity\utils\http\UResponse::setContentType('application/json');
  26. }
  27. public function index() {
  28. self::$statement->execute([
  29. \mt_rand(1, 10000)
  30. ]);
  31. echo \json_encode(self::$statement->fetch());
  32. }
  33. public function query($queries = 1) {
  34. $worlds = [];
  35. $count = \min(\max((int) $queries, 1), 500);
  36. while ($count --) {
  37. self::$statement->execute([
  38. \mt_rand(1, 10000)
  39. ]);
  40. $worlds[] = self::$statement->fetch();
  41. }
  42. echo \json_encode($worlds);
  43. }
  44. public function update($queries = 1) {
  45. $worlds = [];
  46. $keys = $values = [];
  47. $count = \min(\max((int) $queries, 1), 500);
  48. for ($i = 0; $i < $count; ++ $i) {
  49. $values[] = $keys[] = $id = \mt_rand(1, 10000);
  50. self::$statement->execute([
  51. $id
  52. ]);
  53. $row = self::$statement->fetch();
  54. $values[] = $row['randomNumber'] = \mt_rand(1, 10000);
  55. $worlds[] = $row;
  56. }
  57. (self::$uStatements[$count] ?? self::prepareUpdate($count))->execute([
  58. ...$values,
  59. ...$keys
  60. ]);
  61. echo \json_encode($worlds);
  62. }
  63. }