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

Function exportViews

bolt/vector/arrow/Bridge.cpp:916–1064  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

914}
915
916void exportViews(
917 const FlatVector<StringView>& vec,
918 const Selection& rows,
919 const ArrowOptions& options,
920 ArrowArray& out,
921 memory::MemoryPool* pool,
922 BoltToArrowBridgeHolder& holder) {
923 auto stringBuffers = vec.stringBuffers();
924 size_t numStringBuffers = stringBuffers.size();
925 size_t nonInlineCnt = 0, scanned = 0;
926 rows.apply([&](vector_size_t i) {
927 ++scanned;
928 if (!vec.isNullAt(i) && !vec.valueAtFast(i).isInline())
929 ++nonInlineCnt;
930 });
931 bool rebuiltFallback = false;
932 std::vector<uint64_t> fbOffsets;
933 BufferPtr fbBuf;
934 constexpr uint64_t kNoOffset = ~uint64_t{0};
935
936 if (nonInlineCnt > 0 && numStringBuffers == 0 && options.exportToArrowIPC) {
937 LOG(ERROR) << "[exportViews] non-inline strings but stringBuffers empty!";
938 std::vector<uint64_t> fbOffsets;
939 BufferPtr fbBuf;
940 constexpr uint64_t kNoOffset = ~uint64_t{0};
941
942 if (nonInlineCnt > 0 && numStringBuffers == 0) {
943 LOG(WARNING) << "[exportViews] building fallback single string buffer";
944 size_t totalBytes = 0;
945 rows.apply([&](vector_size_t i) {
946 if (!vec.isNullAt(i)) {
947 auto sv = vec.valueAtFast(i);
948 if (!sv.isInline())
949 totalBytes += sv.size();
950 }
951 });
952
953 if (totalBytes > 0) {
954 fbBuf = AlignedBuffer::allocate<char>(totalBytes, pool);
955 char* dst = fbBuf->asMutable<char>();
956
957 fbOffsets.assign(out.length, kNoOffset);
958 size_t cursor = 0;
959 vector_size_t j = 0;
960 rows.apply([&](vector_size_t i) {
961 if (!vec.isNullAt(i)) {
962 auto sv = vec.valueAtFast(i);
963 if (!sv.isInline() && sv.size() > 0) {
964 memcpy(dst + cursor, sv.data(), sv.size());
965 fbOffsets[j] = cursor;
966 cursor += sv.size();
967 }
968 }
969 ++j;
970 });
971
972 stringBuffers.clear();
973 stringBuffers.push_back(fbBuf);

Callers 1

exportFlatFunction · 0.85

Calls 15

memcpyFunction · 0.85
isBitNullFunction · 0.85
ensureWritableFunction · 0.85
isInlineMethod · 0.80
getArrowBuffersMethod · 0.80
setBufferMethod · 0.80
uniqueMethod · 0.80
sizeMethod · 0.45
applyMethod · 0.45
isNullAtMethod · 0.45
valueAtFastMethod · 0.45
assignMethod · 0.45

Tested by

no test coverage detected