in cpp-ch/local-engine/Builder/SerializedPlanBuilder.cpp [38:120]
SchemaPtr SerializedSchemaBuilder::build()
{
for (const auto & [name, type] : this->type_map)
{
this->schema->add_names(name);
auto * type_struct = this->schema->mutable_struct_();
if (type == "I8")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_i8()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "I32")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_i32()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "I64")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_i64()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "Boolean")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_bool_()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "I16")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_i16()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "String")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_string()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "FP32")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_fp32()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "FP64")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_fp64()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "Date")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_date()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else if (type == "Timestamp")
{
auto * t = type_struct->mutable_types()->Add();
t->mutable_timestamp()->set_nullability(
this->nullability_map[name] ? substrait::Type_Nullability_NULLABILITY_NULLABLE
: substrait::Type_Nullability_NULLABILITY_REQUIRED);
}
else
{
throw std::runtime_error("doesn't support type " + type);
}
}
return std::move(this->schema);
}