protected PreparedStatement prepareStatementAndSetParameters(SQLSerializer serializer, boolean withKeys) throws SQLException { listeners.prePrepare(context); queryString = serializer.toString(); constants = serializer.getConstants(); logQuery(logger, queryString, constants); PreparedStatement stmt; if (withKeys) { String[] target = new String[keys.size()]; for (int i = 0; i < target.length; i++) { target[i] = ColumnMetadata.getName(getKeys().get(i)); } stmt = connection().prepareStatement(queryString, target); } else { stmt = connection().prepareStatement(queryString); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); context.addPreparedStatement(stmt); listeners.prepared(context); return stmt; }
@SuppressWarnings("unchecked") protected long executeCompositeMerge() { if (hasRow()) { // update SQLUpdateClause update = new SQLUpdateClause(connection(), configuration, entity); populate(update); addListeners(update); addKeyConditions(update); return update.execute(); } else { // insert SQLInsertClause insert = new SQLInsertClause(connection(), configuration, entity); addListeners(insert); populate(insert); return insert.execute(); } }
protected boolean hasRow() { SQLQuery<?> query = new SQLQuery<Void>(connection(), configuration).from(entity); for (SQLListener listener : listeners.getListeners()) { query.addListener(listener); } query.addListener(SQLNoCloseListener.DEFAULT); addKeyConditions(query); return query.select(Expressions.ONE).fetchFirst() != null; }
context = startContext(connection(), metadata, entity); try { if (configuration.getTemplates().isNativeMerge()) { if (hasRow()) { SQLUpdateClause update = new SQLUpdateClause(connection(), configuration, entity); update.addListener(listeners); populate(update); } else { SQLInsertClause insert = new SQLInsertClause(connection(), configuration, entity); insert.addListener(listeners); populate(insert);
protected long executeNativeMerge() { context = startContext(connection(), metadata, entity); PreparedStatement stmt = null; Collection<PreparedStatement> stmts = null;