public Builder setVirtualColumns(VirtualColumn... virtualColumns) { this.virtualColumns = VirtualColumns.create(Arrays.asList(virtualColumns)); return this; }
public TimeseriesQueryBuilder virtualColumns(VirtualColumn... virtualColumns) { return virtualColumns(VirtualColumns.create(Arrays.asList(virtualColumns))); }
public ScanQueryBuilder virtualColumns(VirtualColumn... virtualColumns) { return virtualColumns(VirtualColumns.create(Arrays.asList(virtualColumns))); }
public SelectQueryBuilder virtualColumns(List<VirtualColumn> vcs) { return virtualColumns(VirtualColumns.create(vcs)); }
public SelectQueryBuilder virtualColumns(VirtualColumn... vcs) { return virtualColumns(VirtualColumns.create(Arrays.asList(vcs))); }
public TopNQueryBuilder virtualColumns(VirtualColumn... virtualColumns) { return virtualColumns(VirtualColumns.create(Arrays.asList(virtualColumns))); }
public VirtualColumns getVirtualColumns(final ExprMacroTable macroTable, final boolean includeDimensions) { final List<VirtualColumn> retVal = new ArrayList<>(); if (selectProjection != null) { retVal.addAll(selectProjection.getVirtualColumns()); } else { if (grouping != null) { if (includeDimensions) { for (DimensionExpression dimensionExpression : grouping.getDimensions()) { retVal.addAll(dimensionExpression.getVirtualColumns(macroTable)); } } for (Aggregation aggregation : grouping.getAggregations()) { retVal.addAll(aggregation.getVirtualColumns()); } } } return VirtualColumns.create(retVal); }
private VirtualColumns makeVirtualColumns() { final ExpressionVirtualColumn expr = new ExpressionVirtualColumn( "expr", "1", ValueType.FLOAT, TestExprMacroTable.INSTANCE ); final DottyVirtualColumn dotty = new DottyVirtualColumn("foo"); return VirtualColumns.create(ImmutableList.of(expr, dotty)); }
@Test public void testTimeNotAllowed() { final ExpressionVirtualColumn expr = new ExpressionVirtualColumn( "__time", "x + y", ValueType.FLOAT, TestExprMacroTable.INSTANCE ); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("virtualColumn name[__time] not allowed"); VirtualColumns.create(ImmutableList.of(expr)); }
@Test public void testSerde() throws Exception { final ObjectMapper mapper = TestHelper.makeJsonMapper(); final ImmutableList<VirtualColumn> theColumns = ImmutableList.of( new ExpressionVirtualColumn("expr", "x + y", ValueType.FLOAT, TestExprMacroTable.INSTANCE), new ExpressionVirtualColumn("expr2", "x + z", ValueType.FLOAT, TestExprMacroTable.INSTANCE) ); final VirtualColumns virtualColumns = VirtualColumns.create(theColumns); Assert.assertEquals( virtualColumns, mapper.readValue( mapper.writeValueAsString(virtualColumns), VirtualColumns.class ) ); Assert.assertEquals( theColumns, mapper.readValue( mapper.writeValueAsString(virtualColumns), mapper.getTypeFactory().constructParametricType(List.class, VirtualColumn.class) ) ); }
@Test public void testGetCacheKey() { final VirtualColumns virtualColumns = VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn("expr", "x + y", ValueType.FLOAT, TestExprMacroTable.INSTANCE) ) ); final VirtualColumns virtualColumns2 = VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn("expr", "x + y", ValueType.FLOAT, TestExprMacroTable.INSTANCE) ) ); Assert.assertArrayEquals(virtualColumns.getCacheKey(), virtualColumns2.getCacheKey()); Assert.assertFalse(Arrays.equals(virtualColumns.getCacheKey(), VirtualColumns.EMPTY.getCacheKey())); }
@Test public void testDuplicateNameDetection() { final ExpressionVirtualColumn expr = new ExpressionVirtualColumn( "expr", "x + y", ValueType.FLOAT, TestExprMacroTable.INSTANCE ); final ExpressionVirtualColumn expr2 = new ExpressionVirtualColumn( "expr", "x * 2", ValueType.FLOAT, TestExprMacroTable.INSTANCE ); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Duplicate virtualColumn name[expr]"); VirtualColumns.create(ImmutableList.of(expr, expr2)); }
@Benchmark public void stringConcatAndCompareOnLong(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "concat(n, ' is my favorite number') == '3 is my favorite number'", ValueType.LONG, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Test public void testCycleDetection() { final ExpressionVirtualColumn expr = new ExpressionVirtualColumn( "expr", "x + expr2", ValueType.FLOAT, TestExprMacroTable.INSTANCE ); final ExpressionVirtualColumn expr2 = new ExpressionVirtualColumn( "expr2", "expr * 2", ValueType.FLOAT, TestExprMacroTable.INSTANCE ); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Self-referential column[expr]"); VirtualColumns.create(ImmutableList.of(expr, expr2)); }
@Benchmark public void timeFloorUsingExpression(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "timestamp_floor(__time, 'PT1H')", ValueType.LONG, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void arithmeticOnLong(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "n + 1", ValueType.LONG, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
@Benchmark public void strlenUsingExpressionAsLong(Blackhole blackhole) { final Sequence<Cursor> cursors = new QueryableIndexStorageAdapter(index).makeCursors( null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn( "v", "strlen(s)", ValueType.STRING, TestExprMacroTable.INSTANCE ) ) ), Granularities.ALL, false, null ); final List<?> results = cursors .map(cursor -> { final ColumnValueSelector selector = cursor.getColumnSelectorFactory().makeColumnValueSelector("v"); consumeLong(cursor, selector, blackhole); return null; }) .toList(); blackhole.consume(results); }
null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn(
null, index.getDataInterval(), VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn(
@Test public void testEqualsAndHashCode() { final VirtualColumns virtualColumns = VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn("expr", "x + y", ValueType.FLOAT, TestExprMacroTable.INSTANCE) ) ); final VirtualColumns virtualColumns2 = VirtualColumns.create( ImmutableList.of( new ExpressionVirtualColumn("expr", "x + y", ValueType.FLOAT, TestExprMacroTable.INSTANCE) ) ); Assert.assertEquals(virtualColumns, virtualColumns); Assert.assertEquals(virtualColumns, virtualColumns2); Assert.assertNotEquals(VirtualColumns.EMPTY, virtualColumns); Assert.assertNotEquals(VirtualColumns.EMPTY, null); Assert.assertEquals(virtualColumns.hashCode(), virtualColumns.hashCode()); Assert.assertEquals(virtualColumns.hashCode(), virtualColumns2.hashCode()); Assert.assertNotEquals(VirtualColumns.EMPTY.hashCode(), virtualColumns.hashCode()); }