in cpp/src/graphar/arrow/chunk_writer.cc [586:634]
Status EdgeChunkWriter::validate(
const std::shared_ptr<arrow::Table>& input_table, IdType vertex_chunk_index,
IdType chunk_index, ValidateLevel validate_level) const {
// use the writer's validate level
if (validate_level == ValidateLevel::default_validate)
validate_level = validate_level_;
// no validate
if (validate_level == ValidateLevel::no_validate)
return Status::OK();
// validate for adj list type & index
GAR_RETURN_NOT_OK(validate(vertex_chunk_index, chunk_index, validate_level));
// weak validate for the input table
if (input_table->num_rows() > edge_info_->GetChunkSize()) {
return Status::Invalid(
"The number of rows of input table is ", input_table->num_rows(),
" which is larger than the ", edge_info_->GetEdgeType(),
" edge chunk size ", edge_info_->GetChunkSize(), ".");
}
// strong validate for the input table
if (validate_level == ValidateLevel::strong_validate) {
auto schema = input_table->schema();
int index = schema->GetFieldIndex(GeneralParams::kSrcIndexCol);
if (index == -1) {
return Status::Invalid("The source index column ",
GeneralParams::kSrcIndexCol,
" does not exist in the input table");
}
auto field = schema->field(index);
if (field->type()->id() != arrow::Type::INT64) {
return Status::TypeError(
"The data type for source index column should be INT64, but got ",
field->type()->name());
}
index = schema->GetFieldIndex(GeneralParams::kDstIndexCol);
if (index == -1) {
return Status::Invalid("The destination index column ",
GeneralParams::kDstIndexCol,
" does not exist in the input table");
}
field = schema->field(index);
if (field->type()->id() != arrow::Type::INT64) {
return Status::TypeError(
"The data type for destination index column should be INT64, but "
"got ",
field->type()->name());
}
}
return Status::OK();
}