1//===----------------------------------------------------------------------===//
2// DuckDB
3//
4// duckdb/optimizer/matcher/function_matcher.hpp
5//
6//
7//===----------------------------------------------------------------------===//
8
9#pragma once
10
11#include "duckdb/common/common.hpp"
12#include "duckdb/common/unordered_set.hpp"
13#include <algorithm>
14
15namespace duckdb {
16
17//! The FunctionMatcher class contains a set of matchers that can be used to pattern match specific functions
18class FunctionMatcher {
19public:
20 virtual ~FunctionMatcher() {
21 }
22
23 virtual bool Match(string &name) = 0;
24
25 static bool Match(unique_ptr<FunctionMatcher> &matcher, string &name) {
26 if (!matcher) {
27 return true;
28 }
29 return matcher->Match(name);
30 }
31};
32
33//! The SpecificFunctionMatcher class matches a single specified function name
34class SpecificFunctionMatcher : public FunctionMatcher {
35public:
36 explicit SpecificFunctionMatcher(string name) : name(std::move(name)) {
37 }
38
39 bool Match(string &name) override {
40 return name == this->name;
41 }
42
43private:
44 string name;
45};
46
47//! The ManyFunctionMatcher class matches a set of functions
48class ManyFunctionMatcher : public FunctionMatcher {
49public:
50 explicit ManyFunctionMatcher(unordered_set<string> names) : names(std::move(names)) {
51 }
52
53 bool Match(string &name) override {
54 return names.find(x: name) != names.end();
55 }
56
57private:
58 unordered_set<string> names;
59};
60
61} // namespace duckdb
62