@Override public void addRow(Value[] values) { TableMate table = toTableMate(prepared.getTable()); Row newRow = table.getTemplateRow(); Column[] columns = prepared.getColumns(); prepared.setCurrentRowNumber(++rowNumber); for (int j = 0, len = columns.length; j < len; j++) { Column c = columns[j]; int index = c.getColumnId(); try { Value v = c.convert(values[j]); newRow.setValue(index, v); } catch (DbException ex) { throw prepared.setRow(ex, rowNumber, Prepared.getSQL(values)); } } addNewRowFlushIfNeed(newRow); }
/** * Get the PreparedExecutor with the execution explain. * * @return the execution explain */ @Override public String doExplain() { StringBuilder explain = new StringBuilder(); explain.append(explainForWorker(workers)); if(asQueryInsert != null) { String explainPlan = asQueryInsert.explainPlan(); explain.append(StringUtils.indent(explainPlan, 4, false)); } return explain.toString(); }
@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("insert into ").append(table.getName()).append(" with query result"); explain.append(StringUtils.indent(subPlan, 4, false)); return explain.toString(); } }
@Override protected void doPrepare() { TableMate table = toTableMate(prepared.getTable()); table.check(); prepared.setCurrentRowNumber(0); ArrayList<Expression[]> list = prepared.getList(); Column[] columns = prepared.getColumns(); Map<Column, Expression> valueMap = prepared.getDuplicateKeyAssignmentMap(); if (valueMap != null) { Column[] ruleColumns = table.getRuleColumns(); Row newRow = table.getTemplateRow(); Expression[] expr = list.get(x); prepared.setCurrentRowNumber(x + 1); for (int i = 0; i < columnLen; i++) { Column c = columns[i]; newRow.setValue(index, v); } catch (DbException ex) { throw prepared.setRow(ex, x, Prepared.getSQL(expr)); Query query = prepared.getQuery(); query.prepare();
private Insert parseInsert() { Insert command = new Insert(session); currentPrepared = command; read("INTO"); Table table = readTableOrView(); command.setTable(table); Column[] columns = null; if (readIf("(")) { if (isSelect()) { command.setQuery(parseSelect()); read(")"); return command; command.setColumns(columns); command.setInsertFromSelect(true); command.setSortedInsertMode(true); command.addRow(expr); } else if (readIf("VALUES")) { read("("); command.addRow(values.toArray(new Expression[values.size()])); command.setColumns(columnList.toArray(new Column[columnList.size()])); command.addRow(values.toArray(new Expression[values.size()])); } else { command.setQuery(parseSelect());
asQueryInsert = new Insert(session); asQueryInsert.setSortedInsertMode(prepared.isSortedInsertMode()); asQueryInsert.setQuery(query); asQueryInsert.setTable(tableMate); asQueryInsert.setInsertFromSelect(true); asQueryInsert.prepare();
StatementBuilder sql = new StatementBuilder(256); String forTable = node.getCompositeObjectName(); Column[] columns = insert.getColumns(); sql.append("INSERT INTO "); sql.append(identifier(forTable)).append('('); for (Column c : insert.getColumns()) { sql.appendExceptFirst(", "); sql.append(c.getSQL()); HashMap<Column, Expression> duplicateKeyMap = insert.getDuplicateKeyAssignmentMap(); if(duplicateKeyMap != null) { sql.resetCount();
@Override public int doUpdate() { if (workers != null) { return invokeUpdateWorker(workers); } else { Query query = prepared.getQuery(); if (prepared.isInsertFromSelect()) { query.query(0, this); } else { ResultInterface rows = query.query(0); while (rows.next()) { Value[] r = rows.currentRow(); addRow(r); } rows.close(); } flushNewRows(); return this.affectRows; } }
private synchronized void flushNewRows() { try { TableMate table = toTableMate(prepared.getTable()); if (newRows.isEmpty()) { return; } prepareInsert(table, newRows); affectRows += invokeUpdateWorker(workers); } finally { newRows.clear(); } }
@Override public UpdateWorker createUpdateWorker(Insert insert, ObjectNode node, Row ... rows) { SQLTranslated translated = repo.getSQLTranslator().translate(insert, node, rows); JdbcUpdateWorker handler = new JdbcUpdateWorker(insert.getSession(), node.getShardName(), translated.sql, translated.params); return handler; }