Author: sebb
Date: Fri Mar 18 12:57:16 2011
New Revision: 1082897

URL: http://svn.apache.org/viewvc?rev=1082897&view=rev
Log:
Bug 50569 - Jdbc Request Sampler to optionally store result set object data

Modified:
    jakarta/jmeter/trunk/docs/images/screenshots/jdbctest/jdbc-request.png
    
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
    
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java
    
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerResources.properties
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/images/screenshots/jdbctest/jdbc-request.png
    jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/trunk/docs/images/screenshots/jdbctest/jdbc-request.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/jdbctest/jdbc-request.png?rev=1082897&r1=1082896&r2=1082897&view=diff
==============================================================================
Binary files - no diff available.

Modified: 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java?rev=1082897&r1=1082896&r2=1082897&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
 Fri Mar 18 12:57:16 2011
@@ -28,10 +28,12 @@ import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.text.StrBuilder;
@@ -118,6 +120,7 @@ public class JDBCSampler extends Abstrac
     private String queryArguments = ""; // $NON-NLS-1$
     private String queryArgumentsTypes = ""; // $NON-NLS-1$
     private String variableNames = ""; // $NON-NLS-1$
+    private String resultVariable = "";
 
     /**
      *  Cache of PreparedStatements stored in a per-connection basis. Each 
entry of this
@@ -425,17 +428,29 @@ public class JDBCSampler extends Abstrac
                 sb.append('\t');
             }
         }
+        
 
-        JMeterVariables jmvars = null;
+        JMeterVariables jmvars = getThreadContext().getVariables();
         String varnames[] = getVariableNames().split(COMMA);
-        if (varnames.length > 0){
-            jmvars = getThreadContext().getVariables();
+        String resultVariable = getResultVariable().trim();
+        List<Map<String, Object> > results = null;
+        if(resultVariable.length() > 0) {
+            results = new ArrayList<Map<String,Object> >();
+            jmvars.putObject(resultVariable, results);
         }
         int j = 0;
         while (rs.next()) {
+               Map<String, Object> row = null;
             j++;
             for (int i = 1; i <= numColumns; i++) {
                 Object o = rs.getObject(i);
+                if(results != null) {
+                       if(row == null) {
+                               row = new HashMap<String, Object>(numColumns);
+                               results.add(row);
+                       }
+                       row.put(meta.getColumnName(i), o);
+                }
                 if (o instanceof byte[]) {
                     o = new String((byte[]) o, ENCODING);
                 }
@@ -445,7 +460,7 @@ public class JDBCSampler extends Abstrac
                 } else {
                     sb.append('\t');
                 }
-                if (jmvars != null && i <= varnames.length) {
+                if (i <= varnames.length) { // i starts at 1
                     String name = varnames[i - 1].trim();
                     if (name.length()>0){ // Save the value in the variable if 
present
                         jmvars.put(name+UNDERSCORE+j, o == null ? null : 
o.toString());
@@ -587,4 +602,19 @@ public class JDBCSampler extends Abstrac
     public void setVariableNames(String variableNames) {
         this.variableNames = variableNames;
     }
+
+    /**
+     * @return the resultVariable
+     */
+       public String getResultVariable() {
+               return resultVariable ;
+       }
+
+    /**
+     * @param resultVariable the variable name in which results will be stored
+     */
+       public void setResultVariable(String resultVariable) {
+               this.resultVariable = resultVariable;
+       }
+    
 }

Modified: 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java?rev=1082897&r1=1082896&r2=1082897&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java
 Fri Mar 18 12:57:16 2011
@@ -45,6 +45,7 @@ public class JDBCSamplerBeanInfo extends
                 "queryArguments", // $NON-NLS-1$
                 "queryArgumentsTypes", // $NON-NLS-1$
                 "variableNames", // $NON-NLS-1$
+                "resultVariable", // $NON-NLS-1$
                 });
 
         PropertyDescriptor p = property("dataSource"); // $NON-NLS-1$
@@ -63,6 +64,10 @@ public class JDBCSamplerBeanInfo extends
         p.setValue(NOT_UNDEFINED, Boolean.TRUE);
         p.setValue(DEFAULT, "");
 
+        p = property("resultVariable"); // $NON-NLS-1$
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(DEFAULT, "");
+
         p = property("queryType"); // $NON-NLS-1$
         p.setValue(NOT_UNDEFINED, Boolean.TRUE);
         p.setValue(DEFAULT, JDBCSampler.SELECT);

Modified: 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerResources.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerResources.properties?rev=1082897&r1=1082896&r2=1082897&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerResources.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerResources.properties
 Fri Mar 18 12:57:16 2011
@@ -28,4 +28,6 @@ queryArgumentsTypes.displayName=Paramete
 queryArgumentsTypes.shortDescription=JDBC Type names from java.sql.Types. 
VARCHAR, INTEGER, etc. (comma separated)
 variableNames.displayName=Variable names
 variableNames.shortDescription=Output variable names for each column  (comma 
separated)
+resultVariable.displayName=Result variable name
+resultVariable.shortDescription=Name of the JMeter variable that stores the 
result set objects in a list of maps for looking up results by column name.
 

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1082897&r1=1082896&r2=1082897&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Fri Mar 18 12:57:16 2011
@@ -159,6 +159,7 @@ Fixed RMI startup to provide location of
 <li>JMS Subscriber - Add dynamic destination</li>
 <li>Bug 50666 - JMSSubscriber: support for durable subscriptions</li>
 <li>Bug 50937 - TCP Sampler does not provide for / honor connect timeout</li>
+<li>Bug 50569 - Jdbc Request Sampler to optionally store result set object 
data</li>
 </ul>
 
 <h3>Controllers</h3>

Modified: 
jakarta/jmeter/trunk/xdocs/images/screenshots/jdbctest/jdbc-request.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/jdbctest/jdbc-request.png?rev=1082897&r1=1082896&r2=1082897&view=diff
==============================================================================
Binary files - no diff available.

Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1082897&r1=1082896&r2=1082897&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Fri Mar 18 
12:57:16 2011
@@ -346,7 +346,7 @@ The HttpClient version of the sampler su
 
 </component>
 
-<component name="JDBC Request" index="&sect-num;.1.3"  width="427" 
height="334" screenshot="jdbctest/jdbc-request.png">
+<component name="JDBC Request" index="&sect-num;.1.3"  width="466" 
height="334" screenshot="jdbctest/jdbc-request.png">
 
 <description><p>This sampler lets you send an JDBC Request (an SQL query) to a 
database.</p>
 <p>Before using this you need to set up a
@@ -436,6 +436,11 @@ the additional variables for rows 4, 5 a
         There must be as many types as there are placeholders in the statement.
         </property>
         <property name="Variable Names" required="No">Comma-separated list of 
variable names to hold values returned by Select statements</property>
+        <property name="Result Variable Name" required="No">
+        If specified, this will create an Object variable containing a list of 
row maps.
+        Each map contains the column name as the key and the column data as 
the value. Usage:<br></br>
+        <code>columnValue = vars.getObject("resultObject").get(0).get("Column 
Name");</code>
+        </property>
 </properties>
 
 <links>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to