text: //===----------------------------------------------------------------------===//
  //                         DuckDB
  //
  // parser/tableref.hpp
  //
  //
  //===----------------------------------------------------------------------===//
  
  #pragma once
  
  #include "duckdb/common/common.hpp"
  #include "duckdb/common/enums/tableref_type.hpp"
  
  namespace duckdb {
  class Deserializer;
  class Serializer;
  
  //! Represents a generic expression that returns a table.
  class TableRef {
  public:
  	TableRef(TableReferenceType type) : type(type) {
  	}
  	virtual ~TableRef() {
  	}
  
  	TableReferenceType type;
  	string alias;
  
  public:
  	//! Convert the object to a string
  	virtual string ToString() const {
  		return string();
  	}
  	void Print();
  
  	virtual bool Equals(const TableRef *other) const {
  		return other && type == other->type && alias == other->alias;
  	}
  
  	virtual unique_ptr<TableRef> Copy() = 0;
  
  	//! Serializes a TableRef to a stand-alone binary blob
  	virtual void Serialize(Serializer &serializer);
  	//! Deserializes a blob back into a TableRef
  	static unique_ptr<TableRef> Deserialize(Deserializer &source);
  };
  } // namespace duckdb
  