/** * Chain another drop table statement to this statement. * * @param drop the statement to add */ public void addNextDropTable(DropTable drop) { if (next == null) { next = drop; } else { next.addNextDropTable(drop); } }
public void setDropAction(int dropAction) { this.dropAction = dropAction; if (next != null) { next.setDropAction(dropAction); } }
public void setIfExists(boolean b) { ifExists = b; if (next != null) { next.setIfExists(b); } }
boolean ifExists = readIfExists(false); String tableName = readIdentifierWithSchema(); DropTable command = new DropTable(session, getSchema()); command.setTableName(tableName); while (readIf(",")) { tableName = readIdentifierWithSchema(); DropTable next = new DropTable(session, getSchema()); next.setTableName(tableName); command.addNextDropTable(next); command.setIfExists(ifExists); if (readIf("CASCADE")) { command.setDropAction(AlterTableAddConstraint.CASCADE); readIf("CONSTRAINTS"); } else if (readIf("RESTRICT")) { command.setDropAction(AlterTableAddConstraint.RESTRICT); } else if (readIf("IGNORE")) { command.setDropAction(AlterTableAddConstraint.SET_DEFAULT);
private void executeDrop(DropTable next) { String tableName = next.getTableName(); TableMate table = getTableMate(tableName); invokeUpdateWorker(dropWorkers.get(next)); table.markDeleted(); next = next.getNext(); if (next != null) { executeDrop(next); } }
/** * @see http://dev.mysql.com/doc/refman/5.7/en/drop-table.html */ @Override public SQLTranslated translate(DropTable prepared, ObjectNode node) { String forTable = node.getCompositeObjectName(); StringBuilder sql = new StringBuilder(); sql.append("DROP TABLE"); if (prepared.isIfExists()) { sql.append(" IF EXISTS"); } sql.append(" ").append(identifier(forTable)); if (prepared.getDropAction() == AlterTableAddConstraint.CASCADE) { sql.append(" CASCADE"); } return SQLTranslated.build().sql(sql.toString()); }
private String executeExplain(DropTable next) { StringBuilder explain = new StringBuilder(); String plan = explainForWorker(dropWorkers.get(next)); explain.append(plan); next = next.getNext(); if (next != null) { explain.append("\n"); explain.append(StringUtils.indent(executeExplain(next), 4, false)); } return explain.toString(); }
@Override public UpdateWorker createUpdateWorker(DropTable dropTable, ObjectNode node) { SQLTranslated translated = repo.getSQLTranslator().translate(dropTable, node); JdbcUpdateWorker handler = new JdbcUpdateWorker(dropTable.getSession(), node.getShardName(), translated.sql, translated.params); return handler; }
private void prepareDrop(DropTable next) { String tableName = next.getTableName(); TableMate table = getTableMate(tableName); RoutingResult rr = routingHandler.doRoute(table); ObjectNode[] selectNodes = rr.getSelectNodes(); List<UpdateWorker> workers = New.arrayList(selectNodes.length); for (ObjectNode objectNode : selectNodes) { UpdateWorker worker = queryHandlerFactory.createUpdateWorker(prepared, objectNode); workers.add(worker); } dropWorkers.put(next, workers); next = next.getNext(); if (next != null) { prepareDrop(next); } }