`SELECT ... WHERE match(key, '^prefix...')`
should use index similarly to
`SELECT ... WHERE key LIKE 'prefix%'`
return false;
                }
                return true;
            };
            for (const auto & set : sets->getByTreeHash(ast->getTreeHash()))
            {
                if (types_match(set))
                    return set;
            }
        }
        else if (dag->column)
        {
            const IColumn * col = dag->column.get();
            if (const auto * col_const = typeid_cast<const ColumnConst *>(col))
                col = &col_const->getDataColumn();
            if (const auto * col_set = typeid_cast<const ColumnSet *>(col))
            {
                auto set = col_set->getData();
                if (set->isCreated())
                    return set;
            }
        }
        return nullptr;
    }
    FunctionTree asFunction() const;
protected:
    const IAST * ast = nullptr;
    const ActionsDAG::Node * dag = nullptr;
};
class KeyCondition::FunctionTree : public KeyCondition::Tree