--- a/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Tue Jan 07 21:54:59 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Wed Jan 08 12:44:18 2014 +0100
@@ -17,7 +17,6 @@
*/
package info.globalcode.sql.dk;
-import static info.globalcode.sql.dk.Functions.notNull;
import static info.globalcode.sql.dk.Functions.findByName;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -43,6 +42,7 @@
private List<NamedParameter> parametersUsed = new ArrayList<>();
private StringBuilder updatedQuery;
private Pattern pattern;
+ private SQLCommandNumbered numbered;
public SQLCommandNamed(String query, List<NamedParameter> parameters, String namePrefix, String nameSuffix) {
super(query);
@@ -54,6 +54,15 @@
@Override
public PreparedStatement prepareStatement(Connection c) throws SQLException {
+ return getSQLCommandNumbered().prepareStatement(c);
+ }
+
+ @Override
+ public void parametrize(PreparedStatement ps) throws SQLException {
+ getSQLCommandNumbered().parametrize(ps);
+ }
+
+ private void prepare() throws SQLException {
try {
buildPattern();
placeParametersAndUpdateQuery();
@@ -61,22 +70,25 @@
} catch (PatternSyntaxException e) {
throw new SQLException("Name prefix „" + namePrefix + "“ or suffix „" + nameSuffix + "“ contain a wrong regular expression. " + e.getLocalizedMessage(), e);
}
- return c.prepareStatement(updatedQuery.toString());
}
- @Override
- public void parametrize(PreparedStatement ps) throws SQLException {
- int i = 1;
- for (Parameter p : notNull(parametersUsed)) {
- ps.setObject(i++, p.getValue(), p.getType().getCode());
+ /**
+ * @return SQL command with named parameters converted to SQL command with numbered parameters
+ */
+ public SQLCommandNumbered getSQLCommandNumbered() throws SQLException {
+ if (numbered == null) {
+ prepare();
+ numbered = new SQLCommandNumbered(updatedQuery.toString(), parametersUsed);
}
+
+ return numbered;
}
/**
* Builds a regexp pattern that matches all parameter names (with prefix/suffix) and which has
* one group: parameter name (without prefix/suffix)
*/
- private void buildPattern() {
+ private void buildPattern() throws PatternSyntaxException {
StringBuilder patternString = new StringBuilder();
patternString.append(namePrefix);
@@ -93,7 +105,7 @@
pattern = Pattern.compile(patternString.toString());
}
- private void placeParametersAndUpdateQuery() throws SQLException {
+ private void placeParametersAndUpdateQuery() {
final String originalQuery = getQuery();
Matcher m = pattern.matcher(originalQuery);