コード例 #1
0
  void analyzeWhereExpression(ArrayList<AbstractExpression> whereList) {
    // This next bit of code identifies which tables get classified how
    HashSet<Table> tableSet = new HashSet<Table>();
    for (AbstractExpression expr : whereList) {
      tableSet.clear();
      getTablesForExpression(expr, tableSet);
      if (tableSet.size() == 0) {
        noTableSelectionList.add(expr);
      } else if (tableSet.size() == 1) {
        Table table = (Table) tableSet.toArray()[0];

        ArrayList<AbstractExpression> exprs;
        if (tableFilterList.containsKey(table)) {
          exprs = tableFilterList.get(table);
        } else {
          exprs = new ArrayList<AbstractExpression>();
          tableFilterList.put(table, exprs);
        }
        expr.m_isJoiningClause = false;
        addExprToEquivalenceSets(expr);
        exprs.add(expr);
      } else if (tableSet.size() == 2) {
        TablePair pair = new TablePair();
        pair.t1 = (Table) tableSet.toArray()[0];
        pair.t2 = (Table) tableSet.toArray()[1];

        ArrayList<AbstractExpression> exprs;
        if (joinSelectionList.containsKey(pair)) {
          exprs = joinSelectionList.get(pair);
        } else {
          exprs = new ArrayList<AbstractExpression>();
          joinSelectionList.put(pair, exprs);
        }
        expr.m_isJoiningClause = true;
        addExprToEquivalenceSets(expr);
        exprs.add(expr);
      } else if (tableSet.size() > 2) {
        multiTableSelectionList.add(expr);
      }
    }
  }