@Override protected void doPrepare() { TableMate table = toTableMate(prepared.getTable()); table.check(); prepared.setCurrentRowNumber(0); ArrayList<Expression[]> list = prepared.getList(); Column[] columns = prepared.getColumns(); if (list.size() > 0) { List<Row> values = New.arrayList(10); for (int x = 0, size = list.size(); x < size; x++) { prepared.setCurrentRowNumber(x + 1); Expression[] expr = list.get(x); Row newRow = table.getTemplateRow(); newRow.setValue(index, v); } catch (DbException ex) { throw prepared.setRow(ex, x, Prepared.getSQL(expr)); Query query = prepared.getQuery(); query.prepare();
@Override protected String doExplain() { TableMate table = toTableMate(prepared.getTable()); if (workers != null) { return explainForWorker(workers); } else { Query query = prepared.getQuery(); String subPlan = query.explainPlan(); StringBuilder explain = new StringBuilder(); explain.append("replace into ").append(table.getName()).append(" with query result"); explain.append(StringUtils.indent(subPlan, 4, false)); return explain.toString(); } }
Replace command = new Replace(session); currentPrepared = command; read("INTO"); Table table = readTableOrView(); command.setTable(table); if (readIf("(")) { if (isSelect()) { command.setQuery(parseSelect()); read(")"); return command; command.setColumns(columns); command.addRow(values.toArray(new Expression[values.size()])); } while (readIf(",")); } else { command.setQuery(parseSelect());
/** * @see http://dev.mysql.com/doc/refman/5.7/en/replace.html */ @Override public SQLTranslated translate(Replace replace, ObjectNode node, Row ... rows) { ArrayList<Value> params = New.arrayList(); String forTable = node.getCompositeObjectName(); Column[] columns = replace.getColumns(); StatementBuilder sql = new StatementBuilder("REPLACE INTO "); sql.append(identifier(forTable)).append('('); for (Column c : columns) { sql.appendExceptFirst(", "); sql.append(c.getSQL()); } sql.append(')'); sql.append(") VALUES "); appendValues(params, sql, columns, rows); return SQLTranslated.build().sql(sql.toString()).sqlParams(params); }
private synchronized void flushReplaceRows() { try { TableMate table = toTableMate(prepared.getTable()); if (replaceRows.isEmpty()) { return; } prepareReplace(table, replaceRows); affectRows += invokeUpdateWorker(workers); } finally { replaceRows.clear(); } }
rowNumber = 0; affectRows = 0; TableMate table = toTableMate(prepared.getTable()); Query query = prepared.getQuery(); Column[] columns = prepared.getColumns(); ResultInterface rows = query.query(0); while (rows.next()) { Value[] r = rows.currentRow(); Row newRow = table.getTemplateRow(); prepared.setCurrentRowNumber(rowNumber); for (int j = 0; j < columns.length; j++) { Column c = columns[j]; newRow.setValue(index, v); } catch (DbException ex) { throw prepared.setRow(ex, rowNumber, Prepared.getSQL(r));