2013-05-08 09:52:02 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <DB/DataTypes/IDataTypeDummy.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Лямбда-выражение.
|
|
|
|
|
*/
|
|
|
|
|
class DataTypeExpression : public IDataTypeDummy
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
DataTypes argument_types;
|
|
|
|
|
DataTypePtr return_type;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
/// Некоторые типы могут быть еще не известны.
|
2014-04-08 07:31:51 +00:00
|
|
|
|
DataTypeExpression(DataTypes argument_types_ = DataTypes(), DataTypePtr return_type_ = nullptr)
|
2013-05-08 09:52:02 +00:00
|
|
|
|
: argument_types(argument_types_), return_type(return_type_) {}
|
|
|
|
|
|
|
|
|
|
std::string getName() const
|
|
|
|
|
{
|
|
|
|
|
std::string res = "Expression(";
|
|
|
|
|
if (argument_types.size() > 1)
|
|
|
|
|
res += "(";
|
|
|
|
|
for (size_t i = 0; i < argument_types.size(); ++i)
|
|
|
|
|
{
|
|
|
|
|
if (i > 0)
|
|
|
|
|
res += ", ";
|
2013-05-24 10:49:19 +00:00
|
|
|
|
const DataTypePtr & type = argument_types[i];
|
2013-05-08 09:52:02 +00:00
|
|
|
|
res += type ? type->getName() : "?";
|
|
|
|
|
}
|
|
|
|
|
if (argument_types.size() > 1)
|
|
|
|
|
res += ")";
|
|
|
|
|
res += " -> ";
|
|
|
|
|
res += return_type ? return_type->getName() : "?";
|
|
|
|
|
res += ")";
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DataTypePtr clone() const
|
|
|
|
|
{
|
|
|
|
|
return new DataTypeExpression(argument_types, return_type);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const DataTypes & getArgumentTypes() const
|
|
|
|
|
{
|
|
|
|
|
return argument_types;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const DataTypePtr & getReturnType() const
|
|
|
|
|
{
|
|
|
|
|
return return_type;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|