text: 'use strict';
  
  const jsonApi = require('./postgresJsonApi');
  const { ObjectionToKnexConvertingOperation } = require('../ObjectionToKnexConvertingOperation');
  
  class WhereJsonNotObjectPostgresOperation extends ObjectionToKnexConvertingOperation {
    onBuildKnex(knexBuilder, builder) {
      this.whereJsonNotObject(knexBuilder, builder.knex(), this.getKnexArgs(builder)[0]);
    }
  
    whereJsonNotObject(knexBuilder, knex, fieldExpression) {
      const innerQuery = innerQuery => {
        const builder = jsonApi.whereJsonbRefOnLeftJsonbValOrRefOnRight(
          innerQuery,
          fieldExpression,
          '@>',
          this.opt.compareValue,
          'not'
        );
  
        builder.orWhereRaw(jsonApi.whereJsonFieldQuery(knex, fieldExpression, 'IS', null));
      };
  
      if (this.opt.bool === 'or') {
        knexBuilder.orWhere(innerQuery);
      } else {
        knexBuilder.where(innerQuery);
      }
    }
  }
  
  module.exports = {
    WhereJsonNotObjectPostgresOperation
  };
  