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="§-num;.1.3" width="427"
height="334" screenshot="jdbctest/jdbc-request.png">
+<component name="JDBC Request" index="§-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]