RangeOperation.js 873 B

12345678910111213141516171819202122232425262728293031323334353637
  1. const QueryBuilderOperation = require('./QueryBuilderOperation');
  2. class RangeOperation extends QueryBuilderOperation {
  3. constructor(name, opt) {
  4. super(name, opt);
  5. this.resultSizeBuilder = null;
  6. }
  7. onAdd(builder, args) {
  8. if (args.length === 2) {
  9. const start = args[0];
  10. const end = args[1];
  11. // Need to set these here instead of `onBuildKnex` so that they
  12. // don't end up in the resultSize query.
  13. builder.limit(end - start + 1).offset(start);
  14. }
  15. return true;
  16. }
  17. onBefore1(builder, result) {
  18. this.resultSizeBuilder = builder.clone();
  19. return super.onBefore1(builder, result);
  20. }
  21. onAfter3(builder, results) {
  22. return this.resultSizeBuilder.resultSize().then(resultSize => {
  23. return {
  24. results,
  25. total: parseInt(resultSize, 10)
  26. };
  27. });
  28. }
  29. }
  30. module.exports = RangeOperation;