@SuppressWarnings("unchecked") @Override public void setValueFrom(ColumnValueSelector selector) { object = (T) selector.getObject(); }
private long getTimestamp(ColumnValueSelector selector) { if (Long.class.equals(selector.classOfObject())) { return selector.getLong(); } else { Object input = selector.getObject(); return convertLong(timestampSpec, input); } }
@Override public void initColumnValues(ColumnValueSelector selector, int columnIndex, Object[] values) { values[columnIndex] = selector.getDouble(); }
@Test public void testLongSelectorOfTimeColumn() { final ColumnValueSelector selector = TIME_FLOOR.makeColumnValueSelector("expr", COLUMN_SELECTOR_FACTORY); CURRENT_ROW.set(ROW0); Assert.assertEquals(DateTimes.of("2000-01-01").getMillis(), selector.getLong()); Assert.assertEquals((float) DateTimes.of("2000-01-01").getMillis(), selector.getFloat(), 0.0f); Assert.assertEquals((double) DateTimes.of("2000-01-01").getMillis(), selector.getDouble(), 0.0d); Assert.assertEquals(DateTimes.of("2000-01-01").getMillis(), selector.getObject()); CURRENT_ROW.set(ROW1); Assert.assertEquals(DateTimes.of("2000-01-01").getMillis(), selector.getLong()); CURRENT_ROW.set(ROW2); Assert.assertEquals(DateTimes.of("2000-01-01").getMillis(), selector.getLong()); CURRENT_ROW.set(ROW3); Assert.assertEquals(DateTimes.of("2000-01-02").getMillis(), selector.getLong()); Assert.assertEquals(DateTimes.of("2000-01-02").getMillis(), selector.getDouble(), 0.0); }
@Override public long getLong() { // No Assert for null handling as baseSelector already have it. return baseSelector.getLong(); }
@Test public void testExprEvalSelectorWithConstantNullArithmetic() { final ColumnValueSelector<ExprEval> selector = ExpressionSelectors.makeExprEvalSelector( COLUMN_SELECTOR_FACTORY, Parser.parse(CONSTANT_NULL_ARITHMETIC.getExpression(), TestExprMacroTable.INSTANCE) ); CURRENT_ROW.set(ROW0); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(2.1f, selector.getFloat(), 0.0f); Assert.assertFalse(selector.isNull()); Assert.assertEquals(2.1d, selector.getObject().asDouble(), 0.0d); } else { Assert.assertTrue(selector.isNull()); Assert.assertTrue(selector.getObject().isNumericNull()); } }
@Test public void testExprEvalSelectorWithLongsAndNulls() { final ColumnValueSelector<ExprEval> selector = ExpressionSelectors.makeExprEvalSelector( RowBasedColumnSelectorFactory.create( CURRENT_ROW, ImmutableMap.of("x", ValueType.LONG) ), Parser.parse(SCALE_LONG.getExpression(), TestExprMacroTable.INSTANCE) ); CURRENT_ROW.set(ROW0); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(0, selector.getLong(), 0.0f); Assert.assertFalse(selector.isNull()); } else { Assert.assertTrue(selector.isNull()); Assert.assertTrue(selector.getObject().isNumericNull()); } }
@Test public void testExprEvalSelectorWithDoublesAndNulls() { final ColumnValueSelector<ExprEval> selector = ExpressionSelectors.makeExprEvalSelector( RowBasedColumnSelectorFactory.create( CURRENT_ROW, ImmutableMap.of("x", ValueType.DOUBLE) ), Parser.parse(SCALE_FLOAT.getExpression(), TestExprMacroTable.INSTANCE) ); CURRENT_ROW.set(ROW0); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(0, selector.getDouble(), 0.0f); Assert.assertFalse(selector.isNull()); } else { Assert.assertTrue(selector.isNull()); Assert.assertTrue(selector.getObject().isNumericNull()); } }
@Override public boolean isNull() { return baseSelector.isNull(); }
@Override public float getFloat() { // No Assert for null handling as baseSelector already have it. return baseSelector.getFloat(); }
@Override public BufferAggregator factorizeBuffered(ColumnSelectorFactory metricFactory) { @SuppressWarnings("unchecked") ColumnValueSelector<ApproximateHistogram> selector = metricFactory.makeColumnValueSelector(fieldName); final Class cls = selector.classOfObject(); if (cls.equals(Object.class) || ApproximateHistogram.class.isAssignableFrom(cls)) { return new ApproximateHistogramFoldingBufferAggregator(selector, resolution, lowerLimit, upperLimit); } throw new IAE( "Incompatible type for metric[%s], expected a ApproximateHistogram, got a %s", fieldName, cls ); }
@Override public void reset(ColumnValueSelector selector) { min = selector.getLong(); }
@Test public void testExprEvalSelectorWithFloatAndNulls() { final ColumnValueSelector<ExprEval> selector = ExpressionSelectors.makeExprEvalSelector( RowBasedColumnSelectorFactory.create( CURRENT_ROW, ImmutableMap.of("x", ValueType.FLOAT) ), Parser.parse(SCALE_FLOAT.getExpression(), TestExprMacroTable.INSTANCE) ); CURRENT_ROW.set(ROW0); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(0, selector.getFloat(), 0.0f); Assert.assertFalse(selector.isNull()); } else { Assert.assertTrue(selector.isNull()); Assert.assertTrue(selector.getObject().isNumericNull()); } } }
@Override @Nullable public Object getOnlyValue(ColumnValueSelector selector) { if (selector.isNull()) { return null; } return delegate.getOnlyValue(selector); }