You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2017/02/16 03:34:43 UTC
groovy git commit: GROOVY-8082: Groovy sql.rows returns
org.postgresql.util.PSQLException: No hstore extension installed (closes
#495)
Repository: groovy
Updated Branches:
refs/heads/master 9c576f5d5 -> 93f703f53
GROOVY-8082: Groovy sql.rows returns org.postgresql.util.PSQLException: No hstore extension installed (closes #495)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/93f703f5
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/93f703f5
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/93f703f5
Branch: refs/heads/master
Commit: 93f703f53b01a0b0205d8efa364c3efb97758d31
Parents: 9c576f5
Author: paulk <pa...@asert.com.au>
Authored: Fri Feb 10 16:46:33 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Thu Feb 16 13:33:34 2017 +1000
----------------------------------------------------------------------
.../groovy-sql/src/main/java/groovy/sql/Sql.java | 16 +++++++++++++++-
.../test/groovy/groovy/sql/SqlCompleteTest.groovy | 17 +++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/93f703f5/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
index b115ed8..a896109 100644
--- a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
+++ b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
@@ -27,6 +27,7 @@ import java.security.PrivilegedExceptionAction;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -39,6 +40,7 @@ import java.util.regex.Pattern;
import javax.sql.DataSource;
+import groovy.lang.MissingPropertyException;
import groovy.lang.Tuple;
import org.codehaus.groovy.runtime.InvokerHelper;
@@ -4106,6 +4108,14 @@ public class Sql {
*/
protected void setParameters(List<Object> params, PreparedStatement statement) throws SQLException {
int i = 1;
+ ParameterMetaData metaData = statement.getParameterMetaData();
+ if (metaData.getParameterCount() == 0 && params.size() == 1 && params.get(0) instanceof Map) {
+ Map paramsMap = (Map) params.get(0);
+ if (paramsMap.isEmpty()) return;
+ }
+ if (metaData.getParameterCount() != params.size()) {
+ throw new IllegalArgumentException("Found " + metaData.getParameterCount() + " parameter placeholders but supplied with " + params.size() + " parameters");
+ }
for (Object value : params) {
setObject(statement, i++, value);
}
@@ -4444,7 +4454,11 @@ public class Sql {
String prop = (String) tuple.get(1);
if (index < 0 || index >= params.size())
throw new IllegalArgumentException("Invalid index " + index + " should be in range 1.." + params.size());
- updatedParams.add(prop.equals("<this>") ? params.get(index) : InvokerHelper.getProperty(params.get(index), prop));
+ try {
+ updatedParams.add(prop.equals("<this>") ? params.get(index) : InvokerHelper.getProperty(params.get(index), prop));
+ } catch(MissingPropertyException mpe) {
+ throw new IllegalArgumentException("Property '" + prop + "' not found for parameter " + index);
+ }
}
return updatedParams;
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/93f703f5/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlCompleteTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlCompleteTest.groovy b/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlCompleteTest.groovy
index b1c1176..7ee8705 100644
--- a/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlCompleteTest.groovy
+++ b/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlCompleteTest.groovy
@@ -141,6 +141,23 @@ class SqlCompleteTest extends SqlHelperTestCase {
assert results == ["James": "Strachan", "Sam": "Pullara"]
}
+ void testRowsWithEmptyMapParams() {
+ def results = sql.rows("select * from PERSON where firstname like '%am%' and lastname like '%a%'", [:])
+ assert results.collectEntries{ [it.firstname, it.lastname] } == ["James": "Strachan", "Sam": "Pullara"]
+ }
+
+ void testRowsWithIncorrectNumberOfParams() {
+ shouldFail(IllegalArgumentException) {
+ sql.rows("select * from PERSON where firstname like ? and lastname like ?", ['foo', 'bar', 'baz'])
+ }
+ }
+
+ void testRowsWithIncorrectParam() {
+ shouldFail(IllegalArgumentException) {
+ sql.rows("select * from PERSON where firstname like :x", ['foo'])
+ }
+ }
+
void testEachRowWithStringAndClosure() {
def results = [:]
sql.eachRow("select * from PERSON", personMetaClosure) {