java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java
branchv_0
changeset 54 53020d0bd2e4
parent 51 6730214fab41
child 61 deba1f6600f8
--- a/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java	Tue Dec 24 14:23:22 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java	Tue Dec 24 14:36:14 2013 +0100
@@ -74,8 +74,8 @@
 	private void buildPattern() {
 		StringBuilder patternString = new StringBuilder();
 
-		patternString.append(Pattern.quote(namePrefix));
-		patternString.append("(");
+		patternString.append(namePrefix);
+		patternString.append("(?<paramName>");
 		for (int i = 0; i < parameters.size(); i++) {
 			patternString.append(Pattern.quote(parameters.get(i).getName()));
 			if (i < parameters.size() - 1) {
@@ -83,7 +83,7 @@
 			}
 		}
 		patternString.append(")");
-		patternString.append(Pattern.quote(nameSuffix));
+		patternString.append(nameSuffix);
 
 		pattern = Pattern.compile(patternString.toString());
 	}
@@ -94,7 +94,7 @@
 
 		int lastPosition = 0;
 		while (m.find(lastPosition)) {
-			String name = m.group(1);
+			String name = m.group("paramName");
 
 			updatedQuery.append(originalQuery.substring(lastPosition, m.start()));
 			updatedQuery.append("?");
@@ -107,18 +107,25 @@
 
 		for (NamedParameter definedParameter : parameters) {
 			if (findByName(parametersUsed, definedParameter.getName()) == null) {
-				throw new SQLException("Parameter „" + definedParameter.getName() + "“ is defined but not used in the query: „" + originalQuery + "“");
+				/**
+				 * User can have predefined set of parameters and use them with different SQL
+				 * queries that use only subset of these parameters → just warning, not exception.
+				 */
+				log.log(Level.WARNING, "Parameter „{0}“ is defined but not used in the query: „{1}“", new Object[]{definedParameter.getName(), originalQuery});
 			}
 		}
 	}
 
 	private void logPossiblyMissingParameters() {
-		Pattern p = Pattern.compile(Pattern.quote(namePrefix) + ".*?" + Pattern.quote(nameSuffix));
+		Pattern p = Pattern.compile(namePrefix + "(?<paramName>.*?)" + nameSuffix);
 		Matcher m = p.matcher(updatedQuery);
 		int lastPosition = 0;
 		while (m.find(lastPosition)) {
-
-			log.log(Level.WARNING, "Possibly missing parameter: {0}", m.group());
+			/**
+			 * We have not parsed and understood the SQL query; the parameter-like looking string
+			 * could be inside a literal part of the query → just warning, not exception.
+			 */
+			log.log(Level.WARNING, "Possibly missing parameter „{0}“ in the query: „{1}“", new Object[]{m.group("paramName"), getQuery()});
 			lastPosition = m.end();
 		}
 	}