java/sql-dk/src/info/globalcode/sql/dk/SQLCommandNamed.java
branchv_0
changeset 54 53020d0bd2e4
parent 51 6730214fab41
child 61 deba1f6600f8
     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  	}