@Override public TupleExpression visitNumber(NumberTupleExpression numExpr) { NumberTupleExpression copyExpr = new NumberTupleExpression(numExpr.getValue()); if (ifToCnt) { List<TupleExpression> children = Lists.newArrayList(cntExpr, copyExpr); ifCntSet = true; return new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.MULTIPLE, children); } return copyExpr; }
private TupleExpression getCountColumnExpression(TblColRef colRef) { List<Pair<TupleFilter, TupleExpression>> whenList = Lists.newArrayListWithExpectedSize(1); TupleFilter whenFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.ISNULL); whenFilter.addChild(new ColumnTupleFilter(colRef)); whenList.add(new Pair<TupleFilter, TupleExpression>(whenFilter, new NumberTupleExpression(0))); TupleExpression elseExpr = new ColumnTupleExpression(SumDynamicFunctionDesc.mockCntCol); TupleExpression ret = new CaseTupleExpression(whenList, elseExpr); ret.setDigest("_KY_COUNT(" + colRef.getName() + ")"); return ret; } }
break; case NUMBER: tuple = new NumberTupleExpression(null); break; case STRING:
@Override public TupleExpression visitLiteral(RexLiteral literal) { TupleExpression tuple; Object value = literal.getValue(); if (value instanceof Number) { tuple = new NumberTupleExpression(value); } else { if (value == null) { tuple = new StringTupleExpression(null); } else if (value instanceof NlsString) { tuple = new StringTupleExpression(((NlsString) value).getValue()); } else { tuple = new StringTupleExpression(value.toString()); } } tuple.setDigest(literal.toString()); return tuple; } }
NumberTupleExpression n = new NumberTupleExpression(10); ExpressionCountDistributor cntDistributor = new ExpressionCountDistributor(n); TupleExpression t0 = new NumberTupleExpression(1); TupleExpression t1 = new NumberTupleExpression(1); TupleExpression t2 = new NumberTupleExpression(2); PowerMockito.when(t3.calculate(evaluatableTuple, filterCodeSystem)).thenReturn(new BigDecimal(3)); TupleExpression t4 = new NumberTupleExpression(1); TupleExpression t5 = new NumberTupleExpression(3); TupleExpression t6 = new NumberTupleExpression(4); TupleExpression t7 = new NumberTupleExpression(1); TupleExpression t8 = new NumberTupleExpression(2); TupleExpression t9 = new NumberTupleExpression(3); TupleExpression t10 = new NumberTupleExpression(1); TupleExpression t11 = new NumberTupleExpression(4); TupleExpression t12 = new NumberTupleExpression(5); TupleExpression t13 = new NumberTupleExpression(4); TupleExpression t14 = new NumberTupleExpression(5);
NumberTupleExpression n = new NumberTupleExpression(10); ExpressionCountDistributor cntDistributor = new ExpressionCountDistributor(n); TupleExpression t1 = new NumberTupleExpression(1); TupleExpression t2 = new NumberTupleExpression(2); TupleExpression t3 = new NumberTupleExpression(1); TupleExpression t4 = new NumberTupleExpression(2); PowerMockito.when(t5.calculate(evaluatableTuple, filterCodeSystem)).thenReturn(new BigDecimal(3)); TupleExpression t6 = new NumberTupleExpression(1); TupleExpression t7 = new NumberTupleExpression(3); TupleExpression t8 = new NumberTupleExpression(2); TupleExpression t9 = new NumberTupleExpression(2); TupleExpression t10 = new NumberTupleExpression(3); TupleExpression t11 = new NumberTupleExpression(4); TupleExpression t12 = new NumberTupleExpression(6); TupleExpression t13 = new NumberTupleExpression(2); TupleExpression t14 = new NumberTupleExpression(1);
TblColRef col2 = TblColRef.mockup(t, 2, "C2", "decimal"); NumberTupleExpression constTuple1 = new NumberTupleExpression(value1); NumberTupleExpression constTuple2 = new NumberTupleExpression(value2); ColumnTupleExpression colTuple1 = new ColumnTupleExpression(col1); ColumnTupleExpression colTuple2 = new ColumnTupleExpression(col2);
TupleExpression constExpression1 = new NumberTupleExpression(1); TupleExpression constExpression2 = new NumberTupleExpression(2); TupleExpression biExpression = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(colExpression, constExpression2)); whenList.add(new Pair<>(whenFilter, thenExpression)); TupleExpression elseExpression = new NumberTupleExpression(1);
public static CubeVisitProtos.CubeVisitRequest mockScanRequestWithRuntimeDimensions(GTInfo gtInfo, List<RawScan> rawScans) throws IOException { ImmutableBitSet dimensions = setOf(); ImmutableBitSet aggrGroupBy = setOf(3); ImmutableBitSet aggrMetrics = setOf(2); String[] aggrMetricsFuncs = { "SUM" }; ImmutableBitSet dynColumns = setOf(3); TupleFilter whenFilter = getCompareTupleFilter(1, "Ken"); TupleExpression thenExpr = new NumberTupleExpression(1); List<Pair<TupleFilter, TupleExpression>> whenList = Lists.newArrayList(); whenList.add(new Pair<>(whenFilter, thenExpr)); TupleExpression elseExpr = new NumberTupleExpression(2); /** * case * when user = 'Ken' then 1 * else 2 * end */ TupleExpression caseExpression = new CaseTupleExpression(whenList, elseExpr); Map<Integer, TupleExpression> tupleExpressionMap = Maps.newHashMap(); tupleExpressionMap.put(3, caseExpression); GTScanRequest scanRequest = new GTScanRequestBuilder().setInfo(gtInfo).setRanges(null)// .setDimensions(dimensions).setAggrGroupBy(aggrGroupBy)// .setAggrMetrics(aggrMetrics).setAggrMetricsFuncs(aggrMetricsFuncs)// .setDynamicColumns(dynColumns).setExprsPushDown(tupleExpressionMap)// .setStartTime(System.currentTimeMillis()).createGTScanRequest(); final List<CubeVisitProtos.CubeVisitRequest.IntList> intListList = mockIntList(setOf(2)); return mockScanRequest(rawScans, scanRequest, intListList); }
@Test public void testSerialization() { TblColRef colD = TblColRef.mockup(t, 1, "C1", "decimal"); TblColRef colM = TblColRef.mockup(t, 2, "C2", "string"); BigDecimal value = BigDecimal.valueOf(10L); ColumnTupleFilter colFilter = new ColumnTupleFilter(colD); ConstantTupleFilter constFilter = new ConstantTupleFilter("col"); CompareTupleFilter compareFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.EQ); compareFilter.addChild(colFilter); compareFilter.addChild(constFilter); ColumnTupleExpression colTuple = new ColumnTupleExpression(colM); NumberTupleExpression constTuple = new NumberTupleExpression(value); Pair<TupleFilter, TupleExpression> whenEntry = new Pair<TupleFilter, TupleExpression>(compareFilter, colTuple); CaseTupleExpression caseTuple = new CaseTupleExpression(Lists.newArrayList(whenEntry), constTuple); byte[] result = TupleExpressionSerializer.serialize(caseTuple, StringCodeSystem.INSTANCE); TupleExpression desTuple = TupleExpressionSerializer.deserialize(result, StringCodeSystem.INSTANCE); assertEquals(caseTuple, desTuple); } }
@Override public TupleExpression visitNumber(NumberTupleExpression numExpr) { NumberTupleExpression copyExpr = new NumberTupleExpression(numExpr.getValue()); if (ifToCnt) { List<TupleExpression> children = Lists.newArrayList(cntExpr, copyExpr); ifCntSet = true; return new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.MULTIPLE, children); } return copyExpr; }
private TupleExpression getCountColumnExpression(TblColRef colRef) { List<Pair<TupleFilter, TupleExpression>> whenList = Lists.newArrayListWithExpectedSize(1); TupleFilter whenFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.ISNULL); whenFilter.addChild(new ColumnTupleFilter(colRef)); whenList.add(new Pair<TupleFilter, TupleExpression>(whenFilter, new NumberTupleExpression(0))); TupleExpression elseExpr = new ColumnTupleExpression(SumDynamicFunctionDesc.mockCntCol); TupleExpression ret = new CaseTupleExpression(whenList, elseExpr); ret.setDigest("_KY_COUNT(" + colRef.getName() + ")"); return ret; } }
break; case NUMBER: tuple = new NumberTupleExpression(null); break; case STRING:
@Override public TupleExpression visitLiteral(RexLiteral literal) { TupleExpression tuple; Object value = literal.getValue(); if (value instanceof Number) { tuple = new NumberTupleExpression(value); } else { if (value == null) { tuple = new StringTupleExpression(null); } else if (value instanceof NlsString) { tuple = new StringTupleExpression(((NlsString) value).getValue()); } else { tuple = new StringTupleExpression(value.toString()); } } tuple.setDigest(literal.toString()); return tuple; } }