コード例 #1
0
  @Override
  public void visit(AndOr obj) {
    visitNode(obj.getLeftCondition());
    visitNode(obj.getRightCondition());

    this.ranges = Range.mergeOverlapping(this.ranges);
  }
コード例 #2
0
ファイル: DSLSearch.java プロジェクト: mathwaa/teiid
  private static FilterConditionContext buildQueryFromWhereClause(
      Condition criteria,
      @SuppressWarnings("rawtypes") QueryBuilder queryBuilder,
      FilterConditionBeginContext fcbc)
      throws TranslatorException {

    if (criteria == null) return null;
    FilterConditionContext fcc = null;

    if (criteria instanceof AndOr) {
      LogManager.logTrace(
          LogConstants.CTX_CONNECTOR, "Infinispan DSL Parsing compound criteria."); // $NON-NLS-1$
      AndOr crit = (AndOr) criteria;
      AndOr.Operator op = crit.getOperator();

      switch (op) {
        case AND:
          FilterConditionContext f_and =
              buildQueryFromWhereClause(crit.getLeftCondition(), queryBuilder, fcbc);
          FilterConditionBeginContext fcbca = null;
          if (f_and != null) {
            fcbca = f_and.and();
          }
          fcc = buildQueryFromWhereClause(crit.getRightCondition(), queryBuilder, fcbca);

          break;

        case OR:
          FilterConditionContext f_or =
              buildQueryFromWhereClause(crit.getLeftCondition(), queryBuilder, fcbc);
          FilterConditionBeginContext fcbcb = null;
          if (f_or != null) {
            fcbcb = f_or.or();
          }
          fcc = buildQueryFromWhereClause(crit.getRightCondition(), queryBuilder, fcbcb);

          break;

        default:
          throw new TranslatorException(
              InfinispanPlugin.Util.gs(
                  InfinispanPlugin.Event.TEIID25050, new Object[] {op, "And, Or"}));
      }

    } else if (criteria instanceof Comparison) {
      fcc = visit((Comparison) criteria, queryBuilder, fcbc);

    } else if (criteria instanceof Like) {
      fcc = visit((Like) criteria, queryBuilder, fcbc);

    } else if (criteria instanceof In) {
      fcc = visit((In) criteria, queryBuilder, fcbc);

    } else if (criteria instanceof IsNull) {
      fcc = visit((IsNull) criteria, queryBuilder, fcbc);
    } else if (criteria instanceof Not) {
      Condition c = ((Not) criteria).getCriteria();
      if (fcbc == null) {
        fcc = queryBuilder.not(buildQueryFromWhereClause(c, queryBuilder, fcbc));
      } else {
        fcc = fcbc.not(buildQueryFromWhereClause(c, queryBuilder, fcbc));
      }
    } else {
      throw new TranslatorException(
          InfinispanPlugin.Util.gs(InfinispanPlugin.Event.TEIID25054, criteria.toString()));
    }
    return fcc;
  }
コード例 #3
0
ファイル: LuceneSearch.java プロジェクト: jagazee/teiid-8.7
  private static boolean buildQueryFromWhereClause(
      Condition criteria, BooleanJunction<BooleanJunction> junction, QueryBuilder queryBuilder)
      throws TranslatorException {
    boolean createdQueries = false;
    BooleanJunction<BooleanJunction> inUse = junction;

    if (criteria instanceof AndOr) {
      LogManager.logTrace(LogConstants.CTX_CONNECTOR, "Parsing compound criteria."); // $NON-NLS-1$
      AndOr crit = (AndOr) criteria;
      AndOr.Operator op = crit.getOperator();

      switch (op) {
        case AND:
          BooleanJunction<BooleanJunction> leftAnd = queryBuilder.bool();
          boolean andLeftHasQueries =
              buildQueryFromWhereClause(crit.getLeftCondition(), leftAnd, queryBuilder);

          BooleanJunction<BooleanJunction> rightAnd = queryBuilder.bool();
          boolean andRightHasQueries =
              buildQueryFromWhereClause(crit.getRightCondition(), rightAnd, queryBuilder);

          if (andLeftHasQueries && andRightHasQueries) {
            leftAnd.must(rightAnd.createQuery());
            inUse.should(leftAnd.createQuery());
          } else if (andLeftHasQueries) {

            inUse.should(leftAnd.createQuery());
          } else if (andRightHasQueries) {
            inUse.should(rightAnd.createQuery());
          }

          createdQueries = (andLeftHasQueries ? andLeftHasQueries : andRightHasQueries);

          break;

        case OR:
          boolean orLeftHasQueries =
              buildQueryFromWhereClause(crit.getLeftCondition(), inUse, queryBuilder);
          boolean orRightHasQueries =
              buildQueryFromWhereClause(crit.getRightCondition(), inUse, queryBuilder);

          createdQueries = (orLeftHasQueries ? orLeftHasQueries : orRightHasQueries);

          break;

        default:
          final String msg =
              ObjectPlugin.Util.getString(
                  "LuceneSearch.invalidOperator",
                  new Object[] {op, "And, Or"}); // $NON-NLS-1$ //$NON-NLS-2$
          throw new TranslatorException(msg);
      }

    } else if (criteria instanceof Comparison) {
      createdQueries = visit((Comparison) criteria, inUse, queryBuilder);

    } else if (criteria instanceof Exists) {
      LogManager.logTrace(
          LogConstants.CTX_CONNECTOR,
          "Parsing EXISTS criteria: NOT IMPLEMENTED YET"); //$NON-NLS-1$
      // TODO Exists should be supported in a future release.

    } else if (criteria instanceof Like) {
      createdQueries = visit((Like) criteria, inUse, queryBuilder);

    } else if (criteria instanceof In) {
      createdQueries = visit((In) criteria, inUse, queryBuilder);
    }
    // else if (criteria instanceof Not) {
    //			LogManager.logTrace(LogConstants.CTX_CONNECTOR, "Parsing NOT criteria."); //$NON-NLS-1$
    // isNegated = true;
    // filterList.addAll(getSearchFilterFromWhereClause(((Not)criteria).getCriteria(),
    // new LinkedList<String>()));
    // }

    return createdQueries;
  }