tokenizer.or.test.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. var Tokenizer = require('../../../index').query.tokenizer;
  2. var assert = require('assert');
  3. describe('Tokenizer ::', function() {
  4. describe('Grouping statements with OR', function() {
  5. it('should generate a valid token array', function() {
  6. var result = Tokenizer({
  7. select: ['*'],
  8. where: {
  9. or: [
  10. {
  11. id: { '>': 10 }
  12. },
  13. {
  14. name: 'Tester'
  15. }
  16. ]
  17. },
  18. from: 'users'
  19. });
  20. assert.deepEqual(result, [
  21. { type: 'IDENTIFIER', value: 'SELECT' },
  22. { type: 'VALUE', value: '*' },
  23. { type: 'ENDIDENTIFIER', value: 'SELECT' },
  24. { type: 'IDENTIFIER', value: 'WHERE' },
  25. { type: 'CONDITION', value: 'OR' },
  26. { type: 'GROUP', value: 0 },
  27. { type: 'KEY', value: 'id' },
  28. { type: 'OPERATOR', value: '>' },
  29. { type: 'VALUE', value: 10 },
  30. { type: 'ENDOPERATOR', value: '>' },
  31. { type: 'ENDGROUP', value: 0 },
  32. { type: 'GROUP', value: 1 },
  33. { type: 'KEY', value: 'name' },
  34. { type: 'VALUE', value: 'Tester' },
  35. { type: 'ENDGROUP', value: 1 },
  36. { type: 'ENDCONDITION', value: 'OR' },
  37. { type: 'ENDIDENTIFIER', value: 'WHERE' },
  38. { type: 'IDENTIFIER', value: 'FROM' },
  39. { type: 'VALUE', value: 'users' },
  40. { type: 'ENDIDENTIFIER', value: 'FROM' }
  41. ]);
  42. });
  43. it('should generate a valid token array when using nested OR conditions', function() {
  44. var result = Tokenizer({
  45. select: ['*'],
  46. where: {
  47. or: [
  48. {
  49. or: [
  50. { id: 1 },
  51. { id: { '>': 10 } }
  52. ]
  53. },
  54. {
  55. name: 'Tester'
  56. }
  57. ]
  58. },
  59. from: 'users'
  60. });
  61. assert.deepEqual(result, [
  62. { type: 'IDENTIFIER', value: 'SELECT' },
  63. { type: 'VALUE', value: '*' },
  64. { type: 'ENDIDENTIFIER', value: 'SELECT' },
  65. { type: 'IDENTIFIER', value: 'WHERE' },
  66. { type: 'CONDITION', value: 'OR' },
  67. { type: 'GROUP', value: 0 },
  68. { type: 'CONDITION', value: 'OR' },
  69. { type: 'GROUP', value: 0 },
  70. { type: 'KEY', value: 'id' },
  71. { type: 'VALUE', value: 1 },
  72. { type: 'ENDGROUP', value: 0 },
  73. { type: 'GROUP', value: 1 },
  74. { type: 'KEY', value: 'id' },
  75. { type: 'OPERATOR', value: '>' },
  76. { type: 'VALUE', value: 10 },
  77. { type: 'ENDOPERATOR', value: '>' },
  78. { type: 'ENDGROUP', value: 1 },
  79. { type: 'ENDCONDITION', value: 'OR' },
  80. { type: 'ENDGROUP', value: 0 },
  81. { type: 'GROUP', value: 1 },
  82. { type: 'KEY', value: 'name' },
  83. { type: 'VALUE', value: 'Tester' },
  84. { type: 'ENDGROUP', value: 1 },
  85. { type: 'ENDCONDITION', value: 'OR' },
  86. { type: 'ENDIDENTIFIER', value: 'WHERE' },
  87. { type: 'IDENTIFIER', value: 'FROM' },
  88. { type: 'VALUE', value: 'users' },
  89. { type: 'ENDIDENTIFIER', value: 'FROM' }
  90. ]);
  91. });
  92. });
  93. });