@Override public boolean visit(MySqlInsertStatement x) { setMode(x, Mode.Insert); setAliasMap(); if (x.getTableName() instanceof SQLIdentifierExpr) { String ident = ((SQLIdentifierExpr) x.getTableName()).getName(); setCurrentTable(x, ident); TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map<String, String> aliasMap = getAliasMap(); if (aliasMap != null) { if (x.getAlias() != null) { aliasMap.put(x.getAlias(), ident); } aliasMap.put(ident, ident); } } accept(x.getColumns()); accept(x.getValuesList()); accept(x.getQuery()); accept(x.getDuplicateKeyUpdate()); return false; }
/** * 是否为批量插入:insert into ...values (),()...或 insert into ...select..... * * @param insertStmt * @return */ private static boolean isMultiInsert(MySqlInsertStatement insertStmt) { return (insertStmt.getValuesList() != null && insertStmt.getValuesList().size() > 1) || insertStmt.getQuery() != null; }
@Override public boolean visit(MySqlInsertStatement x) { print("INSERT "); if (x.isLowPriority()) { print("LOW_PRIORITY "); } if (x.isDelayed()) { print("DELAYED "); } if (x.isHighPriority()) { print("HIGH_PRIORITY "); } if (x.isIgnore()) { print("IGNORE "); } print("INTO "); x.getTableName().accept(this); if (x.getColumns().size() > 0) { incrementIndent(); println(); print("("); for (int i = 0, size = x.getColumns().size(); i < size; ++i) { if (i != 0) { if (i % 5 == 0) { println(); } print(", "); } x.getColumns().get(i).accept(this); } print(")"); decrementIndent(); } if (x.getValuesList().size() != 0) { println(); print("VALUES"); println(); for (int i = 0, size = x.getValuesList().size(); i < size; ++i) { if (i != 0) { print(", "); } x.getValuesList().get(i).accept(this); } } if (x.getQuery() != null) { print(" "); x.getQuery().accept(this); } if (x.getDuplicateKeyUpdate().size() != 0) { print(" ON DUPLICATE KEY UPDATE "); printAndAccept(x.getDuplicateKeyUpdate(), ", "); } return false; }