DatabaseQueryController.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /**
  2. * DatabaseQueryController
  3. *
  4. * @description :: Server-side logic for managing Database Queries
  5. */
  6. var Sequelize = require('sequelize')
  7. var sequelize = new Sequelize(
  8. 'hello_world', 'benchmarkdbuser', 'benchmarkdbpass',
  9. {
  10. host: '127.0.0.1',
  11. dialect: 'mysql',
  12. pool: {
  13. max: 5000,
  14. min: 0,
  15. idle: 5000
  16. },
  17. // hide the SQL queries being run
  18. logging: false
  19. });
  20. var World = sequelize.define('World', {
  21. id: Sequelize.INTEGER,
  22. randomNumber: Sequelize.INTEGER
  23. },
  24. {
  25. // prevents sequelize from assuming the table is called 'Worlds'
  26. freezeTableName: true,
  27. timestamps: false
  28. });
  29. var Fortune = sequelize.define('Fortune', {
  30. id: Sequelize.INTEGER,
  31. message: Sequelize.STRING
  32. },
  33. {
  34. // prevents sequelize from assuming the table is called 'Fortunes'
  35. freezeTableName: true,
  36. timestamps: false
  37. });
  38. var randomTFBnumber = function() {
  39. return Math.floor(Math.random() * 10000) + 1;
  40. }
  41. var worldQuery = function(callback) {
  42. World.findOne({
  43. where: { id: randomTFBnumber()}
  44. }).then(function (result) {
  45. if (result) {
  46. callback(null, result.get())
  47. } else {
  48. callback("Error in World query")
  49. }
  50. });
  51. }
  52. // arr is single-element array containing number of updated rows
  53. // [ 1 ] or [ 0 ]
  54. var oneOrMoreUpdates = function (arr) {
  55. return arr[0] > 0;
  56. }
  57. var worldUpdate = function(world, callback) {
  58. World.update({
  59. randomNumber: world.randomNumber
  60. },
  61. {
  62. where: {
  63. id: world.id
  64. }
  65. }).then(function (changed) {
  66. if (oneOrMoreUpdates(changed)) {
  67. callback(null, world);
  68. } else {
  69. callback("Error in World update");
  70. }
  71. });
  72. }
  73. module.exports = {
  74. /**
  75. * Test 2: Single Database Query
  76. */
  77. single: function(req, res) {
  78. World.findOne({
  79. where: { id: randomTFBnumber() }
  80. }).then(function (results) {
  81. return res.json(results.get());
  82. })
  83. },
  84. /**
  85. * Test 3: Multiple Database Query
  86. */
  87. multiple: function(req, res) {
  88. var queries = req.param('queries');
  89. var toRun = [];
  90. queries = Math.min(Math.max(queries, 1), 500) || 1;
  91. for (var i = 0; i < queries; i++) {
  92. toRun.push(worldQuery);
  93. }
  94. async.parallel(toRun, function (err, results) {
  95. if (!err) {
  96. res.json(results);
  97. } else {
  98. res.badRequest('Unexpected failure to fetch multiple records.');
  99. }
  100. });
  101. },
  102. /**
  103. * Test 4: Fortunes
  104. */
  105. fortunes: function(req, res) {
  106. Fortune.findAll().then(function (fortunes) {
  107. fortunes.push({
  108. id: 0,
  109. message: "Additional fortune added at request time."
  110. });
  111. fortunes.sort(function (a, b) {
  112. return a.message.localeCompare(b.message);
  113. });
  114. return res.render('fortunes', { 'fortunes': fortunes });
  115. })
  116. },
  117. /**
  118. * Test 5: Database Updates
  119. */
  120. updates: function(req, res) {
  121. var queries = req.param('queries');
  122. var worlds = [];
  123. queries = Math.min(Math.max(queries, 1), 500) || 1;
  124. for (var i = 0; i < queries; i++) {
  125. worlds.push({
  126. id: randomTFBnumber(),
  127. randomNumber: randomTFBnumber()
  128. });
  129. }
  130. async.map(worlds, worldUpdate, function (err, results) {
  131. if (!err) {
  132. res.json(results);
  133. } else {
  134. res.badRequest('Unexpected failure to update records.');
  135. }
  136. });
  137. }
  138. };