MCPcopy Create free account
hub / github.com/apache/cloudberry / Serialize

Method Serialize

contrib/pax_storage/src/cpp/storage/micro_partition_stats.cc:515–622  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

513MicroPartitionStats::~MicroPartitionStats() {}
514
515::pax::stats::MicroPartitionStatisticsInfo *MicroPartitionStats::Serialize() {
516 auto n = tuple_desc_->natts;
517 stats::ColumnDataStats *data_stats;
518
519 for (auto column_index = 0; column_index < n; column_index++) {
520 // set const stats
521 stats_->SetAllNull(
522 column_index,
523 column_mem_stats_[column_index].null_count_stats_.all_null);
524 stats_->SetHasNull(
525 column_index,
526 column_mem_stats_[column_index].null_count_stats_.has_null);
527 stats_->SetNonNullRows(
528 column_index,
529 column_mem_stats_[column_index].null_count_stats_.not_null_count);
530
531 // clear the in-memory stats
532 column_mem_stats_[column_index].null_count_stats_.Reset();
533
534 data_stats = stats_->GetColumnDataStats(column_index);
535 // only STATUS_NEED_UPDATE need set to the stats_
536 if (column_mem_stats_[column_index].min_max_stats_.status ==
537 STATUS_NEED_UPDATE) {
538 auto att = TupleDescAttr(tuple_desc_, column_index);
539 auto typlen = att->attlen;
540 auto typbyval = att->attbyval;
541
542 data_stats->set_minimal(
543 ToValue(column_mem_stats_[column_index].min_max_stats_.min_in_mem,
544 typlen, typbyval));
545 data_stats->set_maximum(
546 ToValue(column_mem_stats_[column_index].min_max_stats_.max_in_mem,
547 typlen, typbyval));
548
549 // after serialize to pb, clear the memory
550 if (!typbyval && typlen == -1) {
551 buffer_holders_.erase(
552 column_mem_stats_[column_index].min_max_stats_.min_in_mem);
553 buffer_holders_.erase(
554 column_mem_stats_[column_index].min_max_stats_.max_in_mem);
555 }
556 column_mem_stats_[column_index].min_max_stats_.min_in_mem = 0;
557 column_mem_stats_[column_index].min_max_stats_.max_in_mem = 0;
558 }
559
560 if (column_mem_stats_[column_index].sum_stats_.status ==
561 STATUS_NEED_UPDATE) {
562 if (column_mem_stats_[column_index].sum_stats_.final_func_exist &&
563 !column_mem_stats_[column_index].sum_stats_.final_func_called) {
564 auto newval = cbdb::FunctionCall1Coll(
565 &column_mem_stats_[column_index].sum_stats_.final_func, InvalidOid,
566 column_mem_stats_[column_index].sum_stats_.result);
567
568#ifdef USE_ASSERT_CHECKING
569 auto newvalue_vl = (struct varlena *)cbdb::DatumToPointer(newval);
570 auto detoast_newval = cbdb::PgDeToastDatum(newvalue_vl);
571 Assert(newval == PointerGetDatum(detoast_newval));
572#endif // USE_ASSERT_CHECKING

Callers 3

UpdateStatsInAuxTableMethod · 0.45
WriteStripeMethod · 0.45
CloseMethod · 0.45

Calls 12

FunctionCall1CollFunction · 0.85
DatumToPointerFunction · 0.85
PfreeFunction · 0.85
datumCopyFunction · 0.85
SetAllNullMethod · 0.80
SetHasNullMethod · 0.80
SetNonNullRowsMethod · 0.80
GetColumnDataStatsMethod · 0.80
GetBitSetMethod · 0.80
GetStatsInfoRefMethod · 0.80
ResetMethod · 0.45

Tested by

no test coverage detected