+
+ public static final String preprocessQuery(String originalQuery) {
+ originalQuery = originalQuery.replace('`', '"');
+ if (originalQuery.matches("^INSERT INTO [^ ]+ SET .*")) {
+ Pattern p = Pattern.compile("INSERT INTO ([^ ]+) SET (.*)");
+ Matcher m = p.matcher(originalQuery);
+ if (m.matches()) {
+ String replacement = "INSERT INTO " + toIdentifier(m.group(1));
+ String[] parts = m.group(2).split(",");
+ StringJoiner columns = new StringJoiner(", ");
+ StringJoiner values = new StringJoiner(", ");
+ for (int i = 0; i < parts.length; i++) {
+ String[] split = parts[i].split("=", 2);
+ columns.add(toIdentifier(split[0]));
+ values.add(split[1]);
+ }
+ replacement += "(" + columns.toString() + ") VALUES(" + values.toString() + ")";
+ return replacement;
+ }
+ }
+
+ //
+ return originalQuery;
+ }
+
+ private static CharSequence toIdentifier(String ident) {
+ ident = ident.trim();
+ if ( !ident.startsWith("\"")) {
+ ident = "\"" + ident;
+ }
+ if ( !ident.endsWith("\"")) {
+ ident = ident + "\"";
+ }
+ return ident;
+ }
+
+ protected synchronized void returnStatement(PreparedStatement target) throws SQLException {
+ if ( !underUse.remove(target)) {
+ target.close();
+ }
+ }
+
+ public synchronized int getNumberOfLockedStatements() {
+ return underUse.size();
+ }
+
+ public void lockedStatements(PrintWriter writer) {
+ writer.println(underUse.size());
+ for (PreparedStatement ps : underUse) {
+ for (Entry<StatementDescriptor, PreparedStatement> e : statements.entrySet()) {
+ if (e.getValue() == ps) {
+ writer.println("<br/>");
+ writer.println(e.getKey().instance + ":");
+
+ writer.println(e.getKey().query);
+ }
+ }
+ }
+ }