You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by gi...@apache.org on 2019/07/04 23:26:15 UTC
[incubator-druid] branch master updated: optimize single string
dimension expression selector (#8014)
This is an automated email from the ASF dual-hosted git repository.
gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git
The following commit(s) were added to refs/heads/master by this push:
new 0344a02 optimize single string dimension expression selector (#8014)
0344a02 is described below
commit 0344a020bbb8eb80c52a0e1a07854e8647f6ac2b
Author: Clint Wylie <cw...@apache.org>
AuthorDate: Thu Jul 4 16:26:10 2019 -0700
optimize single string dimension expression selector (#8014)
* optimize single string dimension expression selector
* more javadoc
* oops
* fix
* fix it
* import
---
.../SingleStringInputDimensionSelector.java | 39 ++++------------------
1 file changed, 7 insertions(+), 32 deletions(-)
diff --git a/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java b/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java
index fb372dd..d6462b1 100644
--- a/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java
@@ -29,25 +29,18 @@ import org.apache.druid.segment.DimensionSelector;
import org.apache.druid.segment.DimensionSelectorUtils;
import org.apache.druid.segment.IdLookup;
import org.apache.druid.segment.data.IndexedInts;
-import org.apache.druid.segment.data.SingleIndexedInt;
-import org.apache.druid.segment.data.ZeroIndexedInts;
import javax.annotation.Nullable;
/**
- * A DimensionSelector decorator that computes an expression on top of it.
+ * A DimensionSelector decorator that computes an expression on top of it. See {@link ExpressionSelectors} for details
+ * on how expression selectors are constructed.
*/
public class SingleStringInputDimensionSelector implements DimensionSelector
{
private final DimensionSelector selector;
private final Expr expression;
private final SingleInputBindings bindings = new SingleInputBindings();
- private final SingleIndexedInt nullAdjustedRow = new SingleIndexedInt();
-
- /**
- * 0 if selector has null as a value; 1 if it doesn't.
- */
- private final int nullAdjustment;
public SingleStringInputDimensionSelector(
final DimensionSelector selector,
@@ -67,7 +60,6 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
this.selector = Preconditions.checkNotNull(selector, "selector");
this.expression = Preconditions.checkNotNull(expression, "expression");
- this.nullAdjustment = selector.getValueCardinality() == 0 || selector.lookupName(0) != null ? 1 : 0;
}
@Override
@@ -78,27 +70,15 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
}
/**
- * Treats any non-single-valued row as a row containing a single null value, to ensure consistency with
- * other expression selectors. See also {@link ExpressionSelectors#supplierFromDimensionSelector} for similar
- * behavior.
+ * Get the underlying selector {@link IndexedInts} row, or the null adjusted row.
*/
@Override
public IndexedInts getRow()
{
final IndexedInts row = selector.getRow();
- if (row.size() == 1) {
- if (nullAdjustment == 0) {
- return row;
- } else {
- nullAdjustedRow.setValue(row.get(0) + nullAdjustment);
- return nullAdjustedRow;
- }
- } else {
- // Can't handle non-singly-valued rows in expressions.
- // Treat them as nulls until we think of something better to do.
- return ZeroIndexedInts.instance();
- }
+ assert row.size() <= 1;
+ return row;
}
@Override
@@ -116,7 +96,7 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
@Override
public int getValueCardinality()
{
- return selector.getValueCardinality() + nullAdjustment;
+ return selector.getValueCardinality();
}
@Override
@@ -124,12 +104,7 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
{
final String value;
- if (id == 0) {
- // id 0 is always null for this selector impl.
- value = null;
- } else {
- value = selector.lookupName(id - nullAdjustment);
- }
+ value = selector.lookupName(id);
bindings.set(value);
return expression.eval(bindings).asString();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org