@Override public boolean visit(MySqlInsertStatement x) { SQLName sqlName = x.getTableName(); if (sqlName != null) { currentTable = sqlName.toString(); } return false; }
public boolean visit(MySqlInsertStatement x) { String tableName = x.getTableName().getSimpleName(); if (!ruleSet.relativeTo(tableName)) return false; val sqlFieldIndexes = Lists.<SqlFieldIndex>newArrayList(); for (int i = 0, ii = x.getColumns().size(); i < ii; ++i) { val valueExpr = x.getValues().getValues().get(i); valueExpr.accept(this); val columnExpr = x.getColumns().get(i); if (!(columnExpr instanceof SQLIdentifierExpr)) continue; String columnName = ((SQLIdentifierExpr) columnExpr).getName(); if (!ruleSet.relativeTo(tableName, columnName)) continue; if (!(valueExpr instanceof SQLVariantRefExpr)) continue; val index = new SqlFieldIndex(tableName, columnName, variantIndex - 1); sqlFieldIndexes.add(index); } this.sqlFieldIndexes = sqlFieldIndexes.toArray(new SqlFieldIndex[0]); return false; } }
@Override public boolean visit(final MySqlInsertStatement x) { SQLName expr = x.getTableName(); String tableName = expr.toString(); String schema = null; if (expr instanceof SQLPropertyExpr) { SQLPropertyExpr propertyExpr = (SQLPropertyExpr) expr; tableName = propertyExpr.getSimpleName(); schema = propertyExpr.getOwner().toString(); } tableName = SQLUtil.getExactlyValue(tableName); getParsedResult().setTable(new Table(tableName, schema, x.getAlias())); List<SQLExpr> columns = x.getColumns(); for (SQLExpr sqlExpr : columns) { String columnName = SQLUtil.getExactlyValue(sqlExpr.toString()); Column column = new Column(columnName, tableName); getParsedResult().getColumns().add(column); } return super.visit(x); }
/** * 注意:子查询,批量,分片 * @param result */ @Override public void parse(ParseResult result) { // 解析sql statement = parser.parseStatement(); MySqlInsertStatement insert = (MySqlInsertStatement)statement; String tableName = StringUtil.removeBackquote(insert.getTableName().getSimpleName()); result.addTable(tableName); // 不是分区表 if (!BaymaxContext.isPartitionTable(tableName)){ return; } if (isMultiInsert(insert)){ // 批量插入 throw new UnsupportedOperationException("分区表不支持insert into ...values (),()...或 insert into ...select.....形式的批量插入"); }else { // 单条插入 result.setCalculateUnits(parserSingleInsert(tableName, insert)); } }