@Override public UpdateWorker createUpdateWorker(Update update, ObjectNode node, Row row) { SQLTranslated translated = repo.getSQLTranslator().translate(update, node, row); JdbcUpdateWorker handler = new JdbcUpdateWorker(update.getSession(), node.getShardName(), translated.sql, translated.params); return handler; }
ArrayList<Value> params = New.arrayList(); String forTable = node.getCompositeObjectName(); List<Column> columns = prepared.getColumns(); Expression condition = prepared.getCondition(); Expression limitExpr = prepared.getLimitExpr(); StatementBuilder sql = new StatementBuilder(); sql.append("UPDATE "); condition.getPreparedSQL(prepared.getSession(), params); sql.append(" WHERE ").append(StringUtils.unEnclose(condition.getSQL())); limitExpr.getPreparedSQL(prepared.getSession(), params); sql.append(" LIMIT ").append(StringUtils.unEnclose(limitExpr.getSQL()));
private Update parseUpdate() { Update command = new Update(session); currentPrepared = command; int start = lastParseIndex; TableFilter filter = readSimpleTableFilter(); command.setTableFilter(filter); read("SET"); if (readIf("(")) { if (columns.size() == 1) { command.setAssignment(columns.get(0), expression); } else { for (int i = 0, size = columns.size(); i < size; i++) { f.setParameter(1, ValueExpression.get(ValueInt.get(i + 1))); f.doneWithParameters(); command.setAssignment(column, f); expression = readExpression(); command.setAssignment(column, expression); } while (readIf(",")); command.setCondition(condition); command.setLimit(limit);
@Override protected void doPrepare() { TableFilter tableFilter = prepared.getTableFilter(); TableMate table = getTableMate(tableFilter); table.check(); List<Column> columns = prepared.getColumns(); Map<Column, Expression> valueMap = prepared.getExpressionMap(); Column[] ruleColumns = table.getRuleColumns(); for (Column column : ruleColumns) {