protected ConvertedRelNode validateAndConvert(SqlNode sqlNode) throws ForemanSetupException, RelConversionException, ValidationException { final SqlNode rewrittenSqlNode = rewrite(sqlNode); final TypedSqlNode validatedTypedSqlNode = validateNode(rewrittenSqlNode); final SqlNode validated = validatedTypedSqlNode.getSqlNode(); RelNode rel = convertToRel(validated); rel = preprocessNode(rel); return new ConvertedRelNode(rel, validatedTypedSqlNode.getType()); }
private TypedSqlNode validateNode(SqlNode sqlNode) throws ValidationException, RelConversionException, ForemanSetupException { TypedSqlNode typedSqlNode = planner.validateAndGetType(sqlNode); SqlNode sqlNodeValidated = typedSqlNode.getSqlNode(); // Check if the unsupported functionality is used UnsupportedOperatorsVisitor visitor = UnsupportedOperatorsVisitor.createVisitor(context); try { sqlNodeValidated.accept(visitor); } catch (UnsupportedOperationException ex) { // If the exception due to the unsupported functionalities visitor.convertException(); // If it is not, let this exception move forward to higher logic throw ex; } return typedSqlNode; }