You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/03/15 16:25:59 UTC
svn commit: r1577882 - in
/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne:
access/jdbc/ access/translator/batch/ log/
Author: aadamchik
Date: Sat Mar 15 15:25:59 2014
New Revision: 1577882
URL: http://svn.apache.org/r1577882
Log:
CAY-1915 BatchTranslator instead of performing bindings should return binding object whose values can be altered
optimizing parameter logging, now that we have a bindings object
Modified:
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/JdbcEventLogger.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/NoopJdbcEventLogger.java
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java?rev=1577882&r1=1577881&r2=1577882&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java Sat Mar 15 15:25:59 2014
@@ -62,7 +62,8 @@ public class BatchAction extends BaseSQL
int len = bindings.size();
for (int i = 0; i < len; i++) {
BatchParameterBinding b = bindings.get(i);
- adapter.bindParameter(statement, b.getValue(), i + 1, b.getAttribute().getType(), b.getAttribute().getScale());
+ adapter.bindParameter(statement, b.getValue(), i + 1, b.getAttribute().getType(), b.getAttribute()
+ .getScale());
}
}
@@ -130,12 +131,8 @@ public class BatchAction extends BaseSQL
try {
for (BatchQueryRow row : query.getRows()) {
- if (isLoggable) {
- logger.logQueryParameters("batch bind", query.getDbAttributes(),
- queryBuilder.getParameterValues(row), query instanceof InsertBatchQuery);
- }
-
List<BatchParameterBinding> bindings = queryBuilder.createBindings(row);
+ logger.logQueryParameters("batch bind", bindings);
bind(adapter, statement, bindings);
statement.addBatch();
@@ -176,7 +173,6 @@ public class BatchAction extends BaseSQL
OperationObserver delegate, boolean generatesKeys) throws SQLException, Exception {
JdbcEventLogger logger = dataNode.getJdbcEventLogger();
- boolean isLoggable = logger.isLoggable();
boolean useOptimisticLock = query.isUsingOptimisticLocking();
String queryStr = queryBuilder.createSqlString();
@@ -191,12 +187,10 @@ public class BatchAction extends BaseSQL
Statement.RETURN_GENERATED_KEYS) : connection.prepareStatement(queryStr);
try {
for (BatchQueryRow row : query.getRows()) {
- if (isLoggable) {
- logger.logQueryParameters("bind", query.getDbAttributes(), queryBuilder.getParameterValues(row),
- query instanceof InsertBatchQuery);
- }
List<BatchParameterBinding> bindings = queryBuilder.createBindings(row);
+ logger.logQueryParameters("bind", bindings);
+
bind(adapter, statement, bindings);
int updated = statement.executeUpdate();
@@ -211,9 +205,7 @@ public class BatchAction extends BaseSQL
processGeneratedKeys(statement, delegate, row);
}
- if (isLoggable) {
- logger.logUpdateCount(updated);
- }
+ logger.logUpdateCount(updated);
}
} finally {
try {
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java?rev=1577882&r1=1577881&r2=1577882&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/BatchTranslator.java Sat Mar 15 15:25:59 2014
@@ -21,7 +21,6 @@ package org.apache.cayenne.access.transl
import java.io.IOException;
import java.sql.Types;
-import java.util.ArrayList;
import java.util.List;
import org.apache.cayenne.dba.DbAdapter;
@@ -88,19 +87,4 @@ public abstract class BatchTranslator {
*/
public abstract List<BatchParameterBinding> createBindings(BatchQueryRow row);
- /**
- * Returns a list of values for the current batch iteration. Used primarily
- * for logging.
- *
- * @since 1.2
- */
- public List<Object> getParameterValues(BatchQueryRow row) {
- int len = query.getDbAttributes().size();
- List<Object> values = new ArrayList<Object>(len);
- for (int i = 0; i < len; i++) {
- values.add(row.getValue(i));
- }
- return values;
- }
-
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java?rev=1577882&r1=1577881&r2=1577882&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java Sat Mar 15 15:25:59 2014
@@ -60,27 +60,6 @@ public class InsertBatchTranslator exten
return bindings;
}
- /**
- * Returns a list of values for the current batch iteration. Performs
- * filtering of attributes based on column generation rules. Used primarily
- * for logging.
- *
- * @since 1.2
- */
- @Override
- public List<Object> getParameterValues(BatchQueryRow row) {
- List<DbAttribute> attributes = query.getDbAttributes();
- int len = attributes.size();
- List<Object> values = new ArrayList<Object>(len);
- for (int i = 0; i < len; i++) {
- DbAttribute attribute = attributes.get(i);
- if (includeInBatch(attribute)) {
- values.add(row.getValue(i));
- }
- }
- return values;
- }
-
@Override
public String createSqlString() throws IOException {
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java?rev=1577882&r1=1577881&r2=1577882&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java Sat Mar 15 15:25:59 2014
@@ -26,6 +26,7 @@ import java.util.List;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.ExtendedEnumeration;
import org.apache.cayenne.access.jdbc.ParameterBinding;
+import org.apache.cayenne.access.translator.batch.BatchParameterBinding;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.conn.DataSourceInfo;
@@ -224,6 +225,7 @@ public class CommonsJdbcEventLogger impl
logQuery(queryStr, null, params, -1);
}
+ @Deprecated
private void buildLog(StringBuilder buffer, String prefix, String postfix, List<DbAttribute> attributes,
List<?> parameters, boolean isInserting) {
if (parameters != null && parameters.size() > 0) {
@@ -267,6 +269,31 @@ public class CommonsJdbcEventLogger impl
}
}
+ private void buildLog(StringBuilder buffer, List<BatchParameterBinding> bindings) {
+
+ int len = bindings.size();
+
+ for (int i = 0; i < len; i++) {
+
+ if (i > 0) {
+ buffer.append(", ");
+ }
+
+ BatchParameterBinding b = bindings.get(i);
+ DbAttribute attribute = b.getAttribute();
+
+ buffer.append(i + 1);
+
+ if (attribute != null) {
+ buffer.append("->");
+ buffer.append(attribute.getName());
+ }
+
+ buffer.append(":");
+ sqlLiteralForObject(buffer, b.getValue());
+ }
+ }
+
private boolean isInserting(String query) {
if (query == null || query.length() == 0)
return false;
@@ -294,6 +321,7 @@ public class CommonsJdbcEventLogger impl
}
}
+ @Deprecated
@Override
public void logQueryParameters(String label, List<DbAttribute> attrs, List<Object> parameters, boolean isInserting) {
String prefix = "[" + label + ": ";
@@ -305,13 +333,27 @@ public class CommonsJdbcEventLogger impl
}
@Override
+ public void logQueryParameters(String label, List<BatchParameterBinding> bindings) {
+
+ if (isLoggable() && bindings.size() > 0) {
+ StringBuilder buffer = new StringBuilder();
+
+ buffer.append("[").append(label).append(": ");
+ buildLog(buffer, bindings);
+ buffer.append("]");
+
+ logger.info(buffer.toString());
+ }
+ }
+
+ @Override
public void logSelectCount(int count, long time) {
logSelectCount(count, time, null);
}
@Override
public void logSelectCount(int count, long time, String sql) {
-
+
if (isLoggable()) {
StringBuilder buf = new StringBuilder();
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/JdbcEventLogger.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/JdbcEventLogger.java?rev=1577882&r1=1577881&r2=1577882&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/JdbcEventLogger.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/JdbcEventLogger.java Sat Mar 15 15:25:59 2014
@@ -20,6 +20,7 @@ package org.apache.cayenne.log;
import java.util.List;
+import org.apache.cayenne.access.translator.batch.BatchParameterBinding;
import org.apache.cayenne.conn.DataSourceInfo;
import org.apache.cayenne.map.DbAttribute;
@@ -57,24 +58,32 @@ public interface JdbcEventLogger {
void logQuery(String sql, List<DbAttribute> attrs, List<?> params, long time);
- void logQueryParameters(
- String label,
- List<DbAttribute> attrs,
- List<Object> parameters,
- boolean isInserting);
+ /**
+ * @since 3.2
+ */
+ void logQueryParameters(String label, List<BatchParameterBinding> bindings);
+
+ /**
+ * @deprecated since 3.2 in favor of
+ * {@link #logQueryParameters(String, List)}
+ */
+ @Deprecated
+ void logQueryParameters(String label, List<DbAttribute> attrs, List<Object> parameters, boolean isInserting);
void logSelectCount(int count, long time);
-
+
/**
*
* @param count
- * @param time (milliseconds) time query took to run
- * @param sql SQL that was executed, printed when time exceeds timeThreshold
+ * @param time
+ * (milliseconds) time query took to run
+ * @param sql
+ * SQL that was executed, printed when time exceeds timeThreshold
*
* @since 3.2
*/
void logSelectCount(int count, long time, String sql);
-
+
void logUpdateCount(int count);
void logBeginTransaction(String transactionLabel);
@@ -86,7 +95,8 @@ public interface JdbcEventLogger {
void logQueryError(Throwable th);
/**
- * Returns true if current thread default log level is high enough to generate output.
+ * Returns true if current thread default log level is high enough to
+ * generate output.
*/
boolean isLoggable();
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/NoopJdbcEventLogger.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/NoopJdbcEventLogger.java?rev=1577882&r1=1577881&r2=1577882&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/NoopJdbcEventLogger.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/log/NoopJdbcEventLogger.java Sat Mar 15 15:25:59 2014
@@ -20,6 +20,7 @@ package org.apache.cayenne.log;
import java.util.List;
+import org.apache.cayenne.access.translator.batch.BatchParameterBinding;
import org.apache.cayenne.conn.DataSourceInfo;
import org.apache.cayenne.map.DbAttribute;
@@ -65,12 +66,18 @@ public class NoopJdbcEventLogger impleme
public void logQuery(String sql, List<DbAttribute> attrs, List<?> params, long time) {
}
+ @Override
+ @Deprecated
public void logQueryParameters(
String label,
List<DbAttribute> attrs,
List<Object> parameters,
boolean isInserting) {
}
+
+ @Override
+ public void logQueryParameters(String label, List<BatchParameterBinding> bindings) {
+ }
public void logSelectCount(int count, long time) {
}