// Path: src/src/com/orm/androrm/statement/AndStatement.java
// public class AndStatement extends ComposedStatement{
// 	
// 	/**
// 	 * Use this constructor to initialize a new AND
// 	 * statement. The left {@link Statement} and the
// 	 * right {@link Statement} will be separated by
// 	 * the keyword AND.
// 	 * 
// 	 * @param left
// 	 * @param right
// 	 */
// 	public AndStatement(Statement left, Statement right) {
// 		super(left, right);
// 		
// 		mSeparator = " AND ";
// 	}
// }
// 
// Path: src/src/com/orm/androrm/statement/Statement.java
// public class Statement {
// 	
// 	/**
// 	 * Key of the statement.
// 	 */
// 	protected String mKey;
// 	/**
// 	 * Key of the statement.
// 	 */
// 	protected String mOperator;
// 	/**
// 	 * Value of the statement.
// 	 */
// 	protected String mValue;
// 	
// 	/**
// 	 * Empty constructor.
// 	 */
// 	public Statement() {}
// 	
// 	public Statement(String key, int value) {
// 		mKey = key;
// 		mOperator = "=";
// 		mValue = String.valueOf(value);
// 	}
// 
// 	public Statement(String key, String operator, int value) {
// 		mKey = key;
// 		mOperator = operator;
// 		mValue = String.valueOf(value);
// 	}
// 	
// 	/**
// 	 * This constructor sets the key and value field of this 
// 	 * statement.
// 	 * 
// 	 * @param key Database column.
// 	 * @param value Expected value of this column.
// 	 */
// 	public Statement(String key, String value) {
// 		mKey = key;
// 		mOperator = "=";
// 		mValue = value;
// 	}
// 
// 	public Statement(String key, String operator, String value) {
// 		mKey = key;
// 		mOperator = operator;
// 		mValue = value;
// 	}
// 	
// 	/**
// 	 * Get all keys that are used in this statement.
// 	 * 
// 	 * @return All keys i.e. the affected database columns.
// 	 */
// 	public Set<String> getKeys() {
// 		Set<String> keys = new HashSet<String>();
// 		keys.add(mKey);
// 		
// 		return keys;
// 	}
// 	
// 	public void setKey(String key) {
// 		mKey = key;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return mKey + " " + mOperator + " '" + mValue + "'";
// 	}
// }


import java.util.HashSet;
import java.util.Set;
import com.orm.androrm.statement.AndStatement;
import com.orm.androrm.statement.OrStatement;
import com.orm.androrm.statement.Statement;
import android.database.sqlite.SQLiteDatabase;

/**
 * 	Copyright (c) 2010 Philipp Giese
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package com.orm.androrm;




/**
 * Class representing the WHERE clause of the database. 
 * <br /><br />
 * NOTE THAT THIS CLASS WORKS ACCORDING TO THE RULES DEFINED
 * BY THE query FUNCTION OF {@link SQLiteDatabase}.
 * 
 * @author Philipp Giese
 */
public class Where {
	/**
	 * All constraints that shall be applied.
	 */
	private Statement mStatement;
	/**
	 * Used for quick look up, if the where clause has a certain constraint for
	 * a given key.
	 */
	private Set<String> mKeys;
	
	public Where() {
		mKeys = new HashSet<String>();
	}
	
	/**
	 * Attaches the given {@link Statement} as the right side of the
	 * AND statement.
	 * 
	 * @param stmt {@link Statement} to attach.
	 * @return <code>this</code> for chaining.
	 */
	public Where and(Statement stmt) {
		mKeys.addAll(stmt.getKeys());
		
		if(mStatement == null) {
			mStatement = stmt;
		} else {

// Path: src/src/com/orm/androrm/statement/AndStatement.java
// public class AndStatement extends ComposedStatement{
// 	
// 	/**
// 	 * Use this constructor to initialize a new AND
// 	 * statement. The left {@link Statement} and the
// 	 * right {@link Statement} will be separated by
// 	 * the keyword AND.
// 	 * 
// 	 * @param left
// 	 * @param right
// 	 */
// 	public AndStatement(Statement left, Statement right) {
// 		super(left, right);
// 		
// 		mSeparator = " AND ";
// 	}
// }
// 
// Path: src/src/com/orm/androrm/statement/Statement.java
// public class Statement {
// 	
// 	/**
// 	 * Key of the statement.
// 	 */
// 	protected String mKey;
// 	/**
// 	 * Key of the statement.
// 	 */
// 	protected String mOperator;
// 	/**
// 	 * Value of the statement.
// 	 */
// 	protected String mValue;
// 	
// 	/**
// 	 * Empty constructor.
// 	 */
// 	public Statement() {}
// 	
// 	public Statement(String key, int value) {
// 		mKey = key;
// 		mOperator = "=";
// 		mValue = String.valueOf(value);
// 	}
// 
// 	public Statement(String key, String operator, int value) {
// 		mKey = key;
// 		mOperator = operator;
// 		mValue = String.valueOf(value);
// 	}
// 	
// 	/**
// 	 * This constructor sets the key and value field of this 
// 	 * statement.
// 	 * 
// 	 * @param key Database column.
// 	 * @param value Expected value of this column.
// 	 */
// 	public Statement(String key, String value) {
// 		mKey = key;
// 		mOperator = "=";
// 		mValue = value;
// 	}
// 
// 	public Statement(String key, String operator, String value) {
// 		mKey = key;
// 		mOperator = operator;
// 		mValue = value;
// 	}
// 	
// 	/**
// 	 * Get all keys that are used in this statement.
// 	 * 
// 	 * @return All keys i.e. the affected database columns.
// 	 */
// 	public Set<String> getKeys() {
// 		Set<String> keys = new HashSet<String>();
// 		keys.add(mKey);
// 		
// 		return keys;
// 	}
// 	
// 	public void setKey(String key) {
// 		mKey = key;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return mKey + " " + mOperator + " '" + mValue + "'";
// 	}
// }


// Path: src/src/com/orm/androrm/Where.java
import java.util.HashSet;
import java.util.Set;
import com.orm.androrm.statement.AndStatement;
import com.orm.androrm.statement.OrStatement;
import com.orm.androrm.statement.Statement;
import android.database.sqlite.SQLiteDatabase;

/**
 * 	Copyright (c) 2010 Philipp Giese
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package com.orm.androrm;




/**
 * Class representing the WHERE clause of the database. 
 * <br /><br />
 * NOTE THAT THIS CLASS WORKS ACCORDING TO THE RULES DEFINED
 * BY THE query FUNCTION OF {@link SQLiteDatabase}.
 * 
 * @author Philipp Giese
 */
public class Where {
	/**
	 * All constraints that shall be applied.
	 */
	private Statement mStatement;
	/**
	 * Used for quick look up, if the where clause has a certain constraint for
	 * a given key.
	 */
	private Set<String> mKeys;
	
	public Where() {
		mKeys = new HashSet<String>();
	}
	
	/**
	 * Attaches the given {@link Statement} as the right side of the
	 * AND statement.
	 * 
	 * @param stmt {@link Statement} to attach.
	 * @return <code>this</code> for chaining.
	 */
	public Where and(Statement stmt) {
		mKeys.addAll(stmt.getKeys());
		
		if(mStatement == null) {
			mStatement = stmt;
		} else {

			mStatement = new AndStatement(mStatement, stmt);
