Examples of AmberExpr


Examples of com.caucho.amber.expr.AmberExpr

      AndExpr and = (AndExpr) _where;

      ArrayList<AmberExpr> components = and.getComponents();

      for (int i = components.size() - 1; i >= 0; i--) {
        AmberExpr component = components.get(i);

        if (component instanceof JoinExpr) {
          JoinExpr link = (JoinExpr) component;

          if (link.bindToFromItem()) {
            components.remove(i);
          }
        }
      }

      _where = and.getSingle();
    }

    if (_having instanceof AndExpr) {
      AndExpr and = (AndExpr) _having;

      ArrayList<AmberExpr> components = and.getComponents();

      for (int i = components.size() - 1; i >= 0; i--) {
        AmberExpr component = components.get(i);

        if (component instanceof JoinExpr) {
          JoinExpr link = (JoinExpr) component;

          if (link.bindToFromItem()) {
            components.remove(i);
          }
        }
      }

      _having = and.getSingle();
    }

    // Rolls up unused from items from the left to the right.
    // It's not necessary to roll up the rightmost items because
    // they're only created if they're actually needed
    for (int i = 0; i < _fromList.size(); i++) {
      FromItem item = _fromList.get(i);

      JoinExpr join = item.getJoinExpr();

      if (join == null)
        continue;

      // XXX: jpa/1173, jpa/1178
      // if (getParentQuery() != null)
      //   break;

      FromItem joinParent = join.getJoinParent();
      FromItem joinTarget = join.getJoinTarget();

      boolean isTarget = item == joinTarget;

      if (joinParent == null) {
      }
      else if (joinParent.getJoinExpr() == null
               && joinParent == joinTarget
               && ! usesFromData(joinParent)) {
        _fromList.remove(joinParent);

        replaceJoin(join);

        // XXX:
        item.setJoinExpr(null);
        //item.setOuterJoin(false);
        i = -1;

        AmberExpr joinWhere = join.getWhere();

        if (joinWhere != null)
          _where = AndExpr.create(_where, joinWhere);
      }
      else if (item == joinTarget
               && ! isJoinParent(item)
               && ! usesFromData(item)) {

        boolean isManyToOne = false;
        boolean isManyToMany = false;

        if (join instanceof ManyToOneJoinExpr) {
          // jpa/0h1c
          isManyToOne = true;

          // jpa/1144
          ManyToOneJoinExpr manyToOneJoinExpr;
          manyToOneJoinExpr = (ManyToOneJoinExpr) join;
          isManyToMany = manyToOneJoinExpr.isManyToMany();
        }

        // ejb/06u0, jpa/1144, jpa/0h1c, jpa/114g
        if (isManyToMany || (isManyToOne && ! item.isInnerJoin())) {
          // ejb/06u0 || isFromInnerJoin(item)))) {

          // Optimization for common children query:
          // SELECT o FROM TestBean o WHERE o.parent.id=?
          // jpa/0h1k
          // jpa/114g as negative exists test

          // jpa/0h1m
          if (i + 1 < _fromList.size()) {
            FromItem subItem = _fromList.get(i + 1);

            JoinExpr nextJoin = subItem.getJoinExpr();

            if (nextJoin != null
                && nextJoin instanceof ManyToOneJoinExpr) {
              continue;
            }
          }

          _fromList.remove(item);

          replaceJoin(join);

          i = -1;

          AmberExpr joinWhere = join.getWhere();

          if (joinWhere != null)
            _where = AndExpr.create(_where, joinWhere);
        }
      }
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

      if (i != 0)
        cb.append(", ");

      // cb.append(_fieldList.get(i).generateSelect(null));

      AmberExpr expr = _fieldList.get(i);

      // jpa/1202, jpa/0k15
      if (getMetaData().supportsUpdateTableAlias()
          && (_fromList.size() > 1))
        expr.generateWhere(cb);
      else
        expr.generateUpdateWhere(cb);

      cb.append("=");

      // jpa/1231
      if (getMetaData().supportsUpdateTableAlias() || hasSubQuery())
        _valueList.get(i).generateWhere(cb);
      else
        _valueList.get(i).generateUpdateWhere(cb);
    }

    String updateJoin = null;

    if (_where != null) {
      // jpa/1200 vs jpa/1201 and jpa/1231
      if (_fromList.size() == 1 && ! hasSubQuery()) {
        cb.append(" where ");

        _where.generateUpdateWhere(cb);
      }
      else {
        boolean isFirst = true;

        // jpa/1201: postgres 8.0.x/8.2.x compatibility
        if (getMetaData() instanceof PostgresMetaData) {
          item = _fromList.get(0);

          EntityType type = item.getEntityType();

          String targetId = type.getId().generateSelect(item.getName());

          cb.append(" FROM ");

          String tableName = item.getTable().getName();

          cb.append(tableName);
          cb.append(' ');
          cb.append(item.getName());

          isFirst = false;

          cb.append(" where ");

          cb.append(targetId);
          cb.append(" = ");
          cb.append(type.getId().generateSelect(item.getTable().getName()));
        }

        // jpa/1231, jpa/1202 vs jpa/1201 and jpa/1203
        if (_fromList.size() > 1
            && ! getMetaData().supportsUpdateTableList()) {
          // Postgres: jpa/1201 and Oracle: jpa/1203
          item = _fromList.get(1);

          EntityType type = item.getEntityType();

          String relatedId = type.getId().generateSelect(item.getName());

          if (isFirst) {
            isFirst = false;
            cb.append(" where ");
          }
          else
            cb.append(" and ");

          cb.append("exists (select ");

          cb.append(relatedId);

          cb.append(" from ");

          generateFromList(cb, true);

          // jpa/1231
          isFirst = true;
        }

        for (int i = 0; i < _fromList.size(); i++) {
          item = _fromList.get(i);

          AmberExpr expr = item.getJoinExpr();

          if (expr != null && ! item.isOuterJoin()) {
            // jpa/1231
            if (isFirst) {
              isFirst = false;
              cb.append(" where ");
            }
            else
              cb.append(" and ");

            expr.generateJoin(cb);
          }

          EntityType entityType = item.getEntityType();

          // jpa/0l44
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

   * Binds the expression as a select item.
   */
  public AmberExpr bindSelect(QueryParser parser)
  {
    for (int i = 0; i < _args.size(); i++) {
      AmberExpr arg = _args.get(i);

      arg = arg.bindSelect(parser);

      _args.set(i, arg);
    }

    return this;
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

   * Returns true if the expression uses the from item.
   */
  public boolean usesFrom(FromItem from, int type, boolean isNot)
  {
    for (int i = 0; i < _args.size(); i++) {
      AmberExpr arg = _args.get(i);

      if (arg instanceof IdExpr) {
        IdExpr id = (IdExpr) arg;

        // jpa/0i18
        if (id.getFromItem() == from)
          return true;
      }

      if (arg instanceof KeyColumnExpr) {
        KeyColumnExpr key = (KeyColumnExpr) arg;

        // jpa/1123
        if (key.usesFrom(from, IS_INNER_JOIN, false))
          return true;
      }

      if (arg.usesFrom(from, type))
        return true;
    }

    return false;
  }
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

        int offset = 0;

        for (int j = 0; j < len; j++) {
          int index = getColumn(j + 1);

          AmberExpr expr = _resultList.get(j);

          if (expr instanceof LoadEntityExpr) {
            LoadEntityExpr entityExpr = (LoadEntityExpr) expr;

            Object obj = entityExpr.getCacheObject(_session,
                                                   _rs,
                                                   index + offset,
                                                   _joinFetchMap);

            tail.setValue(i, j, obj);

            // jpa/11z1
            offset += entityExpr.getIndex();
          }
          else {
            Object obj = expr.getCacheObject(_session,
                                             _rs,
                                             index + offset);

            tail.setValue(i, j, obj);
          }
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

      }
    }
    else {
      int index = getColumn(column);

      AmberExpr expr = _resultList.get(column - 1);

      if (_session == null)
        throw new NullPointerException();

      value = expr.getObject(_session, _rs, index);

      /*
      if (expr instanceof LoadEntityExpr) {
        if (log.isLoggable(Level.FINER))
          log.log(Level.FINER, L.l("ResultSetImpl expr is instance of LoadEntityExpr"));
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

                                   obj));
    }
    else {
      int index = getColumn(column);

      AmberExpr expr = _resultList.get(column - 1);

      EntityItem item = expr.findItem(_session, _rs, index);

      return item;
    }
    /*
      FromItem item = _fromList.get(column - 1);
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

        args.get(1).generateUpdateWhere(cb);

      if (n > 2) {
        cb.append(',');

        AmberExpr expr = args.get(2);

         if (select)
          expr.generateWhere(cb);
        else
          expr.generateUpdateWhere(cb);
      }

      cb.append(')');

      return;
    }

    // Postgres: jpa/1190, jpa/119b, jpa/119c

    cb.append("position(");

    if (select)
      args.get(0).generateWhere(cb);
    else
      args.get(0).generateUpdateWhere(cb);

    cb.append(" in substring(");

    if (select)
      args.get(1).generateWhere(cb);
    else
      args.get(1).generateUpdateWhere(cb);

    cb.append(" from ");

    int fromIndex = 1;

    AmberExpr expr = null;

    if (n == 2) {
      cb.append('1');
    }
    else {
      expr = args.get(2);

      try {
        fromIndex = Integer.parseInt(expr.toString());
      } catch (Exception ex) {
        // XXX: this validation should be moved to QueryParser
        // throw new QueryParseException(L.l("expected an integer for LOCATE 3rd argument"));
      }

      if (select)
        expr.generateWhere(cb);
      else
        expr.generateUpdateWhere(cb);
    }

    cb.append("))");
  }
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

  /**
   * Returns the result type.
   */
  AmberType getResultType(int index)
  {
    AmberExpr expr = _resultList.get(index);

    return expr.getType();
  }
View Full Code Here

Examples of com.caucho.amber.expr.AmberExpr

   * Returns true if the from item is used by the query.
   */
  public boolean usesFrom(FromItem item, int type)
  {
    for (int j = 0; j < _resultList.size(); j++) {
      AmberExpr result = _resultList.get(j);

      if (result.usesFrom(item, type)) {
        return true;
      }
    }

    if (_where != null && _where.usesFrom(item, type)) {
      return true;
    }

    if (_orderList != null) {
      for (int j = 0; j < _orderList.size(); j++) {
        AmberExpr order = _orderList.get(j);

        if (order.usesFrom(item, type)) {
          return true;
        }
      }
    }

    // jpa/1123
    if (_groupList != null) {
      for (int j = 0; j < _groupList.size(); j++) {
        AmberExpr group = _groupList.get(j);

        // jpa/1123 if (group.usesFrom(item, type)) {
        if (group.usesFrom(item, AmberExpr.IS_INNER_JOIN)) {
          return true;
        }
      }

      if (_having != null && _having.usesFrom(item, type))
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.