# HG changeset patch # User František Kučera # Date 1389181458 -3600 # Node ID 1336bb9a449950092c69cf9f2d1ba3519162b199 # Parent da1e38386d84096c277000e25c490ac9c386e0ec convert named parameters to numbered diff -r da1e38386d84 -r 1336bb9a4499 java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java --- 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 parametersUsed = new ArrayList<>(); private StringBuilder updatedQuery; private Pattern pattern; + private SQLCommandNumbered numbered; public SQLCommandNamed(String query, List 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); diff -r da1e38386d84 -r 1336bb9a4499 java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNumbered.java --- a/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNumbered.java Tue Jan 07 21:54:59 2014 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNumbered.java Wed Jan 08 12:44:18 2014 +0100 @@ -28,9 +28,9 @@ */ public class SQLCommandNumbered extends SQLCommand { - private List parameters; + private List parameters; - public SQLCommandNumbered(String query, List parameters) { + public SQLCommandNumbered(String query, List parameters) { super(query); this.parameters = parameters; } @@ -44,7 +44,7 @@ } @Override - public List getParameters() { + public List getParameters() { return parameters; } }