//===----------------------------------------------------------------------===// // DuckDB // // duckdb/verification/statement_verifier.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/main/client_context.hpp" #include "duckdb/main/materialized_query_result.hpp" #include "duckdb/parser/statement/select_statement.hpp" namespace duckdb { enum class VerificationType : uint8_t { ORIGINAL, COPIED, DESERIALIZED, DESERIALIZED_V2, PARSED, UNOPTIMIZED, NO_OPERATOR_CACHING, PREPARED, EXTERNAL, INVALID }; class StatementVerifier { public: StatementVerifier(VerificationType type, string name, unique_ptr statement_p); explicit StatementVerifier(unique_ptr statement_p); static unique_ptr Create(VerificationType type, const SQLStatement &statement_p); virtual ~StatementVerifier() noexcept; //! Check whether expressions in this verifier and the other verifier match void CheckExpressions(const StatementVerifier &other) const; //! Check whether expressions within this verifier match void CheckExpressions() const; //! Run the select statement and store the result virtual bool Run(ClientContext &context, const string &query, const std::function(const string &, unique_ptr)> &run); //! Compare this verifier's results with another verifier string CompareResults(const StatementVerifier &other); public: const VerificationType type; const string name; unique_ptr statement; const vector> &select_list; unique_ptr materialized_result; virtual bool RequireEquality() const { return true; } virtual bool DisableOptimizer() const { return false; } virtual bool DisableOperatorCaching() const { return false; } virtual bool ForceExternal() const { return false; } }; } // namespace duckdb