|
55 | 55 | import com.redis.lettucemod.search.Reducers.Sum;
|
56 | 56 | import com.redis.lettucemod.search.querybuilder.Node;
|
57 | 57 | import com.redis.lettucemod.search.querybuilder.QueryBuilder;
|
| 58 | +import com.redis.lettucemod.search.querybuilder.QueryNode; |
58 | 59 | import com.redis.lettucemod.search.querybuilder.Value;
|
59 | 60 | import com.redis.lettucemod.search.querybuilder.Values;
|
60 | 61 | import com.redis.lettucemod.util.RedisModulesUtils;
|
@@ -151,13 +152,25 @@ private Optional<Node> buildPredicate(RediSearchColumnHandle column, Domain doma
|
151 | 152 | }
|
152 | 153 | }
|
153 | 154 | }
|
| 155 | + singleValues(column, singleValues).ifPresent(disjuncts::add); |
| 156 | + return Optional.of(QueryBuilder.union(disjuncts.toArray(Node[]::new))); |
| 157 | + } |
| 158 | + |
| 159 | + private Optional<QueryNode> singleValues(RediSearchColumnHandle column, Set<Object> singleValues) { |
| 160 | + if (singleValues.isEmpty()) { |
| 161 | + return Optional.empty(); |
| 162 | + } |
154 | 163 | if (singleValues.size() == 1) {
|
155 |
| - disjuncts.add(QueryBuilder.intersect(columnName, value(Iterables.getOnlyElement(singleValues), column))); |
156 |
| - } else if (singleValues.size() > 1) { |
157 |
| - disjuncts.add(QueryBuilder.union(columnName, |
158 |
| - singleValues.stream().map(v -> value(v, column)).toArray(Value[]::new))); |
| 164 | + return Optional.of( |
| 165 | + QueryBuilder.intersect(column.getName(), value(Iterables.getOnlyElement(singleValues), column))); |
159 | 166 | }
|
160 |
| - return Optional.of(QueryBuilder.union(disjuncts.toArray(Node[]::new))); |
| 167 | + if (column.getType() instanceof VarcharType && column.getFieldType() == Field.Type.TAG) { |
| 168 | + // Takes care of IN: col IN ('value1', 'value2', ...) |
| 169 | + return Optional |
| 170 | + .of(QueryBuilder.intersect(column.getName(), Values.tags(singleValues.toArray(String[]::new)))); |
| 171 | + } |
| 172 | + Value[] values = singleValues.stream().map(v -> value(v, column)).toArray(Value[]::new); |
| 173 | + return Optional.of(QueryBuilder.union(column.getName(), values)); |
161 | 174 | }
|
162 | 175 |
|
163 | 176 | private Value value(Object trinoNativeValue, RediSearchColumnHandle column) {
|
|
0 commit comments