// Path: neo4j-jdbc/src/main/java/org/neo4j/jdbc/utils/ExceptionBuilder.java
// public class ExceptionBuilder {
// 
// 	private ExceptionBuilder() {}
// 
// 	/**
// 	 * An <code>UnsupportedOperationException</code> exception builder that  retrueve it's caller to make
// 	 * a not yet implemented exception with method and class name.
// 	 *
// 	 * @return an UnsupportedOperationException
// 	 */
// 	public static UnsupportedOperationException buildUnsupportedOperationException() {
// 		StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
// 		if (stackTraceElements.length > 2) {
// 			StackTraceElement caller = stackTraceElements[2];
// 
// 			StringBuilder sb = new StringBuilder().append("Method ").append(caller.getMethodName()).append(" in class ").append(caller.getClassName())
// 					.append(" is not yet implemented.");
// 
// 			return new UnsupportedOperationException(sb.toString());
// 		} else {
// 			return new UnsupportedOperationException("Not yet implemented.");
// 		}
// 	}
// }
// 
// Path: neo4j-jdbc/src/main/java/org/neo4j/jdbc/utils/PreparedStatementBuilder.java
// public class PreparedStatementBuilder {
// 
// 	private PreparedStatementBuilder() {}
// 
// 	/**
// 	 * This method return a String that is the original raw string with all valid placeholders replaced with neo4j curly brackets notation for parameters.
// 	 * <br>
// 	 * i.e. MATCH n RETURN n WHERE n.name = ? is transformed in MATCH n RETURN n WHERE n.name = {1}
// 	 *
// 	 * @param raw The string to be translated.
// 	 * @return The string with the placeholders replaced.
// 	 */
// 	public static String replacePlaceholders(String raw) {
// 		int index = 1;
// 		String digested = raw;
// 
// 		String regex = "\\?(?=[^\"]*(?:\"[^\"]*\"[^\"]*)*$)";
// 		Matcher matcher = Pattern.compile(regex).matcher(digested);
// 
// 		while (matcher.find()) {
// 			digested = digested.replaceFirst(regex, "{" + index + "}");
// 			index++;
// 		}
// 
// 		return digested;
// 	}
// 
// 	/**
// 	 * Given a string (statement) it counts all valid placeholders
// 	 *
// 	 * @param raw The string of the statement
// 	 * @return The number of all valid placeholders
// 	 */
// 	public static int namedParameterCount(String raw) {
// 		int max = 0;
// 		String regex = "\\{\\s*`?\\s*(\\d+)\\s*`?\\s*\\}(?=[^\"]*(\"[^\"]*\"[^\"]*)*$)";
// 		Matcher matcher = Pattern.compile(regex).matcher(raw);
// 		while (matcher.find()) {
// 			max = Math.max(Integer.parseInt(matcher.group(1)),max);
// 		}
// 		return max;
// 	}
// 
// }


import static java.sql.Types.*;
import org.neo4j.jdbc.utils.ExceptionBuilder;
import org.neo4j.jdbc.utils.PreparedStatementBuilder;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.*;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.*;
			throw new SQLException("Statement already closed");
		}
	}

	/**
	 * Check if the given parameter index is not out of bound.
	 * If its is we throw an exception.
	 *
	 * @param parameterIndex The index parameter to check
	 */
	private void checkParamsNumber(int parameterIndex) throws SQLException {
		if (parameterIndex > this.parametersNumber) {
			throw new SQLException("ParameterIndex does not correspond to a parameter marker in the SQL statement");
		}
	}

	/**
	 * Check if the given object is a valid type that Neo4J can handle.
	 * If it's not we throw an exception.
	 *
	 * @param obj The object to check
	 */
	private void checkValidObject(Object obj) throws SQLException {
		// TODO: this may belong into org.neo4j.driver.v1.Values
		if (!(obj == null ||
				obj instanceof Boolean ||
				obj instanceof String ||
				obj instanceof Character ||
				obj instanceof Long ||
				obj instanceof Short ||
// Path: neo4j-jdbc/src/main/java/org/neo4j/jdbc/utils/ExceptionBuilder.java
// public class ExceptionBuilder {
// 
// 	private ExceptionBuilder() {}
// 
// 	/**
// 	 * An <code>UnsupportedOperationException</code> exception builder that  retrueve it's caller to make
// 	 * a not yet implemented exception with method and class name.
// 	 *
// 	 * @return an UnsupportedOperationException
// 	 */
// 	public static UnsupportedOperationException buildUnsupportedOperationException() {
// 		StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
// 		if (stackTraceElements.length > 2) {
// 			StackTraceElement caller = stackTraceElements[2];
// 
// 			StringBuilder sb = new StringBuilder().append("Method ").append(caller.getMethodName()).append(" in class ").append(caller.getClassName())
// 					.append(" is not yet implemented.");
// 
// 			return new UnsupportedOperationException(sb.toString());
// 		} else {
// 			return new UnsupportedOperationException("Not yet implemented.");
// 		}
// 	}
// }
// 
// Path: neo4j-jdbc/src/main/java/org/neo4j/jdbc/utils/PreparedStatementBuilder.java
// public class PreparedStatementBuilder {
// 
// 	private PreparedStatementBuilder() {}
// 
// 	/**
// 	 * This method return a String that is the original raw string with all valid placeholders replaced with neo4j curly brackets notation for parameters.
// 	 * <br>
// 	 * i.e. MATCH n RETURN n WHERE n.name = ? is transformed in MATCH n RETURN n WHERE n.name = {1}
// 	 *
// 	 * @param raw The string to be translated.
// 	 * @return The string with the placeholders replaced.
// 	 */
// 	public static String replacePlaceholders(String raw) {
// 		int index = 1;
// 		String digested = raw;
// 
// 		String regex = "\\?(?=[^\"]*(?:\"[^\"]*\"[^\"]*)*$)";
// 		Matcher matcher = Pattern.compile(regex).matcher(digested);
// 
// 		while (matcher.find()) {
// 			digested = digested.replaceFirst(regex, "{" + index + "}");
// 			index++;
// 		}
// 
// 		return digested;
// 	}
// 
// 	/**
// 	 * Given a string (statement) it counts all valid placeholders
// 	 *
// 	 * @param raw The string of the statement
// 	 * @return The number of all valid placeholders
// 	 */
// 	public static int namedParameterCount(String raw) {
// 		int max = 0;
// 		String regex = "\\{\\s*`?\\s*(\\d+)\\s*`?\\s*\\}(?=[^\"]*(\"[^\"]*\"[^\"]*)*$)";
// 		Matcher matcher = Pattern.compile(regex).matcher(raw);
// 		while (matcher.find()) {
// 			max = Math.max(Integer.parseInt(matcher.group(1)),max);
// 		}
// 		return max;
// 	}
// 
// }


// Path: neo4j-jdbc/src/main/java/org/neo4j/jdbc/Neo4jPreparedStatement.java
import static java.sql.Types.*;
import org.neo4j.jdbc.utils.ExceptionBuilder;
import org.neo4j.jdbc.utils.PreparedStatementBuilder;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.*;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.*;

			throw new SQLException("Statement already closed");
		}
	}

	/**
	 * Check if the given parameter index is not out of bound.
	 * If its is we throw an exception.
	 *
	 * @param parameterIndex The index parameter to check
	 */
	private void checkParamsNumber(int parameterIndex) throws SQLException {
		if (parameterIndex > this.parametersNumber) {
			throw new SQLException("ParameterIndex does not correspond to a parameter marker in the SQL statement");
		}
	}

	/**
	 * Check if the given object is a valid type that Neo4J can handle.
	 * If it's not we throw an exception.
	 *
	 * @param obj The object to check
	 */
	private void checkValidObject(Object obj) throws SQLException {
		// TODO: this may belong into org.neo4j.driver.v1.Values
		if (!(obj == null ||
				obj instanceof Boolean ||
				obj instanceof String ||
				obj instanceof Character ||
				obj instanceof Long ||
				obj instanceof Short ||
				obj instanceof Byte ||