Skip to content

Commit c02830b

Browse files
author
Julien Ruaux
committed
refactor: renamed aggregations and terms
1 parent f91a51b commit c02830b

File tree

5 files changed

+47
-50
lines changed

5 files changed

+47
-50
lines changed

src/main/java/com/redis/trino/MetricAggregation.java renamed to src/main/java/com/redis/trino/RediSearchAggregation.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
import io.trino.spi.expression.Variable;
4545
import io.trino.spi.type.Type;
4646

47-
public class MetricAggregation {
47+
public class RediSearchAggregation {
4848

4949
public static final String MAX = "max";
5050
public static final String MIN = "min";
@@ -59,7 +59,7 @@ public class MetricAggregation {
5959
private final String alias;
6060

6161
@JsonCreator
62-
public MetricAggregation(@JsonProperty("functionName") String functionName,
62+
public RediSearchAggregation(@JsonProperty("functionName") String functionName,
6363
@JsonProperty("outputType") Type outputType,
6464
@JsonProperty("columnHandle") Optional<RediSearchColumnHandle> columnHandle,
6565
@JsonProperty("alias") String alias) {
@@ -93,26 +93,21 @@ public static boolean isNumericType(Type type) {
9393
return NUMERIC_TYPES.contains(type);
9494
}
9595

96-
public static Optional<MetricAggregation> handleAggregation(AggregateFunction function,
96+
public static Optional<RediSearchAggregation> handleAggregation(AggregateFunction function,
9797
Map<String, ColumnHandle> assignments, String alias) {
9898
if (!SUPPORTED_AGGREGATION_FUNCTIONS.contains(function.getFunctionName())) {
9999
return Optional.empty();
100100
}
101-
// check
102-
// 1. Function input can be found in assignments
103-
// 2. Target type of column being aggregate must be numeric type
104-
// 3. ColumnHandle support predicates(since text treats as VARCHAR, but text can
105-
// not be treats as term in es by default
106101
Optional<RediSearchColumnHandle> parameterColumnHandle = function.getArguments().stream()
107102
.filter(Variable.class::isInstance).map(Variable.class::cast).map(Variable::getName)
108103
.filter(assignments::containsKey).findFirst().map(assignments::get)
109104
.map(RediSearchColumnHandle.class::cast)
110-
.filter(column -> MetricAggregation.isNumericType(column.getType()));
111-
// only count can accept empty ElasticsearchColumnHandle
112-
if (!COUNT.equals(function.getFunctionName()) && parameterColumnHandle.isEmpty()) {
105+
.filter(column -> RediSearchAggregation.isNumericType(column.getType()));
106+
// only count can accept empty RediSearchColumnHandle
107+
if (parameterColumnHandle.isEmpty() && !COUNT.equals(function.getFunctionName())) {
113108
return Optional.empty();
114109
}
115-
return Optional.of(new MetricAggregation(function.getFunctionName(), function.getOutputType(),
110+
return Optional.of(new RediSearchAggregation(function.getFunctionName(), function.getOutputType(),
116111
parameterColumnHandle, alias));
117112
}
118113

@@ -124,7 +119,7 @@ public boolean equals(Object o) {
124119
if (o == null || getClass() != o.getClass()) {
125120
return false;
126121
}
127-
MetricAggregation that = (MetricAggregation) o;
122+
RediSearchAggregation that = (RediSearchAggregation) o;
128123
return Objects.equals(functionName, that.functionName) && Objects.equals(outputType, that.outputType)
129124
&& Objects.equals(columnHandle, that.columnHandle) && Objects.equals(alias, that.alias);
130125
}

src/main/java/com/redis/trino/TermAggregation.java renamed to src/main/java/com/redis/trino/RediSearchAggregationTerm.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,13 @@
3232
import io.trino.spi.connector.ColumnHandle;
3333
import io.trino.spi.type.Type;
3434

35-
public class TermAggregation {
35+
public class RediSearchAggregationTerm {
36+
3637
private final String term;
3738
private final Type type;
3839

3940
@JsonCreator
40-
public TermAggregation(@JsonProperty("term") String term, @JsonProperty("type") Type type) {
41+
public RediSearchAggregationTerm(@JsonProperty("term") String term, @JsonProperty("type") Type type) {
4142
this.term = term;
4243
this.type = type;
4344
}
@@ -52,9 +53,9 @@ public Type getType() {
5253
return type;
5354
}
5455

55-
public static Optional<TermAggregation> fromColumnHandle(ColumnHandle columnHandle) {
56+
public static Optional<RediSearchAggregationTerm> fromColumnHandle(ColumnHandle columnHandle) {
5657
RediSearchColumnHandle column = (RediSearchColumnHandle) columnHandle;
57-
return Optional.of(new TermAggregation(column.getName(), column.getType()));
58+
return Optional.of(new RediSearchAggregationTerm(column.getName(), column.getType()));
5859
}
5960

6061
@Override
@@ -65,7 +66,7 @@ public boolean equals(Object o) {
6566
if (o == null || getClass() != o.getClass()) {
6667
return false;
6768
}
68-
TermAggregation that = (TermAggregation) o;
69+
RediSearchAggregationTerm that = (RediSearchAggregationTerm) o;
6970
return Objects.equals(term, that.term) && Objects.equals(type, that.type);
7071
}
7172

src/main/java/com/redis/trino/RediSearchMetadata.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ public Optional<LimitApplicationResult<ConnectorTableHandle>> applyLimit(Connect
266266

267267
return Optional.of(new LimitApplicationResult<>(new RediSearchTableHandle(handle.getType(),
268268
handle.getSchemaTableName(), handle.getConstraint(), OptionalLong.of(limit),
269-
handle.getTermAggregations(), handle.getMetricAggregations(), handle.getWildcards()), true, false));
269+
handle.getAggregationTerms(), handle.getAggregations(), handle.getWildcards()), true, false));
270270
}
271271

272272
@Override
@@ -329,7 +329,7 @@ public Optional<ConstraintApplicationResult<ConnectorTableHandle>> applyFilter(C
329329
}
330330

331331
handle = new RediSearchTableHandle(handle.getType(), handle.getSchemaTableName(), newDomain, handle.getLimit(),
332-
handle.getTermAggregations(), handle.getMetricAggregations(), newWildcards);
332+
handle.getAggregationTerms(), handle.getAggregations(), newWildcards);
333333

334334
return Optional.of(new ConstraintApplicationResult<>(handle, TupleDomain.withColumnDomains(unsupported),
335335
newExpression, false));
@@ -420,41 +420,42 @@ public Optional<AggregationApplicationResult<ConnectorTableHandle>> applyAggrega
420420
RediSearchTableHandle table = (RediSearchTableHandle) handle;
421421
// Global aggregation is represented by [[]]
422422
verify(!groupingSets.isEmpty(), "No grouping sets provided");
423-
if (!table.getTermAggregations().isEmpty()) {
423+
if (!table.getAggregationTerms().isEmpty()) {
424424
return Optional.empty();
425425
}
426426
ImmutableList.Builder<ConnectorExpression> projections = ImmutableList.builder();
427427
ImmutableList.Builder<Assignment> resultAssignments = ImmutableList.builder();
428-
ImmutableList.Builder<MetricAggregation> metricAggregations = ImmutableList.builder();
429-
ImmutableList.Builder<TermAggregation> termAggregations = ImmutableList.builder();
428+
ImmutableList.Builder<RediSearchAggregation> aggregations = ImmutableList.builder();
429+
ImmutableList.Builder<RediSearchAggregationTerm> terms = ImmutableList.builder();
430430
for (int i = 0; i < aggregates.size(); i++) {
431431
AggregateFunction function = aggregates.get(i);
432432
String colName = SYNTHETIC_COLUMN_NAME_PREFIX + i;
433-
Optional<MetricAggregation> metricAggregation = MetricAggregation.handleAggregation(function, assignments,
433+
Optional<RediSearchAggregation> aggregation = RediSearchAggregation.handleAggregation(function, assignments,
434434
colName);
435-
if (metricAggregation.isEmpty()) {
435+
if (aggregation.isEmpty()) {
436436
return Optional.empty();
437437
}
438438
io.trino.spi.type.Type outputType = function.getOutputType();
439439
RediSearchColumnHandle newColumn = new RediSearchColumnHandle(colName, outputType,
440440
RediSearchSession.toFieldType(outputType), false, true);
441441
projections.add(new Variable(colName, function.getOutputType()));
442442
resultAssignments.add(new Assignment(colName, newColumn, function.getOutputType()));
443-
metricAggregations.add(metricAggregation.get());
443+
aggregations.add(aggregation.get());
444444
}
445445
for (ColumnHandle columnHandle : groupingSets.get(0)) {
446-
Optional<TermAggregation> termAggregation = TermAggregation.fromColumnHandle(columnHandle);
446+
Optional<RediSearchAggregationTerm> termAggregation = RediSearchAggregationTerm
447+
.fromColumnHandle(columnHandle);
447448
if (termAggregation.isEmpty()) {
448449
return Optional.empty();
449450
}
450-
termAggregations.add(termAggregation.get());
451+
terms.add(termAggregation.get());
451452
}
452-
ImmutableList<MetricAggregation> metrics = metricAggregations.build();
453-
if (metrics.isEmpty()) {
453+
ImmutableList<RediSearchAggregation> aggregationList = aggregations.build();
454+
if (aggregationList.isEmpty()) {
454455
return Optional.empty();
455456
}
456457
RediSearchTableHandle tableHandle = new RediSearchTableHandle(Type.AGGREGATE, table.getSchemaTableName(),
457-
table.getConstraint(), table.getLimit(), termAggregations.build(), metrics, table.getWildcards());
458+
table.getConstraint(), table.getLimit(), terms.build(), aggregationList, table.getWildcards());
458459
return Optional.of(new AggregationApplicationResult<>(tableHandle, projections.build(),
459460
resultAssignments.build(), Map.of(), false));
460461
}

src/main/java/com/redis/trino/RediSearchQueryBuilder.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ public class RediSearchQueryBuilder {
7474

7575
private static final Logger log = Logger.get(RediSearchQueryBuilder.class);
7676

77-
private static final Map<String, BiFunction<String, String, Reducer>> CONVERTERS = Map.of(MetricAggregation.MAX,
78-
(alias, field) -> Max.property(field).as(alias).build(), MetricAggregation.MIN,
79-
(alias, field) -> Min.property(field).as(alias).build(), MetricAggregation.SUM,
80-
(alias, field) -> Sum.property(field).as(alias).build(), MetricAggregation.AVG,
81-
(alias, field) -> Avg.property(field).as(alias).build(), MetricAggregation.COUNT,
77+
private static final Map<String, BiFunction<String, String, Reducer>> CONVERTERS = Map.of(RediSearchAggregation.MAX,
78+
(alias, field) -> Max.property(field).as(alias).build(), RediSearchAggregation.MIN,
79+
(alias, field) -> Min.property(field).as(alias).build(), RediSearchAggregation.SUM,
80+
(alias, field) -> Sum.property(field).as(alias).build(), RediSearchAggregation.AVG,
81+
(alias, field) -> Avg.property(field).as(alias).build(), RediSearchAggregation.COUNT,
8282
(alias, field) -> Count.as(alias));
8383

8484
public String buildQuery(TupleDomain<ColumnHandle> tupleDomain) {
@@ -231,18 +231,18 @@ private Object translateValue(Object trinoNativeValue, Type type) {
231231
throw new IllegalArgumentException("Unhandled type: " + type);
232232
}
233233

234-
private Reducer reducer(MetricAggregation aggregation) {
234+
private Reducer reducer(RediSearchAggregation aggregation) {
235235
Optional<RediSearchColumnHandle> column = aggregation.getColumnHandle();
236236
String field = column.isPresent() ? column.get().getName() : null;
237237
return CONVERTERS.get(aggregation.getFunctionName()).apply(aggregation.getAlias(), field);
238238
}
239239

240240
public Optional<Group> group(RediSearchTableHandle table) {
241-
List<TermAggregation> terms = table.getTermAggregations();
242-
List<MetricAggregation> aggregates = table.getMetricAggregations();
241+
List<RediSearchAggregationTerm> terms = table.getAggregationTerms();
242+
List<RediSearchAggregation> aggregates = table.getAggregations();
243243
List<String> groupFields = new ArrayList<>();
244244
if (terms != null && !terms.isEmpty()) {
245-
groupFields = terms.stream().map(TermAggregation::getTerm).collect(Collectors.toList());
245+
groupFields = terms.stream().map(RediSearchAggregationTerm::getTerm).collect(Collectors.toList());
246246
}
247247
List<Reducer> reducers = aggregates.stream().map(this::reducer).collect(Collectors.toList());
248248
if (reducers.isEmpty()) {

src/main/java/com/redis/trino/RediSearchTableHandle.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public enum Type {
5050
private final TupleDomain<ColumnHandle> constraint;
5151
private final OptionalLong limit;
5252
// for group by fields
53-
private final List<TermAggregation> termAggregations;
54-
private final List<MetricAggregation> metricAggregations;
53+
private final List<RediSearchAggregationTerm> aggregationTerms;
54+
private final List<RediSearchAggregation> aggregations;
5555
private final Map<String, String> wildcards;
5656

5757
public RediSearchTableHandle(Type type, SchemaTableName schemaTableName) {
@@ -63,15 +63,15 @@ public RediSearchTableHandle(Type type, SchemaTableName schemaTableName) {
6363
public RediSearchTableHandle(@JsonProperty("type") Type type,
6464
@JsonProperty("schemaTableName") SchemaTableName schemaTableName,
6565
@JsonProperty("constraint") TupleDomain<ColumnHandle> constraint, @JsonProperty("limit") OptionalLong limit,
66-
@JsonProperty("aggTerms") List<TermAggregation> termAggregations,
67-
@JsonProperty("aggregates") List<MetricAggregation> metricAggregations,
66+
@JsonProperty("aggTerms") List<RediSearchAggregationTerm> aggregationTerms,
67+
@JsonProperty("aggregates") List<RediSearchAggregation> aggregates,
6868
@JsonProperty("wildcards") Map<String, String> wildcards) {
6969
this.type = requireNonNull(type, "type is null");
7070
this.schemaTableName = requireNonNull(schemaTableName, "schemaTableName is null");
7171
this.constraint = requireNonNull(constraint, "constraint is null");
7272
this.limit = requireNonNull(limit, "limit is null");
73-
this.termAggregations = requireNonNull(termAggregations, "aggTerms is null");
74-
this.metricAggregations = requireNonNull(metricAggregations, "aggregates is null");
73+
this.aggregationTerms = requireNonNull(aggregationTerms, "aggTerms is null");
74+
this.aggregations = requireNonNull(aggregates, "aggregates is null");
7575
this.wildcards = requireNonNull(wildcards, "wildcards is null");
7676
}
7777

@@ -96,13 +96,13 @@ public OptionalLong getLimit() {
9696
}
9797

9898
@JsonProperty
99-
public List<TermAggregation> getTermAggregations() {
100-
return termAggregations;
99+
public List<RediSearchAggregationTerm> getAggregationTerms() {
100+
return aggregationTerms;
101101
}
102102

103103
@JsonProperty
104-
public List<MetricAggregation> getMetricAggregations() {
105-
return metricAggregations;
104+
public List<RediSearchAggregation> getAggregations() {
105+
return aggregations;
106106
}
107107

108108
@JsonProperty

0 commit comments

Comments
 (0)