//===----------------------------------------------------------------------===// // DuckDB // // duckdb/parser/expression/columnref_expression.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/parser/parsed_expression.hpp" #include "duckdb/common/vector.hpp" namespace duckdb { //! Represents a reference to a column from either the FROM clause or from an //! alias class ColumnRefExpression : public ParsedExpression { public: static constexpr const ExpressionClass TYPE = ExpressionClass::COLUMN_REF; public: //! Specify both the column and table name ColumnRefExpression(string column_name, string table_name); //! Only specify the column name, the table name will be derived later explicit ColumnRefExpression(string column_name); //! Specify a set of names explicit ColumnRefExpression(vector column_names); //! The stack of names in order of which they appear (column_names[0].column_names[1].column_names[2]....) vector column_names; public: bool IsQualified() const; const string &GetColumnName() const; const string &GetTableName() const; bool IsScalar() const override { return false; } string GetName() const override; string ToString() const override; static bool Equal(const ColumnRefExpression &a, const ColumnRefExpression &b); hash_t Hash() const override; unique_ptr Copy() const override; void Serialize(FieldWriter &writer) const override; static unique_ptr Deserialize(ExpressionType type, FieldReader &source); void FormatSerialize(FormatSerializer &serializer) const override; static unique_ptr FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer); }; } // namespace duckdb