SubQuery(Database database, int level, QueryExpression queryExpression, int mode) {

    this.level = level;
    this.queryExpression = queryExpression;
    this.database = database;

    switch (mode) {
      case OpTypes.EXISTS:
        isExistsPredicate = true;
        break;

      case OpTypes.IN:
        uniqueRows = true;

        if (queryExpression != null) {
          queryExpression.setFullOrder();
        }
        break;

      case OpTypes.UNIQUE:
        isUniquePredicate = true;

        if (queryExpression != null) {
          queryExpression.setFullOrder();
        }
    }
  }