public static P parsePredicate()

in hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java [852:897]


    public static P<Object> parsePredicate(String predicate) {
        /*
         * Extract P from json string like {"properties": {"age": "P.gt(18)"}}
         * the `predicate` may actually be like "P.gt(18)"
         */
        Pattern pattern = Pattern.compile("^P\\.([a-z]+)\\(([\\S ]*)\\)$");
        Matcher matcher = pattern.matcher(predicate);
        if (!matcher.find()) {
            throw new HugeException("Invalid predicate: %s", predicate);
        }

        String method = matcher.group(1);
        String value = matcher.group(2);
        switch (method) {
            case "eq":
                return P.eq(predicateNumber(value));
            case "neq":
                return P.neq(predicateNumber(value));
            case "lt":
                return P.lt(predicateNumber(value));
            case "lte":
                return P.lte(predicateNumber(value));
            case "gt":
                return P.gt(predicateNumber(value));
            case "gte":
                return P.gte(predicateNumber(value));
            case "between":
                Number[] params = predicateNumbers(value, 2);
                return P.between(params[0], params[1]);
            case "inside":
                params = predicateNumbers(value, 2);
                return P.inside(params[0], params[1]);
            case "outside":
                params = predicateNumbers(value, 2);
                return P.outside(params[0], params[1]);
            case "within":
                return P.within(predicateArgs(value));
            case "textcontains":
                return ConditionP.textContains(predicateArg(value));
            case "contains":
                // Just for inner use case like auth filter
                return ConditionP.contains(predicateArg(value));
            default:
                throw new NotSupportException("predicate '%s'", method);
        }
    }