EMMA Coverage Report (generated Sat Nov 03 21:53:04 GMT 2007)
[all classes][sf.qof.util]

COVERAGE SUMMARY FOR SOURCE FILE [InClauseParameterReplacer.java]

nameclass, %method, %block, %line, %
InClauseParameterReplacer.java100% (1/1)50%  (1/2)98%  (118/121)97%  (28/29)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class InClauseParameterReplacer100% (1/1)50%  (1/2)98%  (118/121)97%  (28/29)
InClauseParameterReplacer (): void 0%   (0/1)0%   (0/3)0%   (0/1)
replace (String, int, int): String 100% (1/1)100% (118/118)100% (28/28)

1/*
2 * Copyright 2007 brunella ltd
3 *
4 * Licensed under the LGPL Version 3 (the "License");
5 * you may not use this file except in compliance with the License.
6 *
7 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
8 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
9 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
10 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
11 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
12 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
13 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
14 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
15 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
16 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
17 * THE POSSIBILITY OF SUCH DAMAGE.
18 */
19package sf.qof.util;
20 
21/**
22 * Helper class with utility method to replace in-clause parameters.
23 */
24public class InClauseParameterReplacer {
25 
26  /**
27   * Returns a SQL statement that replaces the <code>index</code>-th 
28   * parameter '?' with a number <code>numArgs</code> of '?'.
29   * 
30   * @param sql     the SQL statement
31   * @param index   the index of the parameter to replace
32   * @param numArgs number of parameters required
33   * @return        new SQL statement with additional parameters
34   */
35  public static String replace(String sql, int index, int numArgs) {
36    StringBuilder sb = new StringBuilder(sql.length() + (numArgs - 1) * 2);
37    int currentIndex = 0;
38    boolean replaced = false;
39    int i = 0;
40    while (i < sql.length()) {
41      char c = sql.charAt(i);
42      sb.append(c);
43      if (!replaced) {
44        if (c == '/' && i + 1 < sql.length() && sql.charAt(i + 1) == '*') {
45          // skip until end of comment
46          i += 2;
47          sb.append('*');
48          while (i < sql.length()) {
49            c = sql.charAt(i);
50            sb.append(c);
51            if (c == '*' && i + 1 < sql.length() && sql.charAt(i + 1) == '/') {
52              sb.append('/');
53              i++;
54              break;
55            }
56            i++;
57          }
58        }
59        if (c == '?') {
60          currentIndex++;
61          if (index == currentIndex) {
62            for (int j = 0; j < numArgs - 1; j++) {
63              sb.append(',').append('?');
64            }
65            replaced = true;
66          }
67        }
68      }
69      i++;
70    }
71    return sb.toString();
72  }
73 
74}

[all classes][sf.qof.util]
EMMA 2.0.5312 (C) Vladimir Roubtsov