MCPcopy Create free account
hub / github.com/bytedance/bolt / gatherFromTimestampBuffer

Function gatherFromTimestampBuffer

bolt/vector/arrow/Bridge.cpp:445–508  ·  view source on GitHub ↗

Gather values from timestamp buffer. Nulls are skipped.

Source from the content-addressed store, hash-verified

443
444// Gather values from timestamp buffer. Nulls are skipped.
445void gatherFromTimestampBuffer(
446 const BaseVector& vec,
447 const Selection& rows,
448 TimestampUnit unit,
449 Buffer& out) {
450 auto src = (*vec.values()).as<Timestamp>();
451 auto dst = out.asMutable<int64_t>();
452 vector_size_t j = 0; // index into dst
453 if (!vec.mayHaveNulls()) {
454 switch (unit) {
455 case TimestampUnit::kSecond:
456 rows.apply([&](vector_size_t i) { dst[j++] = src[i].getSeconds(); });
457 break;
458 case TimestampUnit::kMilli:
459 rows.apply([&](vector_size_t i) { dst[j++] = src[i].toMillis(); });
460 break;
461 case TimestampUnit::kMicro:
462 rows.apply([&](vector_size_t i) { dst[j++] = src[i].toMicros(); });
463 break;
464 case TimestampUnit::kNano:
465 rows.apply([&](vector_size_t i) { dst[j++] = src[i].toNanos(); });
466 break;
467 default:
468 BOLT_UNREACHABLE();
469 }
470 return;
471 }
472 switch (unit) {
473 case TimestampUnit::kSecond:
474 rows.apply([&](vector_size_t i) {
475 if (!vec.isNullAt(i)) {
476 dst[j] = src[i].getSeconds();
477 }
478 j++;
479 });
480 break;
481 case TimestampUnit::kMilli:
482 rows.apply([&](vector_size_t i) {
483 if (!vec.isNullAt(i)) {
484 dst[j] = src[i].toMillis();
485 }
486 j++;
487 });
488 break;
489 case TimestampUnit::kMicro:
490 rows.apply([&](vector_size_t i) {
491 if (!vec.isNullAt(i)) {
492 dst[j] = src[i].toMicros();
493 };
494 j++;
495 });
496 break;
497 case TimestampUnit::kNano:
498 rows.apply([&](vector_size_t i) {
499 if (!vec.isNullAt(i)) {
500 dst[j] = src[i].toNanos();
501 }
502 j++;

Callers 1

exportValuesFunction · 0.85

Calls 4

valuesMethod · 0.45
mayHaveNullsMethod · 0.45
applyMethod · 0.45
isNullAtMethod · 0.45

Tested by

no test coverage detected