package sqlancer.mysql; import sqlancer.mysql.ast.MySQLBetweenOperation; import sqlancer.mysql.ast.MySQLBinaryComparisonOperation; import sqlancer.mysql.ast.MySQLBinaryLogicalOperation; import sqlancer.mysql.ast.MySQLBinaryOperation; import sqlancer.mysql.ast.MySQLCastOperation; import sqlancer.mysql.ast.MySQLCollate; import sqlancer.mysql.ast.MySQLColumnReference; import sqlancer.mysql.ast.MySQLComputableFunction; import sqlancer.mysql.ast.MySQLConstant; import sqlancer.mysql.ast.MySQLExists; import sqlancer.mysql.ast.MySQLExpression; import sqlancer.mysql.ast.MySQLInOperation; import sqlancer.mysql.ast.MySQLJoin; import sqlancer.mysql.ast.MySQLOrderByTerm; import sqlancer.mysql.ast.MySQLSelect; import sqlancer.mysql.ast.MySQLStringExpression; import sqlancer.mysql.ast.MySQLTableReference; import sqlancer.mysql.ast.MySQLText; import sqlancer.mysql.ast.MySQLUnaryPostfixOperation; public interface MySQLVisitor { void visit(MySQLTableReference ref); void visit(MySQLConstant constant); void visit(MySQLColumnReference column); void visit(MySQLUnaryPostfixOperation column); void visit(MySQLComputableFunction f); void visit(MySQLBinaryLogicalOperation op); void visit(MySQLSelect select); void visit(MySQLBinaryComparisonOperation op); void visit(MySQLCastOperation op); void visit(MySQLInOperation op); void visit(MySQLBinaryOperation op); void visit(MySQLOrderByTerm op); void visit(MySQLExists op); void visit(MySQLStringExpression op); void visit(MySQLBetweenOperation op); void visit(MySQLCollate collate); void visit(MySQLJoin join); void visit(MySQLText text); default void visit(MySQLExpression expr) { if (expr instanceof MySQLConstant) { visit((MySQLConstant) expr); } else if (expr instanceof MySQLColumnReference) { visit((MySQLColumnReference) expr); } else if (expr instanceof MySQLUnaryPostfixOperation) { visit((MySQLUnaryPostfixOperation) expr); } else if (expr instanceof MySQLComputableFunction) { visit((MySQLComputableFunction) expr); } else if (expr instanceof MySQLBinaryLogicalOperation) { visit((MySQLBinaryLogicalOperation) expr); } else if (expr instanceof MySQLSelect) { visit((MySQLSelect) expr); } else if (expr instanceof MySQLBinaryComparisonOperation) { visit((MySQLBinaryComparisonOperation) expr); } else if (expr instanceof MySQLCastOperation) { visit((MySQLCastOperation) expr); } else if (expr instanceof MySQLInOperation) { visit((MySQLInOperation) expr); } else if (expr instanceof MySQLBinaryOperation) { visit((MySQLBinaryOperation) expr); } else if (expr instanceof MySQLOrderByTerm) { visit((MySQLOrderByTerm) expr); } else if (expr instanceof MySQLExists) { visit((MySQLExists) expr); } else if (expr instanceof MySQLJoin) { visit((MySQLJoin) expr); } else if (expr instanceof MySQLStringExpression) { visit((MySQLStringExpression) expr); } else if (expr instanceof MySQLBetweenOperation) { visit((MySQLBetweenOperation) expr); } else if (expr instanceof MySQLTableReference) { visit((MySQLTableReference) expr); } else if (expr instanceof MySQLCollate) { visit((MySQLCollate) expr); } else if (expr instanceof MySQLText) { visit((MySQLText) expr); } else { throw new AssertionError(expr); } } static String asString(MySQLExpression expr) { MySQLToStringVisitor visitor = new MySQLToStringVisitor(); visitor.visit(expr); return visitor.get(); } static String asExpectedValues(MySQLExpression expr) { MySQLExpectedValueVisitor visitor = new MySQLExpectedValueVisitor(); visitor.visit(expr); return visitor.get(); } }