// Path: src/main/java/org/mentabean/jdbc/QueryBuilder.java
// public class Query {
// 
// 	private Query() {}
// 		
// 	/**
// 	 * Returns a <code>PreparedStatement</code> setting all given parameters in order. 
// 	 * 
// 	 * @param params
// 	 * @return A <code>PreparedStatement</code> using this session connection
// 	 * @see #getSQL()
// 	 * @see SQLUtils#prepare(java.sql.Connection, String, Object...)
// 	 */
// 	private PreparedStatement prepare(Object... params) {
// 
// 		try {
// 
// 			PreparedStatement ppst = SQLUtils.prepare(session.getConnection(), getSQL(), params);
// 				
// 			if (AnsiSQLBeanSession.DEBUG_NATIVE) {
// 				System.out.println("CUSTOM QUERY (NATIVE): "+ppst);
// 			}
// 				
// 			return ppst;
// 				
// 		} catch (SQLException e) {
// 
// 			throw new BeanException("Error preparing statement", e);
// 		}
// 	}
// 		
// 	/**
// 	 * Prepares a statement with paramValues to execute the query manually.
// 	 * @return A <code>PreparedStatement</code> using this session connection
// 	 */
// 	public PreparedStatement prepare() {
// 
// 		return prepare(paramValues.toArray());
// 	}
// 		
// 	/**
// 	 * Executes the query returning a <code>List</code> of beans declared in <b>FROM</b> clause.
// 	 * 
// 	 * @return A list containing all beans retrieved by <code>ResultSet</code>
// 	 * @see Alias#populateAll(ResultSet, Object)
// 	 */
// 	public <T> List<T> executeQuery() {
// 			
// 		PreparedStatement ppst = null;
// 			
// 		try {
// 			ppst = prepare();
// 				
// 			ResultSet rs = ppst.executeQuery();
// 				
// 			List<T> list = new ArrayList<T>();
// 			T bean;
// 				
// 			while (rs.next()) {
// 					
// 				bean = (T) aliasFrom.config.getBeanClass().newInstance();
// 				aliasFrom.populateAll(rs, bean);
// 					
// 				for (Sentence s : sentences.values()) {
// 					session.injectValue(bean, s.getProperty(),
// 							s.getValue(rs), s.getReturnType().getTypeClass());
// 				}
// 					
// 				list.add(bean);
// 			}
// 				
// 			return list;
// 				
// 		} catch (Exception e) {
// 				
// 			throw new BeanException("Unable to execute query from QueryBuilder\n"+
// 					e.getMessage(), e);
// 		}finally {
// 				
// 			finish();
// 				
// 			SQLUtils.close(ppst);
// 		}
// 	}
// 		
// 	/**
// 	 * Executes the query returning a single value according returnType of sentence in query.
// 	 * @return The value returned by query
// 	 */
// 	public <T> T executeSentence() {
// 
// 		if (sentences.values().size() != 1)
// 			throw new BeanException("This query must have exactly one sentence to execute");
// 			
// 		PreparedStatement ppst = null;
// 
// 		try {
// 			ppst = prepare();
// 
// 			ResultSet rs = ppst.executeQuery();
// 
// 			if (rs.next()) {
// 
// 				if (!rs.isLast()) {
// 					throw new BeanException("The query returns more than one result");
// 				}
// 				Sentence s = sentences.values().iterator().next();
// 				return (T) s.getValue(rs);
// 
// 			}
// 
// 			return null;
// 
// 		} catch (Exception e) {
// 
// 			throw new BeanException("Unable to execute sentence from QueryBuilder\n"+
// 					e.getMessage(), e);
// 		}finally {
// 				
// 			finish();
// 
// 			SQLUtils.close(ppst);
// 		}
// 	}
// 		
// 	public <T> T getValueFromResultSet(ResultSet rs, String name) throws SQLException {
// 			
// 		Sentence s = sentences.get(name);
// 			
// 		if (s == null)
// 			throw new BeanException("The sentence name '"+name+"' is not included in query");
// 			
// 		return (T) s.getValue(rs);
// 	}
// 		
// 	/**
// 	 * Returns the SQL generated by QueryBuilder
// 	 * @return The String SQL
// 	 */
// 	public String getSQL() {
// 
// 		if (parenthesis != 0) {
// 			throw new BeanException("Invalid parenthesis");
// 		}
// 			
// 		applyRegex();
// 			
// 		if (AnsiSQLBeanSession.DEBUG) {
// 			System.out.println("CUSTOM QUERY: "+sb.toString());
// 		}
// 
// 		return sb.toString();
// 	}
// 		
// 	public List<Object> getParamValues() {
// 		return paramValues;
// 	}
// 	
// }


import org.mentabean.jdbc.QueryBuilder.Query;
package org.mentabean.sql.param;


public class ParamSubQuery implements Param {

	private Query query;
	
// Path: src/main/java/org/mentabean/jdbc/QueryBuilder.java
// public class Query {
// 
// 	private Query() {}
// 		
// 	/**
// 	 * Returns a <code>PreparedStatement</code> setting all given parameters in order. 
// 	 * 
// 	 * @param params
// 	 * @return A <code>PreparedStatement</code> using this session connection
// 	 * @see #getSQL()
// 	 * @see SQLUtils#prepare(java.sql.Connection, String, Object...)
// 	 */
// 	private PreparedStatement prepare(Object... params) {
// 
// 		try {
// 
// 			PreparedStatement ppst = SQLUtils.prepare(session.getConnection(), getSQL(), params);
// 				
// 			if (AnsiSQLBeanSession.DEBUG_NATIVE) {
// 				System.out.println("CUSTOM QUERY (NATIVE): "+ppst);
// 			}
// 				
// 			return ppst;
// 				
// 		} catch (SQLException e) {
// 
// 			throw new BeanException("Error preparing statement", e);
// 		}
// 	}
// 		
// 	/**
// 	 * Prepares a statement with paramValues to execute the query manually.
// 	 * @return A <code>PreparedStatement</code> using this session connection
// 	 */
// 	public PreparedStatement prepare() {
// 
// 		return prepare(paramValues.toArray());
// 	}
// 		
// 	/**
// 	 * Executes the query returning a <code>List</code> of beans declared in <b>FROM</b> clause.
// 	 * 
// 	 * @return A list containing all beans retrieved by <code>ResultSet</code>
// 	 * @see Alias#populateAll(ResultSet, Object)
// 	 */
// 	public <T> List<T> executeQuery() {
// 			
// 		PreparedStatement ppst = null;
// 			
// 		try {
// 			ppst = prepare();
// 				
// 			ResultSet rs = ppst.executeQuery();
// 				
// 			List<T> list = new ArrayList<T>();
// 			T bean;
// 				
// 			while (rs.next()) {
// 					
// 				bean = (T) aliasFrom.config.getBeanClass().newInstance();
// 				aliasFrom.populateAll(rs, bean);
// 					
// 				for (Sentence s : sentences.values()) {
// 					session.injectValue(bean, s.getProperty(),
// 							s.getValue(rs), s.getReturnType().getTypeClass());
// 				}
// 					
// 				list.add(bean);
// 			}
// 				
// 			return list;
// 				
// 		} catch (Exception e) {
// 				
// 			throw new BeanException("Unable to execute query from QueryBuilder\n"+
// 					e.getMessage(), e);
// 		}finally {
// 				
// 			finish();
// 				
// 			SQLUtils.close(ppst);
// 		}
// 	}
// 		
// 	/**
// 	 * Executes the query returning a single value according returnType of sentence in query.
// 	 * @return The value returned by query
// 	 */
// 	public <T> T executeSentence() {
// 
// 		if (sentences.values().size() != 1)
// 			throw new BeanException("This query must have exactly one sentence to execute");
// 			
// 		PreparedStatement ppst = null;
// 
// 		try {
// 			ppst = prepare();
// 
// 			ResultSet rs = ppst.executeQuery();
// 
// 			if (rs.next()) {
// 
// 				if (!rs.isLast()) {
// 					throw new BeanException("The query returns more than one result");
// 				}
// 				Sentence s = sentences.values().iterator().next();
// 				return (T) s.getValue(rs);
// 
// 			}
// 
// 			return null;
// 
// 		} catch (Exception e) {
// 
// 			throw new BeanException("Unable to execute sentence from QueryBuilder\n"+
// 					e.getMessage(), e);
// 		}finally {
// 				
// 			finish();
// 
// 			SQLUtils.close(ppst);
// 		}
// 	}
// 		
// 	public <T> T getValueFromResultSet(ResultSet rs, String name) throws SQLException {
// 			
// 		Sentence s = sentences.get(name);
// 			
// 		if (s == null)
// 			throw new BeanException("The sentence name '"+name+"' is not included in query");
// 			
// 		return (T) s.getValue(rs);
// 	}
// 		
// 	/**
// 	 * Returns the SQL generated by QueryBuilder
// 	 * @return The String SQL
// 	 */
// 	public String getSQL() {
// 
// 		if (parenthesis != 0) {
// 			throw new BeanException("Invalid parenthesis");
// 		}
// 			
// 		applyRegex();
// 			
// 		if (AnsiSQLBeanSession.DEBUG) {
// 			System.out.println("CUSTOM QUERY: "+sb.toString());
// 		}
// 
// 		return sb.toString();
// 	}
// 		
// 	public List<Object> getParamValues() {
// 		return paramValues;
// 	}
// 	
// }


// Path: src/main/java/org/mentabean/sql/param/ParamSubQuery.java
import org.mentabean.jdbc.QueryBuilder.Query;

package org.mentabean.sql.param;


public class ParamSubQuery implements Param {

	private Query query;
	
	public ParamSubQuery(Query query) {