package com.taobao.tddl.optimizer.parse.cobar.visitor; import com.alibaba.cobar.parser.ast.expression.Expression; import com.alibaba.cobar.parser.ast.stmt.dml.DMLDeleteStatement; import com.alibaba.cobar.parser.visitor.EmptySQLASTVisitor; import com.taobao.tddl.common.exception.NotSupportException; import com.taobao.tddl.optimizer.core.ast.dml.DeleteNode; import com.taobao.tddl.optimizer.core.ast.query.TableNode; /** * delete处理 * * @since 5.0.0 */ public class MySqlDeleteVisitor extends EmptySQLASTVisitor { private DeleteNode deleteNode; public void visit(DMLDeleteStatement node) { TableNode table = null; if (node.getTableNames().size() == 1) { table = getTableNode(node.getTableNames().get(0).getIdTextUpUnescape()); } else { throw new NotSupportException("not support multi table delete"); } Expression expr = node.getWhereCondition(); if (expr != null) { handleCondition(expr, table); } this.deleteNode = table.delete(); } private TableNode getTableNode(String tableName) { return new TableNode(tableName); } private void handleCondition(Expression expr, TableNode table) { MySqlExprVisitor mv = new MySqlExprVisitor(); expr.accept(mv); table.query(mv.getFilter()); } public DeleteNode getDeleteNode() { return deleteNode; } }