private void analyzeWhere()
	{
		if(where==null)
			return;
		ArrayList<Expression> exprs=new ArrayList<Expression>();
		decomposer.andBreaker(where, exprs);
		
		System.out.println("***************************************************************************");

		//print the broken expression out
		Iterator<Expression> iter=exprs.iterator();
		while(iter.hasNext())
		{
			Expression expr=iter.next();
			
			System.out.println(decomposer.getValue(expr));

			ArrayList<String> identifiers=new ArrayList<String>();
			getIdentifier(expr, identifiers);
			if(identifiers.size()<=1)
			{
				//related to single table
				String id=identifiers.get(0);

				if(!singleTableSelections.containsKey(id))
				{
					SelectionsTodo st=new SelectionsTodo(id);
					st.addExpression(expr);
					singleTableSelections.put(id, st);
				}
				else
				{
					SelectionsTodo st=singleTableSelections.get(id);
					st.addExpression(expr);
				}

			}
			else
			{
				decomposer.getAttributes(expr, requiredAttributes);
				//related to multiple tables
				String id1=identifiers.get(0);
				String id2=identifiers.get(1);
				
				//add to the idsTobeJoin table
				if(!idsTobeJoin.contains(id1))
				{
					idsTobeJoin.add(id1);
				}
				
				if(!idsTobeJoin.contains(id2))
				{
					idsTobeJoin.add(id2);
				}
				
				MultiId mid=new MultiId(id1,id2);
				if(multiTableJoins.containsKey(mid))
				{
					JoinsTodo jt=multiTableJoins.get(mid);
					jt.addExpression(expr);
				}
				else
				{
					JoinsTodo jt=new JoinsTodo(mid);
					jt.addExpression(expr);
					multiTableJoins.put(mid, jt);
				}
			}
		}


	}