@@ -139,40 +139,6 @@ class VectorSetInPredicate : public exec::VectorFunction {
139139 const VectorPtr originalValues_;
140140};
141141
142- // Read 'size' values from 'valuesVector' starting at 'offset', de-duplicate
143- // remove nulls and sort. Return a list of unique non-null values sorted in
144- // ascending order and a boolean indicating whether there were any null values.
145- template <typename T, typename U = T>
146- std::pair<std::vector<T>, bool > toValues (
147- const VectorPtr& valuesVector,
148- vector_size_t offset,
149- vector_size_t size) {
150- auto simpleValues = valuesVector->as <SimpleVector<U>>();
151-
152- bool nullAllowed = false ;
153- std::vector<T> values;
154- values.reserve (size);
155-
156- for (auto i = offset; i < offset + size; i++) {
157- if (simpleValues->isNullAt (i)) {
158- nullAllowed = true ;
159- } else {
160- if constexpr (std::is_same_v<U, Timestamp>) {
161- values.emplace_back (simpleValues->valueAt (i).toMillis ());
162- } else {
163- values.emplace_back (simpleValues->valueAt (i));
164- }
165- }
166- }
167-
168- // In-place sort, remove duplicates, and later std::move to save memory
169- std::sort (values.begin (), values.end ());
170- auto last = std::unique (values.begin (), values.end ());
171- values.resize (std::distance (values.begin (), last));
172-
173- return {std::move (values), nullAllowed};
174- }
175-
176142// Creates a filter for constant values. A null filter means either
177143// no values or only null values. The boolean is true if the list is
178144// non-empty and consists of nulls only.
@@ -181,7 +147,8 @@ std::pair<std::unique_ptr<common::Filter>, bool> createBigintValuesFilter(
181147 const VectorPtr& valuesVector,
182148 vector_size_t offset,
183149 vector_size_t size) {
184- auto valuesPair = toValues<int64_t , T>(valuesVector, offset, size);
150+ auto valuesPair =
151+ common::deDuplicateValues<int64_t , T>(valuesVector, offset, size);
185152
186153 const auto & values = valuesPair.first ;
187154 bool nullAllowed = valuesPair.second ;
@@ -210,7 +177,7 @@ createFloatingPointValuesFilter(
210177 const VectorPtr& valuesVector,
211178 vector_size_t offset,
212179 vector_size_t size) {
213- auto valuesPair = toValues <T, T>(valuesVector, offset, size);
180+ auto valuesPair = common::deDuplicateValues <T, T>(valuesVector, offset, size);
214181
215182 auto & values = valuesPair.first ;
216183 bool nullAllowed = valuesPair.second ;
@@ -252,7 +219,8 @@ std::pair<std::unique_ptr<common::Filter>, bool> createHugeintValuesFilter(
252219 const VectorPtr& valuesVector,
253220 vector_size_t offset,
254221 vector_size_t size) {
255- auto valuesPair = toValues<int128_t , T>(valuesVector, offset, size);
222+ auto valuesPair =
223+ common::deDuplicateValues<int128_t , T>(valuesVector, offset, size);
256224
257225 const auto & values = valuesPair.first ;
258226 bool nullAllowed = valuesPair.second ;
@@ -278,8 +246,8 @@ std::pair<std::unique_ptr<common::Filter>, bool> createBytesValuesFilter(
278246 const VectorPtr& valuesVector,
279247 vector_size_t offset,
280248 vector_size_t size) {
281- auto valuesPair =
282- toValues<std::string, StringView>( valuesVector, offset, size);
249+ auto valuesPair = common::deDuplicateValues<std::string, StringView>(
250+ valuesVector, offset, size);
283251
284252 const auto & values = valuesPair.first ;
285253 bool nullAllowed = valuesPair.second ;
0 commit comments