|
33 | 33 | import org.apache.arrow.vector.complex.writer.BaseWriter.StructWriter;
|
34 | 34 | import org.apache.arrow.vector.complex.writer.FieldWriter;
|
35 | 35 | import org.apache.arrow.vector.holders.DecimalHolder;
|
| 36 | +import org.apache.arrow.vector.holders.DurationHolder; |
| 37 | +import org.apache.arrow.vector.types.TimeUnit; |
36 | 38 | import org.apache.arrow.vector.types.Types;
|
37 | 39 | import org.apache.arrow.vector.types.pojo.ArrowType;
|
38 | 40 | import org.apache.arrow.vector.types.pojo.FieldType;
|
@@ -845,4 +847,141 @@ public void testCopyMapVectorWithMapValue() {
|
845 | 847 | assertTrue(VectorEqualsVisitor.vectorEquals(from, to));
|
846 | 848 | }
|
847 | 849 | }
|
| 850 | + |
| 851 | + @Test |
| 852 | + public void testCopyDurationVector() { |
| 853 | + try (ListVector from = ListVector.empty("v", allocator); |
| 854 | + ListVector to = ListVector.empty("v", allocator)) { |
| 855 | + |
| 856 | + UnionListWriter listWriter = from.getWriter(); |
| 857 | + listWriter.allocate(); |
| 858 | + |
| 859 | + DurationHolder durationHolder = new DurationHolder(); |
| 860 | + for (int i = 0; i < COUNT; i++) { |
| 861 | + listWriter.setPosition(i); |
| 862 | + listWriter.startList(); |
| 863 | + durationHolder.value = 123456789L; |
| 864 | + durationHolder.unit = TimeUnit.MILLISECOND; |
| 865 | + listWriter.duration().write(durationHolder); |
| 866 | + listWriter.endList(); |
| 867 | + } |
| 868 | + from.setValueCount(COUNT); |
| 869 | + |
| 870 | + FieldReader in = from.getReader(); |
| 871 | + FieldWriter out = to.getWriter(); |
| 872 | + for (int i = 0; i < COUNT; i++) { |
| 873 | + in.setPosition(i); |
| 874 | + out.setPosition(i); |
| 875 | + ComplexCopier.copy(in, out); |
| 876 | + } |
| 877 | + |
| 878 | + to.setValueCount(COUNT); |
| 879 | + |
| 880 | + assertTrue(VectorEqualsVisitor.vectorEquals(from, to)); |
| 881 | + } |
| 882 | + } |
| 883 | + |
| 884 | + @Test |
| 885 | + public void testCopyListVectorWithDuration() { |
| 886 | + try (ListVector from = ListVector.empty("v", allocator); |
| 887 | + ListVector to = ListVector.empty("v", allocator)) { |
| 888 | + |
| 889 | + UnionListWriter listWriter = from.getWriter(); |
| 890 | + listWriter.allocate(); |
| 891 | + |
| 892 | + DurationHolder durationHolder = new DurationHolder(); |
| 893 | + for (int i = 0; i < COUNT; i++) { |
| 894 | + listWriter.setPosition(i); |
| 895 | + listWriter.startList(); |
| 896 | + durationHolder.value = 123456789L; |
| 897 | + durationHolder.unit = TimeUnit.MILLISECOND; |
| 898 | + listWriter.duration().write(durationHolder); |
| 899 | + listWriter.endList(); |
| 900 | + } |
| 901 | + from.setValueCount(COUNT); |
| 902 | + |
| 903 | + // Copy values |
| 904 | + FieldReader in = from.getReader(); |
| 905 | + FieldWriter out = to.getWriter(); |
| 906 | + for (int i = 0; i < COUNT; i++) { |
| 907 | + in.setPosition(i); |
| 908 | + out.setPosition(i); |
| 909 | + ComplexCopier.copy(in, out); |
| 910 | + } |
| 911 | + |
| 912 | + to.setValueCount(COUNT); |
| 913 | + |
| 914 | + assertTrue(VectorEqualsVisitor.vectorEquals(from, to)); |
| 915 | + } |
| 916 | + } |
| 917 | + |
| 918 | + @Test |
| 919 | + public void testCopyMapVectorWithDurationValue() { |
| 920 | + try (MapVector from = MapVector.empty("v", allocator, false); |
| 921 | + MapVector to = MapVector.empty("v", allocator, false)) { |
| 922 | + |
| 923 | + UnionMapWriter mapWriter = from.getWriter(); |
| 924 | + mapWriter.allocate(); |
| 925 | + |
| 926 | + DurationHolder durationHolder = new DurationHolder(); |
| 927 | + for (int i = 0; i < COUNT; i++) { |
| 928 | + mapWriter.setPosition(i); |
| 929 | + mapWriter.startMap(); |
| 930 | + mapWriter.startEntry(); |
| 931 | + mapWriter.key().integer().writeInt(i); |
| 932 | + durationHolder.value = 123456789L; |
| 933 | + durationHolder.unit = TimeUnit.MILLISECOND; |
| 934 | + mapWriter.value().duration().write(durationHolder); |
| 935 | + mapWriter.endEntry(); |
| 936 | + mapWriter.endMap(); |
| 937 | + } |
| 938 | + from.setValueCount(COUNT); |
| 939 | + |
| 940 | + FieldReader in = from.getReader(); |
| 941 | + FieldWriter out = to.getWriter(); |
| 942 | + for (int i = 0; i < COUNT; i++) { |
| 943 | + in.setPosition(i); |
| 944 | + out.setPosition(i); |
| 945 | + ComplexCopier.copy(in, out); |
| 946 | + } |
| 947 | + |
| 948 | + to.setValueCount(COUNT); |
| 949 | + |
| 950 | + assertTrue(VectorEqualsVisitor.vectorEquals(from, to)); |
| 951 | + } |
| 952 | + } |
| 953 | + |
| 954 | + @Test |
| 955 | + public void testCopyStructVectorWithDurationValue() { |
| 956 | + try (StructVector from = StructVector.empty("v", allocator); |
| 957 | + StructVector to = StructVector.empty("v", allocator)) { |
| 958 | + |
| 959 | + from.allocateNew(); |
| 960 | + |
| 961 | + NullableStructWriter structWriter = from.getWriter(); |
| 962 | + DurationHolder durationHolder = new DurationHolder(); |
| 963 | + |
| 964 | + for (int i = 0; i < COUNT; i++) { |
| 965 | + structWriter.setPosition(i); |
| 966 | + structWriter.start(); |
| 967 | + durationHolder.value = 123456789L; |
| 968 | + durationHolder.unit = TimeUnit.MILLISECOND; |
| 969 | + structWriter.duration("durationField").write(durationHolder); // 使用 DurationHolder |
| 970 | + structWriter.end(); |
| 971 | + } |
| 972 | + |
| 973 | + from.setValueCount(COUNT); |
| 974 | + |
| 975 | + FieldReader in = from.getReader(); |
| 976 | + FieldWriter out = to.getWriter(); |
| 977 | + for (int i = 0; i < COUNT; i++) { |
| 978 | + in.setPosition(i); |
| 979 | + out.setPosition(i); |
| 980 | + ComplexCopier.copy(in, out); |
| 981 | + } |
| 982 | + to.setValueCount(COUNT); |
| 983 | + |
| 984 | + assertTrue(VectorEqualsVisitor.vectorEquals(from, to)); |
| 985 | + } |
| 986 | + } |
848 | 987 | }
|
0 commit comments