| 838 | } |
| 839 | |
| 840 | void exportValues( |
| 841 | const BaseVector& vec, |
| 842 | const Selection& rows, |
| 843 | const ArrowOptions& options, |
| 844 | ArrowArray& out, |
| 845 | memory::MemoryPool* pool, |
| 846 | BoltToArrowBridgeHolder& holder) { |
| 847 | const auto& type = vec.type(); |
| 848 | out.n_buffers = 2; |
| 849 | |
| 850 | if (!vec.values()) { |
| 851 | // all values are null. |
| 852 | BOLT_CHECK_EQ(out.null_count, out.length); |
| 853 | |
| 854 | switch (vec.typeKind()) { |
| 855 | case TypeKind::BOOLEAN: |
| 856 | case TypeKind::TINYINT: |
| 857 | holder.setBuffer(1, AlignedBuffer::allocate<uint8_t>(vec.size(), pool)); |
| 858 | break; |
| 859 | case TypeKind::SMALLINT: |
| 860 | holder.setBuffer( |
| 861 | 1, AlignedBuffer::allocate<uint16_t>(vec.size(), pool)); |
| 862 | break; |
| 863 | case TypeKind::INTEGER: |
| 864 | holder.setBuffer( |
| 865 | 1, AlignedBuffer::allocate<uint32_t>(vec.size(), pool)); |
| 866 | break; |
| 867 | case TypeKind::BIGINT: |
| 868 | holder.setBuffer( |
| 869 | 1, AlignedBuffer::allocate<uint64_t>(vec.size(), pool)); |
| 870 | break; |
| 871 | case TypeKind::HUGEINT: |
| 872 | holder.setBuffer( |
| 873 | 1, AlignedBuffer::allocate<uint128_t>(vec.size(), pool)); |
| 874 | break; |
| 875 | case TypeKind::REAL: |
| 876 | holder.setBuffer(1, AlignedBuffer::allocate<float>(vec.size(), pool)); |
| 877 | break; |
| 878 | case TypeKind::DOUBLE: |
| 879 | holder.setBuffer(1, AlignedBuffer::allocate<double>(vec.size(), pool)); |
| 880 | break; |
| 881 | case TypeKind::TIMESTAMP: |
| 882 | holder.setBuffer( |
| 883 | 1, AlignedBuffer::allocate<uint128_t>(vec.size(), pool)); |
| 884 | break; |
| 885 | default: |
| 886 | BOLT_UNREACHABLE(); |
| 887 | } |
| 888 | return; |
| 889 | } |
| 890 | if (!rows.changed() && isFlatScalarZeroCopy(type)) { |
| 891 | // Arrow does not allow a nullptr for the values buffer. |
| 892 | // The all-null (no values buffer) case is handled above. |
| 893 | BOLT_DCHECK(vec.values()); |
| 894 | holder.setBuffer(1, vec.values()); |
| 895 | return; |
| 896 | } |
| 897 |
no test coverage detected