WhereCompositeOperation.js 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. const ObjectionToKnexConvertingOperation = require('./ObjectionToKnexConvertingOperation');
  2. class WhereCompositeOperation extends ObjectionToKnexConvertingOperation {
  3. onBuildKnex(knexBuilder) {
  4. if (this.args.length === 2) {
  5. this.build(knexBuilder, this.args[0], '=', this.args[1]);
  6. } else if (this.args.length === 3) {
  7. this.build(knexBuilder, this.args[0], this.args[1], this.args[2]);
  8. } else {
  9. throw new Error(`invalid number of arguments ${this.args.length}`);
  10. }
  11. }
  12. build(knexBuilder, cols, op, values) {
  13. const colsIsArray = Array.isArray(cols);
  14. const valuesIsArray = Array.isArray(values);
  15. if (!colsIsArray && !valuesIsArray) {
  16. knexBuilder.where(cols, op, values);
  17. } else if (colsIsArray && cols.length === 1 && !valuesIsArray) {
  18. knexBuilder.where(cols[0], op, values);
  19. } else if (colsIsArray && valuesIsArray && cols.length === values.length) {
  20. for (let i = 0, l = cols.length; i < l; ++i) {
  21. knexBuilder.where(cols[i], op, values[i]);
  22. }
  23. } else {
  24. throw new Error(`both cols and values must have same dimensions`);
  25. }
  26. }
  27. }
  28. module.exports = WhereCompositeOperation;