public void process()

in src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/FileSystemFilterFactory.java [146:191]


        public void process(final FilterConversionContext context) {
            val isMetaKey = META_KEY_PROPERTIES_NAME.equals(condition.getName());
            switch (condition.getOp()) {
            case EQUAL:
                if (isMetaKey && !context.hasWholeKey) {
                    context.setKeyPath(condition.getValues().get(0).toString());
                } else if (!isMetaKey) {
                    context.addJsonFilterCondition(condition);
                } // If isMetaKey && context.hasWholeKey, it is a whole path, so ignore it
                break;
            case EQUAL_CASE_INSENSITIVE:
                if (isMetaKey && !context.hasWholeKey) {
                    condition.setEval("(?i)" + Pattern.quote(condition.getValues().get(0).toString() + JSON_SUFFIX));
                    context.setMetaKeyPathCondition(condition);
                } else if (!isMetaKey) {
                    context.addJsonFilterCondition(condition);
                }
                break;
            case LIKE_CASE_INSENSITIVE:
                if (isMetaKey && !context.hasWholeKey) {
                    condition.setEval(String.format(Locale.ROOT, "(?i).*%s.*",
                            Pattern.quote(condition.getValues().get(0).toString())));
                    context.setMetaKeyPathCondition(condition);
                } else if (!isMetaKey) {
                    context.addJsonFilterCondition(condition);
                }
                break;
            case IN:
                // If the in condition is empty, an empty string can skip all the files
                if (isMetaKey && !context.hasWholeKey) {
                    condition.setEval(condition.getValues().stream().map(x -> Pattern.quote(x + JSON_SUFFIX))
                            .collect(Collectors.joining("|")));
                    context.setMetaKeyPathCondition(condition);
                } else if (!isMetaKey) {
                    context.addJsonFilterCondition(condition);
                }
                break;
            case GT:
            case LT:
            case GE:
            case LE:
            default:
                context.addJsonFilterCondition(condition);
                break;
            }
        }