UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

69 lines 8.98 kB
import { Operator } from './operator'; import { Query } from '../query/query'; import { Operators } from './operators'; /** * An operator that can be used on any field and matches entries with null or empty string values. * * Beware that if any additional constraints should be applied to the generated query the results may behave strangely. * Consult the [createQueryWithConstraint()]{@link IsNull#createQueryWithConstraint} method for more information. */ export class IsNull extends Operator { constructor() { super(0); } /** * @param elasticKeywords the queried fields * @returns Generates a query that matches null fields and fields with empty string values. */ createQuery(elasticKeywords) { return Operator.forEachKeyword(elasticKeywords, keyword => new Query(`(${this.nullQueryString(keyword)}OR${this.emptyStringQueryString(keyword)})`)); } /** * Counterintuitively elasticsearch query string queries behave weirdly when combining the queries with operators such as `AND`. * Because of this the following query: * * (dataSet.text_0.value:"") * * returns an empty result set. * * But query that should be intuitively more constraining: * * (dataSet.text_0.value:"") AND (processId:600168ccf68fea5241ae5e62) * * will return a non empty and expected result. * * This method exists to combat this issue and add the, sometimes necessary, constraint into the query generated by this operator. * * @param elasticKeywords the queried fields * @param constraint a constraining query that is distributively applied into the query generated by this operator. * If an empty query is provided the result will be the same as calling [createQuery()]{@link IsNull#createQuery}. * @returns a query with distributively applied constraint query */ createQueryWithConstraint(elasticKeywords, constraint) { if (constraint.isEmpty) { return this.createQuery(elasticKeywords); } return Operator.forEachKeyword(elasticKeywords, keyword => new Query(`((${this.nullQueryString(keyword)}AND${constraint.value})OR(${this.emptyStringQueryString(keyword)}AND${constraint.value}))`)); } /** * @param elasticKeyword the queried field * @returns a string representation of the query that checks whether the field is null */ nullQueryString(elasticKeyword) { return `(!(_exists_:${elasticKeyword}))`; } /** * @param elasticKeyword the queried field * @returns a string representation of the query that checks whether the field has an empty string value */ emptyStringQueryString(elasticKeyword) { return `(${elasticKeyword}:"")`; } getOperatorNameTemplate() { return ['search.operator.isNull']; } serialize() { return Operators.IS_NULL; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtbnVsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvc2VhcmNoL21vZGVscy9vcGVyYXRvci9pcy1udWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sTUFBTyxTQUFRLFFBQWE7SUFDckM7UUFDSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLGVBQThCO1FBQ3RDLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQzFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQ3RHLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gseUJBQXlCLENBQUMsZUFBOEIsRUFBRSxVQUFpQjtRQUN2RSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFDMUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FDcEIsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLFVBQVUsQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FDNUgsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNPLGVBQWUsQ0FBQyxjQUFzQjtRQUM1QyxPQUFPLGVBQWUsY0FBYyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHNCQUFzQixDQUFDLGNBQXNCO1FBQ25ELE9BQU8sSUFBSSxjQUFjLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxTQUFTO1FBQ0wsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQzdCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3J9IGZyb20gJy4vb3BlcmF0b3InO1xuaW1wb3J0IHtRdWVyeX0gZnJvbSAnLi4vcXVlcnkvcXVlcnknO1xuaW1wb3J0IHtPcGVyYXRvcnN9IGZyb20gJy4vb3BlcmF0b3JzJztcblxuLyoqXG4gKiBBbiBvcGVyYXRvciB0aGF0IGNhbiBiZSB1c2VkIG9uIGFueSBmaWVsZCBhbmQgbWF0Y2hlcyBlbnRyaWVzIHdpdGggbnVsbCBvciBlbXB0eSBzdHJpbmcgdmFsdWVzLlxuICpcbiAqIEJld2FyZSB0aGF0IGlmIGFueSBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBnZW5lcmF0ZWQgcXVlcnkgdGhlIHJlc3VsdHMgbWF5IGJlaGF2ZSBzdHJhbmdlbHkuXG4gKiBDb25zdWx0IHRoZSBbY3JlYXRlUXVlcnlXaXRoQ29uc3RyYWludCgpXXtAbGluayBJc051bGwjY3JlYXRlUXVlcnlXaXRoQ29uc3RyYWludH0gbWV0aG9kIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSXNOdWxsIGV4dGVuZHMgT3BlcmF0b3I8YW55PiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBlbGFzdGljS2V5d29yZHMgdGhlIHF1ZXJpZWQgZmllbGRzXG4gICAgICogQHJldHVybnMgR2VuZXJhdGVzIGEgcXVlcnkgdGhhdCBtYXRjaGVzIG51bGwgZmllbGRzIGFuZCBmaWVsZHMgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWVzLlxuICAgICAqL1xuICAgIGNyZWF0ZVF1ZXJ5KGVsYXN0aWNLZXl3b3JkczogQXJyYXk8c3RyaW5nPik6IFF1ZXJ5IHtcbiAgICAgICAgcmV0dXJuIE9wZXJhdG9yLmZvckVhY2hLZXl3b3JkKGVsYXN0aWNLZXl3b3JkcyxcbiAgICAgICAgICAgIGtleXdvcmQgPT4gbmV3IFF1ZXJ5KGAoJHt0aGlzLm51bGxRdWVyeVN0cmluZyhrZXl3b3JkKX1PUiR7dGhpcy5lbXB0eVN0cmluZ1F1ZXJ5U3RyaW5nKGtleXdvcmQpfSlgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvdW50ZXJpbnR1aXRpdmVseSBlbGFzdGljc2VhcmNoIHF1ZXJ5IHN0cmluZyBxdWVyaWVzIGJlaGF2ZSB3ZWlyZGx5IHdoZW4gY29tYmluaW5nIHRoZSBxdWVyaWVzIHdpdGggb3BlcmF0b3JzIHN1Y2ggYXMgYEFORGAuXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHRoZSBmb2xsb3dpbmcgcXVlcnk6XG4gICAgICpcbiAgICAgKiAgICAoZGF0YVNldC50ZXh0XzAudmFsdWU6XCJcIilcbiAgICAgKlxuICAgICAqIHJldHVybnMgYW4gZW1wdHkgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEJ1dCBxdWVyeSB0aGF0IHNob3VsZCBiZSBpbnR1aXRpdmVseSBtb3JlIGNvbnN0cmFpbmluZzpcbiAgICAgKlxuICAgICAqICAgICAoZGF0YVNldC50ZXh0XzAudmFsdWU6XCJcIikgQU5EIChwcm9jZXNzSWQ6NjAwMTY4Y2NmNjhmZWE1MjQxYWU1ZTYyKVxuICAgICAqXG4gICAgICogd2lsbCByZXR1cm4gYSBub24gZW1wdHkgYW5kIGV4cGVjdGVkIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGV4aXN0cyB0byBjb21iYXQgdGhpcyBpc3N1ZSBhbmQgYWRkIHRoZSwgc29tZXRpbWVzIG5lY2Vzc2FyeSwgY29uc3RyYWludCBpbnRvIHRoZSBxdWVyeSBnZW5lcmF0ZWQgYnkgdGhpcyBvcGVyYXRvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbGFzdGljS2V5d29yZHMgdGhlIHF1ZXJpZWQgZmllbGRzXG4gICAgICogQHBhcmFtIGNvbnN0cmFpbnQgYSBjb25zdHJhaW5pbmcgcXVlcnkgdGhhdCBpcyBkaXN0cmlidXRpdmVseSBhcHBsaWVkIGludG8gdGhlIHF1ZXJ5IGdlbmVyYXRlZCBieSB0aGlzIG9wZXJhdG9yLlxuICAgICAqIElmIGFuIGVtcHR5IHF1ZXJ5IGlzIHByb3ZpZGVkIHRoZSByZXN1bHQgd2lsbCBiZSB0aGUgc2FtZSBhcyBjYWxsaW5nIFtjcmVhdGVRdWVyeSgpXXtAbGluayBJc051bGwjY3JlYXRlUXVlcnl9LlxuICAgICAqIEByZXR1cm5zIGEgcXVlcnkgd2l0aCBkaXN0cmlidXRpdmVseSBhcHBsaWVkIGNvbnN0cmFpbnQgcXVlcnlcbiAgICAgKi9cbiAgICBjcmVhdGVRdWVyeVdpdGhDb25zdHJhaW50KGVsYXN0aWNLZXl3b3JkczogQXJyYXk8c3RyaW5nPiwgY29uc3RyYWludDogUXVlcnkpOiBRdWVyeSB7XG4gICAgICAgIGlmIChjb25zdHJhaW50LmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5KGVsYXN0aWNLZXl3b3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT3BlcmF0b3IuZm9yRWFjaEtleXdvcmQoZWxhc3RpY0tleXdvcmRzLFxuICAgICAgICAgICAga2V5d29yZCA9PiBuZXcgUXVlcnkoXG4gICAgICAgICAgICBgKCgke3RoaXMubnVsbFF1ZXJ5U3RyaW5nKGtleXdvcmQpfUFORCR7Y29uc3RyYWludC52YWx1ZX0pT1IoJHt0aGlzLmVtcHR5U3RyaW5nUXVlcnlTdHJpbmcoa2V5d29yZCl9QU5EJHtjb25zdHJhaW50LnZhbHVlfSkpYFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBlbGFzdGljS2V5d29yZCB0aGUgcXVlcmllZCBmaWVsZFxuICAgICAqIEByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBxdWVyeSB0aGF0IGNoZWNrcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBudWxsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG51bGxRdWVyeVN0cmluZyhlbGFzdGljS2V5d29yZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAoIShfZXhpc3RzXzoke2VsYXN0aWNLZXl3b3JkfSkpYDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZWxhc3RpY0tleXdvcmQgdGhlIHF1ZXJpZWQgZmllbGRcbiAgICAgKiBAcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcXVlcnkgdGhhdCBjaGVja3Mgd2hldGhlciB0aGUgZmllbGQgaGFzIGFuIGVtcHR5IHN0cmluZyB2YWx1ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBlbXB0eVN0cmluZ1F1ZXJ5U3RyaW5nKGVsYXN0aWNLZXl3b3JkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCgke2VsYXN0aWNLZXl3b3JkfTpcIlwiKWA7XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JOYW1lVGVtcGxhdGUoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBbJ3NlYXJjaC5vcGVyYXRvci5pc051bGwnXTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogT3BlcmF0b3JzIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIE9wZXJhdG9ycy5JU19OVUxMO1xuICAgIH1cbn1cbiJdfQ==