1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Tue Dec 24 14:23:22 2013 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java Tue Dec 24 14:36:14 2013 +0100
1.3 @@ -74,8 +74,8 @@
1.4 private void buildPattern() {
1.5 StringBuilder patternString = new StringBuilder();
1.6
1.7 - patternString.append(Pattern.quote(namePrefix));
1.8 - patternString.append("(");
1.9 + patternString.append(namePrefix);
1.10 + patternString.append("(?<paramName>");
1.11 for (int i = 0; i < parameters.size(); i++) {
1.12 patternString.append(Pattern.quote(parameters.get(i).getName()));
1.13 if (i < parameters.size() - 1) {
1.14 @@ -83,7 +83,7 @@
1.15 }
1.16 }
1.17 patternString.append(")");
1.18 - patternString.append(Pattern.quote(nameSuffix));
1.19 + patternString.append(nameSuffix);
1.20
1.21 pattern = Pattern.compile(patternString.toString());
1.22 }
1.23 @@ -94,7 +94,7 @@
1.24
1.25 int lastPosition = 0;
1.26 while (m.find(lastPosition)) {
1.27 - String name = m.group(1);
1.28 + String name = m.group("paramName");
1.29
1.30 updatedQuery.append(originalQuery.substring(lastPosition, m.start()));
1.31 updatedQuery.append("?");
1.32 @@ -107,18 +107,25 @@
1.33
1.34 for (NamedParameter definedParameter : parameters) {
1.35 if (findByName(parametersUsed, definedParameter.getName()) == null) {
1.36 - throw new SQLException("Parameter „" + definedParameter.getName() + "“ is defined but not used in the query: „" + originalQuery + "“");
1.37 + /**
1.38 + * User can have predefined set of parameters and use them with different SQL
1.39 + * queries that use only subset of these parameters → just warning, not exception.
1.40 + */
1.41 + log.log(Level.WARNING, "Parameter „{0}“ is defined but not used in the query: „{1}“", new Object[]{definedParameter.getName(), originalQuery});
1.42 }
1.43 }
1.44 }
1.45
1.46 private void logPossiblyMissingParameters() {
1.47 - Pattern p = Pattern.compile(Pattern.quote(namePrefix) + ".*?" + Pattern.quote(nameSuffix));
1.48 + Pattern p = Pattern.compile(namePrefix + "(?<paramName>.*?)" + nameSuffix);
1.49 Matcher m = p.matcher(updatedQuery);
1.50 int lastPosition = 0;
1.51 while (m.find(lastPosition)) {
1.52 -
1.53 - log.log(Level.WARNING, "Possibly missing parameter: {0}", m.group());
1.54 + /**
1.55 + * We have not parsed and understood the SQL query; the parameter-like looking string
1.56 + * could be inside a literal part of the query → just warning, not exception.
1.57 + */
1.58 + log.log(Level.WARNING, "Possibly missing parameter „{0}“ in the query: „{1}“", new Object[]{m.group("paramName"), getQuery()});
1.59 lastPosition = m.end();
1.60 }
1.61 }