in backend/schema/updater/ddl_type_conversion.cc [244:297]
ddl::TypeDefinition GoogleSqlTypeToDDLType(const zetasql::Type* type) {
ddl::TypeDefinition type_def;
if (type->IsArray()) {
type_def.set_type(ddl::TypeDefinition::ARRAY);
*type_def.mutable_array_subtype() =
GoogleSqlTypeToDDLType(type->AsArray()->element_type());
return type_def;
}
if (type->IsStruct()) {
type_def.set_type(ddl::TypeDefinition::STRUCT);
for (const zetasql::StructField& field : type->AsStruct()->fields()) {
ddl::TypeDefinition::StructDescriptor::Field* ddl_field =
type_def.mutable_struct_descriptor()->add_field();
ddl_field->set_name(field.name);
*ddl_field->mutable_type() = GoogleSqlTypeToDDLType(field.type);
}
return type_def;
}
type_def.set_type(ddl::TypeDefinition::NONE);
if (type->IsDouble()) type_def.set_type(ddl::TypeDefinition::DOUBLE);
if (type->IsFloat()) type_def.set_type(ddl::TypeDefinition::FLOAT);
if (type->IsInt64()) type_def.set_type(ddl::TypeDefinition::INT64);
if (type->IsBool()) type_def.set_type(ddl::TypeDefinition::BOOL);
if (type->IsString()) type_def.set_type(ddl::TypeDefinition::STRING);
if (type->IsBytes()) type_def.set_type(ddl::TypeDefinition::BYTES);
if (type->IsTimestamp()) type_def.set_type(ddl::TypeDefinition::TIMESTAMP);
if (type->IsDate()) type_def.set_type(ddl::TypeDefinition::DATE);
if (type->IsNumericType()) type_def.set_type(ddl::TypeDefinition::NUMERIC);
if (type->IsJson()) type_def.set_type(ddl::TypeDefinition::JSON);
if (type->IsTokenList()) type_def.set_type(ddl::TypeDefinition::TOKENLIST);
if (type->IsInterval()) type_def.set_type(ddl::TypeDefinition::INTERVAL);
if (type->IsProto()) {
type_def.set_type(ddl::TypeDefinition::NONE);
type_def.set_proto_type_name(type->AsProto()->descriptor()->full_name());
}
if (type->IsEnum()) {
type_def.set_type(ddl::TypeDefinition::NONE);
type_def.set_proto_type_name(
type->AsEnum()->enum_descriptor()->full_name());
}
if (type->IsExtendedType()) {
if (type->Equals(postgres_translator::spangres::types::PgNumericMapping()
->mapped_type())) {
type_def.set_type(ddl::TypeDefinition::PG_NUMERIC);
} else if (type->Equals(
postgres_translator::spangres::types::PgJsonbMapping()
->mapped_type())) {
type_def.set_type(ddl::TypeDefinition::PG_JSONB);
}
}
return type_def;
}