Example #1
0
    /**
     * Walks over an expression, and throws <code>CannotTranslate</code> if expression cannot be
     * translated.
     *
     * @param rex Expression
     * @throws org.eigenbase.oj.rel.JavaRelImplementor.TranslationTester.CannotTranslate if
     *     expression or a sub-expression cannot be translated
     */
    protected void go(RexNode rex) throws CannotTranslate {
      if (rex instanceof RexCall) {
        final RexCall call = (RexCall) rex;
        if (!translator.canConvertCall(call)) {
          throw new CannotTranslate();
        }
        if (!deep) {
          return;
        }
        RexNode[] operands = call.operands;
        for (int i = 0; i < operands.length; i++) {
          go(operands[i]);
        }
      } else if (rex instanceof RexFieldAccess) {
        if (!deep) {
          return;
        }

        go(((RexFieldAccess) rex).getReferenceExpr());
      }
    }