/** * 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()); } }