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) {
     }