`SELECT ... WHERE match(key, '^prefix...')`
should use index similarly to
`SELECT ... WHERE key LIKE 'prefix%'`
{
        if (ast)
            return Tree(assert_cast<const ASTFunction *>(ast)->arguments->children[idx].get());
        else
            return Tree(dag->children[idx]);
    }
private:
    using Tree::Tree;
    friend class Tree;
};
KeyCondition::FunctionTree KeyCondition::Tree::asFunction() const
{
    if (!isFunction())
        throw Exception(ErrorCodes::LOGICAL_ERROR, "KeyCondition::Tree node is not a function");
    if (ast)
        return KeyCondition::FunctionTree(ast);
    else
        return KeyCondition::FunctionTree(dag);
}
const KeyCondition::AtomMap KeyCondition::atom_map
{
    {
        "notEquals",
        [] (RPNElement & out, const Field & value)
        {
            out.function = RPNElement::FUNCTION_NOT_IN_RANGE;
            out.range = Range(value);
            return true;
        }
    },