This is an automated email from the ASF dual-hosted git repository. himanshug 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 8687f42 make ComplexColumn an interface and ExtensionPoint (#7633) 8687f42 is described below commit 8687f424f98a6570cfb732bf5f1b494366ff3112 Author: Himanshu <g.himan...@gmail.com> AuthorDate: Wed May 15 20:59:55 2019 -0700 make ComplexColumn an interface and ExtensionPoint (#7633) * make ComplexColumn an interface and ExtensionPoint * incorporate review comments * make ColumnValueSelector @ExtensionPoint * more java docs * add close() method to ComplexColumn interface --- .../segment/BaseDoubleColumnValueSelector.java | 4 +- .../segment/BaseFloatColumnValueSelector.java | 4 +- .../druid/segment/BaseLongColumnValueSelector.java | 4 +- .../segment/BaseObjectColumnValueSelector.java | 4 +- .../apache/druid/segment/ColumnValueSelector.java | 4 +- .../apache/druid/segment/column/ComplexColumn.java | 71 ++++++++++++---------- ....java => GenericIndexedBasedComplexColumn.java} | 50 +++++---------- .../segment/serde/ComplexColumnPartSupplier.java | 3 +- 8 files changed, 66 insertions(+), 78 deletions(-) diff --git a/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java index 42d38ae..8e1b9fc 100644 --- a/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java +++ b/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java @@ -19,7 +19,7 @@ package org.apache.druid.segment; -import org.apache.druid.guice.annotations.PublicApi; +import org.apache.druid.guice.annotations.ExtensionPoint; import org.apache.druid.query.monomorphicprocessing.CalledFromHotLoop; import org.apache.druid.query.monomorphicprocessing.HotLoopCallee; @@ -30,7 +30,7 @@ import org.apache.druid.query.monomorphicprocessing.HotLoopCallee; * * All implementations of this interface MUST also implement {@link ColumnValueSelector}. */ -@PublicApi +@ExtensionPoint public interface BaseDoubleColumnValueSelector extends HotLoopCallee, BaseNullableColumnValueSelector { @CalledFromHotLoop diff --git a/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java index bf70346..57c1138 100644 --- a/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java +++ b/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java @@ -19,7 +19,7 @@ package org.apache.druid.segment; -import org.apache.druid.guice.annotations.PublicApi; +import org.apache.druid.guice.annotations.ExtensionPoint; import org.apache.druid.query.monomorphicprocessing.CalledFromHotLoop; import org.apache.druid.query.monomorphicprocessing.HotLoopCallee; @@ -30,7 +30,7 @@ import org.apache.druid.query.monomorphicprocessing.HotLoopCallee; * * All implementations of this interface MUST also implement {@link ColumnValueSelector}. */ -@PublicApi +@ExtensionPoint public interface BaseFloatColumnValueSelector extends HotLoopCallee, BaseNullableColumnValueSelector { @CalledFromHotLoop diff --git a/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java index 1d95564..73525c7 100644 --- a/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java +++ b/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java @@ -19,7 +19,7 @@ package org.apache.druid.segment; -import org.apache.druid.guice.annotations.PublicApi; +import org.apache.druid.guice.annotations.ExtensionPoint; import org.apache.druid.query.monomorphicprocessing.CalledFromHotLoop; import org.apache.druid.query.monomorphicprocessing.HotLoopCallee; @@ -30,7 +30,7 @@ import org.apache.druid.query.monomorphicprocessing.HotLoopCallee; * * All implementations of this interface MUST also implement {@link ColumnValueSelector}. */ -@PublicApi +@ExtensionPoint public interface BaseLongColumnValueSelector extends HotLoopCallee, BaseNullableColumnValueSelector { @CalledFromHotLoop diff --git a/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java index 45a399b..859f401 100644 --- a/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java +++ b/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java @@ -19,7 +19,7 @@ package org.apache.druid.segment; -import org.apache.druid.guice.annotations.PublicApi; +import org.apache.druid.guice.annotations.ExtensionPoint; import javax.annotation.Nullable; @@ -30,7 +30,7 @@ import javax.annotation.Nullable; * * All implementations of this interface MUST also implement {@link ColumnValueSelector}. */ -@PublicApi +@ExtensionPoint public interface BaseObjectColumnValueSelector<T> extends BaseNullableColumnValueSelector { @Nullable diff --git a/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java index be7a5fd..229cc25 100644 --- a/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java +++ b/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java @@ -19,7 +19,7 @@ package org.apache.druid.segment; -import org.apache.druid.guice.annotations.PublicApi; +import org.apache.druid.guice.annotations.ExtensionPoint; /** * Base type for interfaces that manage column value selection, e.g. {@link DimensionSelector}, {@link @@ -33,7 +33,7 @@ import org.apache.druid.guice.annotations.PublicApi; * methods and null from {@link #getObject()}, should always be an instance of {@link NilColumnValueSelector}. * `selector instanceof NilColumnValueSelector` is the recommended way to check for this condition. */ -@PublicApi +@ExtensionPoint public interface ColumnValueSelector<T> extends BaseLongColumnValueSelector, BaseDoubleColumnValueSelector, BaseFloatColumnValueSelector, BaseObjectColumnValueSelector<T> { diff --git a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java b/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java index 1a7981e..acdfcd6 100644 --- a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java +++ b/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java @@ -19,45 +19,60 @@ package org.apache.druid.segment.column; +import org.apache.druid.guice.annotations.ExtensionPoint; import org.apache.druid.query.monomorphicprocessing.RuntimeShapeInspector; import org.apache.druid.segment.ColumnValueSelector; import org.apache.druid.segment.ObjectColumnSelector; -import org.apache.druid.segment.data.GenericIndexed; import org.apache.druid.segment.data.ReadableOffset; import javax.annotation.Nullable; /** -*/ -public class ComplexColumn implements BaseColumn + * This interface represents a complex column and can be implemented by druid extension writer of a custom column + * with arbitrary serialization instead of a custom column that serializes rows of objects serialized using + * {@link org.apache.druid.segment.data.GenericIndexed} class which is default implementation of "writeToXXX" methods in + * {@link org.apache.druid.segment.serde.ComplexColumnSerializer}. In that case {@link GenericIndexedBasedComplexColumn} + * should be used. + */ +@ExtensionPoint +public interface ComplexColumn extends BaseColumn { - private final GenericIndexed<?> index; - private final String typeName; + /** + * @return Class of objects returned on calls to {@link ComplexColumn#getRowValue(int)} . + */ + Class<?> getClazz(); - public ComplexColumn(String typeName, GenericIndexed<?> index) - { - this.index = index; - this.typeName = typeName; - } + /** + * @return Typename associated with this column. + */ + String getTypeName(); - public String getTypeName() - { - return typeName; - } + /** + * Return rows in the column. + * @param rowNum the row number + * @return row object of type same as {@link ComplexColumn#getClazz()} } at row number "rowNum" . + */ + Object getRowValue(int rowNum); - @Nullable - public Object getRowValue(int rowNum) - { - return index.get(rowNum); - } + /** + * @return serialized size (in bytes) of this column. + */ + int getLength(); - public int getLength() - { - return index.size(); - } + /** + * Close and release any resources associated with this column. + */ + @Override + void close(); + /** + * Optionally overridden when complex column serialization is not based on default serialization based + * on {@link org.apache.druid.segment.data.GenericIndexed} in {@link org.apache.druid.segment.serde.ComplexColumnSerializer}. + * @param offset object to retrieve row number + * @return the {@link ColumnValueSelector} object + */ @Override - public ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset) + default ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset) { return new ObjectColumnSelector() { @@ -71,7 +86,7 @@ public class ComplexColumn implements BaseColumn @Override public Class classOfObject() { - return index.getClazz(); + return getClazz(); } @Override @@ -81,10 +96,4 @@ public class ComplexColumn implements BaseColumn } }; } - - @Override - public void close() - { - // nothing to close - } } diff --git a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java b/processing/src/main/java/org/apache/druid/segment/column/GenericIndexedBasedComplexColumn.java similarity index 58% copy from processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java copy to processing/src/main/java/org/apache/druid/segment/column/GenericIndexedBasedComplexColumn.java index 1a7981e..f3ec134 100644 --- a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java +++ b/processing/src/main/java/org/apache/druid/segment/column/GenericIndexedBasedComplexColumn.java @@ -19,72 +19,50 @@ package org.apache.druid.segment.column; -import org.apache.druid.query.monomorphicprocessing.RuntimeShapeInspector; -import org.apache.druid.segment.ColumnValueSelector; -import org.apache.druid.segment.ObjectColumnSelector; import org.apache.druid.segment.data.GenericIndexed; -import org.apache.druid.segment.data.ReadableOffset; - -import javax.annotation.Nullable; /** + * Implementation of {@link ComplexColumn} to be used when complex column serialization is done by using + * {@link GenericIndexed} by using default implementations of "writeToXXX" methods in + * {@link org.apache.druid.segment.serde.ComplexColumnSerializer} */ -public class ComplexColumn implements BaseColumn +public class GenericIndexedBasedComplexColumn implements ComplexColumn { private final GenericIndexed<?> index; private final String typeName; - public ComplexColumn(String typeName, GenericIndexed<?> index) + public GenericIndexedBasedComplexColumn(String typeName, GenericIndexed<?> index) { this.index = index; this.typeName = typeName; } + @Override + public Class<?> getClazz() + { + return index.getClazz(); + } + + @Override public String getTypeName() { return typeName; } - @Nullable + @Override public Object getRowValue(int rowNum) { return index.get(rowNum); } + @Override public int getLength() { return index.size(); } @Override - public ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset) - { - return new ObjectColumnSelector() - { - @Nullable - @Override - public Object getObject() - { - return getRowValue(offset.getOffset()); - } - - @Override - public Class classOfObject() - { - return index.getClazz(); - } - - @Override - public void inspectRuntimeShape(RuntimeShapeInspector inspector) - { - inspector.visit("column", ComplexColumn.this); - } - }; - } - - @Override public void close() { - // nothing to close } } diff --git a/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java b/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java index 9ef7ce5..d8988e1 100644 --- a/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java +++ b/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java @@ -21,6 +21,7 @@ package org.apache.druid.segment.serde; import com.google.common.base.Supplier; import org.apache.druid.segment.column.ComplexColumn; +import org.apache.druid.segment.column.GenericIndexedBasedComplexColumn; import org.apache.druid.segment.data.GenericIndexed; /** @@ -39,6 +40,6 @@ public class ComplexColumnPartSupplier implements Supplier<ComplexColumn> @Override public ComplexColumn get() { - return new ComplexColumn(typeName, complexType); + return new GenericIndexedBasedComplexColumn(typeName, complexType); } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@druid.apache.org For additional commands, e-mail: commits-h...@druid.apache.org