use of org.apache.cayenne.access.translator.DbAttributeBinding in project cayenne by apache.
the class DefaultTransformerFactory method encryptor.
@Override
public BindingsTransformer encryptor(DbAttributeBinding[] bindings, ExtendedTypeMap extendedTypeMap) {
int len = bindings.length;
List<Integer> cryptoColumns = null;
for (int i = 0; i < len; i++) {
DbAttribute a = bindings[i].getAttribute();
if (columnMapper.isEncrypted(a)) {
if (cryptoColumns == null) {
cryptoColumns = new ArrayList<>(len - i);
}
cryptoColumns.add(i);
}
}
if (cryptoColumns != null) {
int dlen = cryptoColumns.size();
int[] positions = new int[dlen];
ValueEncryptor[] transformers = new ValueEncryptor[dlen];
for (int i = 0; i < dlen; i++) {
int pos = cryptoColumns.get(i);
DbAttributeBinding b = bindings[pos];
positions[i] = pos;
transformers[i] = transformerFactory.encryptor(b.getAttribute());
}
return new DefaultBindingsTransformer(positions, transformers, bytesTransformerFactory.encryptor(), extendedTypeMap);
}
return null;
}
use of org.apache.cayenne.access.translator.DbAttributeBinding in project cayenne by apache.
the class BatchAction method runAsIndividualQueries.
/**
* Executes batch as individual queries over the same prepared statement.
*/
protected void runAsIndividualQueries(Connection connection, BatchTranslator translator, OperationObserver delegate, boolean generatesKeys) throws SQLException, Exception {
JdbcEventLogger logger = dataNode.getJdbcEventLogger();
boolean useOptimisticLock = query.isUsingOptimisticLocking();
String queryStr = translator.getSql();
// log batch SQL execution
logger.log(queryStr);
// run batch queries one by one
DbAdapter adapter = dataNode.getAdapter();
try (PreparedStatement statement = prepareStatement(connection, queryStr, adapter, generatesKeys)) {
for (BatchQueryRow row : query.getRows()) {
DbAttributeBinding[] bindings = translator.updateBindings(row);
logger.logQueryParameters("bind", bindings);
bind(adapter, statement, bindings);
int updated = statement.executeUpdate();
if (useOptimisticLock && updated != 1) {
throw new OptimisticLockException(row.getObjectId(), query.getDbEntity(), queryStr, row.getQualifier());
}
delegate.nextCount(query, updated);
if (generatesKeys) {
processGeneratedKeys(statement, delegate, row);
}
logger.logUpdateCount(updated);
}
}
}
use of org.apache.cayenne.access.translator.DbAttributeBinding in project cayenne by apache.
the class SelectAction method performAction.
@SuppressWarnings({ "unchecked", "rawtypes", "resource" })
@Override
public void performAction(Connection connection, OperationObserver observer) throws SQLException, Exception {
final long t1 = System.currentTimeMillis();
JdbcEventLogger logger = dataNode.getJdbcEventLogger();
SelectTranslator translator = dataNode.selectTranslator(query);
final String sql = translator.getSql();
final DbAttributeBinding[] bindings = translator.getBindings();
logger.logQuery(sql, bindings);
PreparedStatement statement = connection.prepareStatement(sql);
bind(dataNode.getAdapter(), statement, bindings);
int fetchSize = queryMetadata.getStatementFetchSize();
if (fetchSize != 0) {
statement.setFetchSize(fetchSize);
}
ResultSet rs;
// exception happens
try {
rs = statement.executeQuery();
} catch (Exception ex) {
statement.close();
throw ex;
}
RowDescriptor descriptor = new RowDescriptorBuilder().setColumns(translator.getResultColumns()).getDescriptor(dataNode.getAdapter().getExtendedTypes());
RowReader<?> rowReader = dataNode.rowReader(descriptor, queryMetadata, translator.getAttributeOverrides());
ResultIterator it = new JDBCResultIterator(statement, rs, rowReader);
it = forIteratedResult(it, observer, connection, t1, sql);
it = forSuppressedDistinct(it, translator);
it = forFetchLimit(it, translator);
if (observer.isIteratedResult()) {
try {
observer.nextRows(query, it);
} catch (Exception ex) {
it.close();
throw ex;
}
} else {
List<DataRow> resultRows;
try {
resultRows = it.allRows();
} finally {
it.close();
}
dataNode.getJdbcEventLogger().logSelectCount(resultRows.size(), System.currentTimeMillis() - t1, sql);
observer.nextRows(query, resultRows);
}
}
use of org.apache.cayenne.access.translator.DbAttributeBinding in project cayenne by apache.
the class InsertBatchTranslator method createBindings.
@Override
protected DbAttributeBinding[] createBindings() {
List<DbAttribute> attributes = query.getDbAttributes();
int len = attributes.size();
DbAttributeBinding[] bindings = new DbAttributeBinding[len];
for (int i = 0; i < len; i++) {
DbAttribute a = attributes.get(i);
bindings[i] = new DbAttributeBinding(a);
// precompiled here
if (includeInBatch(a)) {
// setting fake position here... all we care about is that it is
// > -1
bindings[i].include(1, null, null);
} else {
bindings[i].exclude();
}
}
return bindings;
}
Aggregations