示例#1
0
  @Test
  public void checkTransformSelectionAndsAreSplit() {
    IRelAlgExpr subResult;
    StubResult<IRelAlgExpr> subExpression;
    IRowSelector[] basePredicates = new IRowSelector[3];
    IRowSelector[] results = new IRowSelector[3];
    IRowSelector predicate;

    subResult = createMock(IRelAlgExpr.class);
    subExpression = new StubResult<IRelAlgExpr>(subResult);
    for (int i = 0; i < basePredicates.length; i++) {
      results[i] = createMock(IRowSelector.class);
      List<IRowSelector> currentSubResult = new LinkedList<IRowSelector>();
      currentSubResult.add(results[i]);
      basePredicates[i] = new RowselectorStubResult<Collection<IRowSelector>>(currentSubResult);
    }

    predicate =
        new BinaryOperation(
            new BinaryOperation(basePredicates[0], BooleanValueCombination.AND, basePredicates[1]),
            BooleanValueCombination.AND,
            basePredicates[2]);

    Selection input = new Selection(predicate, subExpression);

    replayAll();
    SelectionSplitter subject = new SelectionSplitter();
    IRelAlgExpr result = subject.transformSelection(input);
    verifyAll();

    Selection[] transformedSelections = new Selection[3];
    assertThat(result, is(instanceOf(Selection.class)));
    transformedSelections[0] = (Selection) result;
    assertThat(transformedSelections[0].getSubExpression(), is(instanceOf(Selection.class)));
    transformedSelections[1] = (Selection) transformedSelections[0].getSubExpression();
    assertThat(transformedSelections[1].getSubExpression(), is(instanceOf(Selection.class)));
    transformedSelections[2] = (Selection) transformedSelections[1].getSubExpression();

    assertThat(transformedSelections[2].getSubExpression(), is(equalTo(subResult)));
    for (int i = 0; i < basePredicates.length; i++) {
      assertThat(
          results[i],
          is(
              anyOf(
                  equalTo(transformedSelections[0].getPredicate()),
                  equalTo(transformedSelections[1].getPredicate()),
                  equalTo(transformedSelections[2].getPredicate()))));
    }
  }