|
38 | 38 | import org.elasticsearch.xpack.ql.expression.predicate.regex.LikePattern;
|
39 | 39 | import org.elasticsearch.xpack.ql.expression.predicate.regex.RLike;
|
40 | 40 | import org.elasticsearch.xpack.ql.expression.predicate.regex.RegexMatch;
|
| 41 | +import org.elasticsearch.xpack.ql.querydsl.query.BoolQuery; |
| 42 | +import org.elasticsearch.xpack.ql.querydsl.query.ExistsQuery; |
| 43 | +import org.elasticsearch.xpack.ql.querydsl.query.GeoDistanceQuery; |
| 44 | +import org.elasticsearch.xpack.ql.querydsl.query.MatchQuery; |
| 45 | +import org.elasticsearch.xpack.ql.querydsl.query.MultiMatchQuery; |
| 46 | +import org.elasticsearch.xpack.ql.querydsl.query.NestedQuery; |
| 47 | +import org.elasticsearch.xpack.ql.querydsl.query.NotQuery; |
| 48 | +import org.elasticsearch.xpack.ql.querydsl.query.Query; |
| 49 | +import org.elasticsearch.xpack.ql.querydsl.query.QueryStringQuery; |
| 50 | +import org.elasticsearch.xpack.ql.querydsl.query.RangeQuery; |
| 51 | +import org.elasticsearch.xpack.ql.querydsl.query.RegexQuery; |
| 52 | +import org.elasticsearch.xpack.ql.querydsl.query.ScriptQuery; |
| 53 | +import org.elasticsearch.xpack.ql.querydsl.query.TermQuery; |
| 54 | +import org.elasticsearch.xpack.ql.querydsl.query.TermsQuery; |
| 55 | +import org.elasticsearch.xpack.ql.querydsl.query.WildcardQuery; |
41 | 56 | import org.elasticsearch.xpack.ql.tree.Source;
|
| 57 | +import org.elasticsearch.xpack.ql.type.DataType; |
| 58 | +import org.elasticsearch.xpack.ql.type.DataTypes; |
| 59 | +import org.elasticsearch.xpack.ql.util.CollectionUtils; |
42 | 60 | import org.elasticsearch.xpack.ql.util.Holder;
|
43 | 61 | import org.elasticsearch.xpack.ql.util.ReflectionUtils;
|
44 | 62 | import org.elasticsearch.xpack.sql.SqlIllegalArgumentException;
|
|
79 | 97 | import org.elasticsearch.xpack.sql.querydsl.agg.StatsAgg;
|
80 | 98 | import org.elasticsearch.xpack.sql.querydsl.agg.SumAgg;
|
81 | 99 | import org.elasticsearch.xpack.sql.querydsl.agg.TopHitsAgg;
|
82 |
| -import org.elasticsearch.xpack.sql.querydsl.query.BoolQuery; |
83 |
| -import org.elasticsearch.xpack.sql.querydsl.query.ExistsQuery; |
84 |
| -import org.elasticsearch.xpack.sql.querydsl.query.GeoDistanceQuery; |
85 |
| -import org.elasticsearch.xpack.sql.querydsl.query.MatchQuery; |
86 |
| -import org.elasticsearch.xpack.sql.querydsl.query.MultiMatchQuery; |
87 |
| -import org.elasticsearch.xpack.sql.querydsl.query.NestedQuery; |
88 |
| -import org.elasticsearch.xpack.sql.querydsl.query.NotQuery; |
89 |
| -import org.elasticsearch.xpack.sql.querydsl.query.Query; |
90 |
| -import org.elasticsearch.xpack.sql.querydsl.query.QueryStringQuery; |
91 |
| -import org.elasticsearch.xpack.sql.querydsl.query.RangeQuery; |
92 |
| -import org.elasticsearch.xpack.sql.querydsl.query.RegexQuery; |
93 |
| -import org.elasticsearch.xpack.sql.querydsl.query.ScriptQuery; |
94 |
| -import org.elasticsearch.xpack.sql.querydsl.query.TermQuery; |
95 |
| -import org.elasticsearch.xpack.sql.querydsl.query.TermsQuery; |
96 |
| -import org.elasticsearch.xpack.sql.querydsl.query.WildcardQuery; |
| 100 | +import org.elasticsearch.xpack.sql.type.SqlDataTypeConverter; |
97 | 101 | import org.elasticsearch.xpack.sql.util.Check;
|
98 | 102 |
|
99 | 103 | import java.time.OffsetTime;
|
100 | 104 | import java.time.ZonedDateTime;
|
101 | 105 | import java.time.temporal.TemporalAccessor;
|
102 | 106 | import java.util.Arrays;
|
| 107 | +import java.util.LinkedHashSet; |
103 | 108 | import java.util.List;
|
| 109 | +import java.util.Set; |
104 | 110 | import java.util.function.Supplier;
|
105 | 111 |
|
106 | 112 | import static java.util.Collections.singletonList;
|
@@ -584,9 +590,17 @@ protected QueryTranslation asQuery(In in, boolean onAggs) {
|
584 | 590 | else {
|
585 | 591 | Query q = null;
|
586 | 592 | if (in.value() instanceof FieldAttribute) {
|
587 |
| - FieldAttribute fa = (FieldAttribute) in.value(); |
588 | 593 | // equality should always be against an exact match (which is important for strings)
|
589 |
| - q = new TermsQuery(in.source(), fa.exactAttribute().name(), in.list()); |
| 594 | + FieldAttribute fa = (FieldAttribute) in.value(); |
| 595 | + List<Expression> list = in.list(); |
| 596 | + // TODO: this needs to be handled inside the optimizer |
| 597 | + list.removeIf(e -> DataTypes.isNull(e.dataType())); |
| 598 | + DataType dt = list.get(0).dataType(); |
| 599 | + Set<Object> set = new LinkedHashSet<>(CollectionUtils.mapSize(list.size())); |
| 600 | + for (Expression e : list) { |
| 601 | + set.add(SqlDataTypeConverter.convert(e.fold(), dt)); |
| 602 | + } |
| 603 | + q = new TermsQuery(in.source(), fa.exactAttribute().name(), set); |
590 | 604 | } else {
|
591 | 605 | q = new ScriptQuery(in.source(), in.asScript());
|
592 | 606 | }
|
|
0 commit comments