This is an automated email from the ASF dual-hosted git repository.
cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new fce62b2 fix StringAnyAggregatorFactory to use single value selector
for non-existent columns (#12194)
fce62b2 is described below
commit fce62b26434cc9ce533857f4f91e1da2816df992
Author: Clint Wylie <[email protected]>
AuthorDate: Tue Jan 25 12:52:30 2022 -0800
fix StringAnyAggregatorFactory to use single value selector for
non-existent columns (#12194)
---
.../query/aggregation/any/StringAnyAggregatorFactory.java | 3 ++-
.../java/org/apache/druid/segment/ColumnProcessors.java | 11 ++++++++---
.../aggregation/any/StringAnyAggregatorFactoryTest.java | 14 +++++++++-----
3 files changed, 19 insertions(+), 9 deletions(-)
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactory.java
b/processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactory.java
index 6b90b08..68f6dfc 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactory.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactory.java
@@ -86,7 +86,8 @@ public class StringAnyAggregatorFactory extends
AggregatorFactory
{
ColumnCapabilities capabilities =
selectorFactory.getColumnCapabilities(fieldName);
- if (capabilities == null ||
capabilities.hasMultipleValues().isMaybeTrue()) {
+ // null capabilities mean the column doesn't exist, so in vector engines
the selector will never be multi-value
+ if (capabilities != null &&
capabilities.hasMultipleValues().isMaybeTrue()) {
return new StringAnyVectorAggregator(
null,
selectorFactory.makeMultiValueDimensionSelector(DefaultDimensionSpec.of(fieldName)),
diff --git
a/processing/src/main/java/org/apache/druid/segment/ColumnProcessors.java
b/processing/src/main/java/org/apache/druid/segment/ColumnProcessors.java
index 3f8edc7..28eaef4 100644
--- a/processing/src/main/java/org/apache/druid/segment/ColumnProcessors.java
+++ b/processing/src/main/java/org/apache/druid/segment/ColumnProcessors.java
@@ -342,7 +342,7 @@ public class ColumnProcessors
);
}
- if (mayBeMultiValue(capabilities)) {
+ if (capabilities.hasMultipleValues().isMaybeTrue()) {
return processorFactory.makeMultiValueDimensionProcessor(
capabilities,
multiValueDimensionSelectorFn.apply(selectorFactory)
@@ -367,8 +367,13 @@ public class ColumnProcessors
}
/**
- * Returns true if a given set of capabilities might indicate an underlying
multi-value column. Errs on the side
- * of returning true if unknown; i.e. if this returns false, there are
_definitely not_ mul.
+ * Returns true if a given set of {@link ColumnCapabilities} indicate that a
processor should handle the column as a
+ * multi-value column. If capabilities are null, or if {@link
ColumnCapabilities#hasMultipleValues()} is unknown,
+ * this method errs on the side of returning true. If this method returns
false, the column is _definitely not_
+ * multi-value.
+ *
+ * Note, this method is not suitable for use with vector engines because
null capabilities are indicative of a column
+ * that does not exist, rather than unknown capabilities.
*/
private static boolean mayBeMultiValue(@Nullable final ColumnCapabilities
capabilities)
{
diff --git
a/processing/src/test/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactoryTest.java
b/processing/src/test/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactoryTest.java
index d666e5e..c480b9b 100644
---
a/processing/src/test/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactoryTest.java
+++
b/processing/src/test/java/org/apache/druid/query/aggregation/any/StringAnyAggregatorFactoryTest.java
@@ -73,8 +73,9 @@ public class StringAnyAggregatorFactoryTest extends
InitializedNullHandlingTest
public void
factorizeVectorWithoutCapabilitiesShouldReturnAggregatorWithMultiDimensionSelector()
{
Mockito.doReturn(null).when(vectorSelectorFactory).getColumnCapabilities(FIELD_NAME);
- Mockito.doReturn(multiValueDimensionVectorSelector)
- .when(vectorSelectorFactory).makeMultiValueDimensionSelector(any());
+ Mockito.doReturn(singleValueDimensionVectorSelector)
+ .when(vectorSelectorFactory)
+ .makeSingleValueDimensionSelector(any());
StringAnyVectorAggregator aggregator =
target.factorizeVector(vectorSelectorFactory);
Assert.assertNotNull(aggregator);
}
@@ -83,7 +84,8 @@ public class StringAnyAggregatorFactoryTest extends
InitializedNullHandlingTest
public void
factorizeVectorWithUnknownCapabilitiesShouldReturnAggregatorWithMultiDimensionSelector()
{
Mockito.doReturn(multiValueDimensionVectorSelector)
- .when(vectorSelectorFactory).makeMultiValueDimensionSelector(any());
+ .when(vectorSelectorFactory)
+ .makeMultiValueDimensionSelector(any());
StringAnyVectorAggregator aggregator =
target.factorizeVector(vectorSelectorFactory);
Assert.assertNotNull(aggregator);
}
@@ -93,7 +95,8 @@ public class StringAnyAggregatorFactoryTest extends
InitializedNullHandlingTest
{
Mockito.doReturn(ColumnCapabilities.Capable.TRUE).when(capabilities).hasMultipleValues();
Mockito.doReturn(multiValueDimensionVectorSelector)
- .when(vectorSelectorFactory).makeMultiValueDimensionSelector(any());
+ .when(vectorSelectorFactory)
+ .makeMultiValueDimensionSelector(any());
StringAnyVectorAggregator aggregator =
target.factorizeVector(vectorSelectorFactory);
Assert.assertNotNull(aggregator);
}
@@ -103,7 +106,8 @@ public class StringAnyAggregatorFactoryTest extends
InitializedNullHandlingTest
{
Mockito.doReturn(ColumnCapabilities.Capable.FALSE).when(capabilities).hasMultipleValues();
Mockito.doReturn(singleValueDimensionVectorSelector)
-
.when(vectorSelectorFactory).makeSingleValueDimensionSelector(any());
+ .when(vectorSelectorFactory)
+ .makeSingleValueDimensionSelector(any());
StringAnyVectorAggregator aggregator =
target.factorizeVector(vectorSelectorFactory);
Assert.assertNotNull(aggregator);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]