WhereJsonNotObjectPostgresOperation.js 913 B

123456789101112131415161718192021222324252627282930
  1. const jsonApi = require('./postgresJsonApi');
  2. const ObjectionToKnexConvertingOperation = require('../ObjectionToKnexConvertingOperation');
  3. class WhereJsonNotObjectPostgresOperation extends ObjectionToKnexConvertingOperation {
  4. onBuildKnex(knexBuilder, builder) {
  5. this.whereJsonNotObject(knexBuilder, builder.knex(), this.args[0]);
  6. }
  7. whereJsonNotObject(knexBuilder, knex, fieldExpression) {
  8. const innerQuery = innerQuery => {
  9. const builder = jsonApi.whereJsonbRefOnLeftJsonbValOrRefOnRight(
  10. innerQuery,
  11. fieldExpression,
  12. '@>',
  13. this.opt.compareValue,
  14. 'not'
  15. );
  16. builder.orWhereRaw(jsonApi.whereJsonFieldQuery(knex, fieldExpression, 'IS', null));
  17. };
  18. if (this.opt.bool === 'or') {
  19. knexBuilder.orWhere(innerQuery);
  20. } else {
  21. knexBuilder.where(innerQuery);
  22. }
  23. }
  24. }
  25. module.exports = WhereJsonNotObjectPostgresOperation;