@@ -1004,7 +1004,6 @@ void BaseVector::transposeIndices(
1004
1004
const vector_size_t * wrapIndices,
1005
1005
vector_size_t * resultIndices) {
1006
1006
#if XSIMD_WITH_AVX2
1007
-
1008
1007
constexpr int32_t kBatch = xsimd::batch<int32_t >::size;
1009
1008
static_assert (kBatch == 8 );
1010
1009
static_assert (sizeof (vector_size_t ) == sizeof (int32_t ));
@@ -1021,7 +1020,9 @@ void BaseVector::transposeIndices(
1021
1020
.store_unaligned (resultIndices + i);
1022
1021
}
1023
1022
#else
1024
- VELOX_NYI ();
1023
+ for (auto i = 0 ; i < wrapSize; ++i) {
1024
+ resultIndices[i] = baseIndices[wrapIndices[i]];
1025
+ }
1025
1026
#endif
1026
1027
}
1027
1028
@@ -1035,7 +1036,6 @@ void BaseVector::transposeIndicesWithNulls(
1035
1036
vector_size_t * resultIndices,
1036
1037
uint64_t * resultNulls) {
1037
1038
#if XSIMD_WITH_AVX2
1038
-
1039
1039
constexpr int32_t kBatch = xsimd::batch<int32_t >::size;
1040
1040
static_assert (kBatch == 8 );
1041
1041
static_assert (sizeof (vector_size_t ) == sizeof (int32_t ));
@@ -1061,7 +1061,22 @@ void BaseVector::transposeIndicesWithNulls(
1061
1061
.store_unaligned (resultIndices + i);
1062
1062
}
1063
1063
#else
1064
- VELOX_NYI ();
1064
+ for (auto i = 0 ; i < wrapSize; ++i) {
1065
+ auto index = wrapIndices[i];
1066
+ bool wrapIsNull = wrapNulls && bits::isBitNull (wrapNulls, i);
1067
+ if (wrapIsNull) {
1068
+ bits::setNull (resultNulls, i, true );
1069
+ continue ;
1070
+ }
1071
+ if (baseNulls) {
1072
+ if (bits::isBitNull (baseNulls, index )) {
1073
+ bits::setNull (resultNulls, i, true );
1074
+ continue ;
1075
+ }
1076
+ bits::clearNull (resultNulls, i);
1077
+ resultIndices[i] = baseIndices[index ];
1078
+ }
1079
+ }
1065
1080
#endif
1066
1081
}
1067
1082
0 commit comments