Package org.jboss.ejb.plugins.cmp.ejbql

Examples of org.jboss.ejb.plugins.cmp.ejbql.ASTPath


         buf.append(SQLUtil.NOT).append('(');
      }

      String fromAlias;
      JDBCEntityBridge fromEntity;
      ASTPath fromPath = (ASTPath) fromNode;
      addJoinPath(fromPath);
      fromAlias = aliasManager.getAlias(fromPath.getPath());
      fromEntity = (JDBCEntityBridge) fromPath.getEntity();

      if(toNode instanceof ASTParameter)
      {
         ASTParameter toParam = (ASTParameter) toNode;

         // can only compare like kind entities
         verifyParameterEntityType(toParam.number, fromEntity);

         inputParameters.addAll(QueryParameter.createParameters(toParam.number - 1, fromEntity));

         SQLUtil.getWhereClause(fromEntity.getPrimaryKeyFields(), fromAlias, buf);
      }
      else
      {
         String toAlias;
         JDBCEntityBridge toEntity;
         ASTPath toPath = (ASTPath) toNode;
         addJoinPath(toPath);
         toAlias = aliasManager.getAlias(toPath.getPath());
         toEntity = (JDBCEntityBridge) toPath.getEntity();

         // can only compare like kind entities
         if(!fromEntity.equals(toEntity))
         {
            throw new IllegalStateException("Only like types can be " +
View Full Code Here


         // hack alert - this should use the visitor approach
         for(int i = 0; i < orderByNode.jjtGetNumChildren(); i++)
         {
            Node orderByPath = orderByNode.jjtGetChild(i);
            ASTPath path = (ASTPath) orderByPath.jjtGetChild(0);
            if(!isSelected(path))
            {
               select.append(SQLUtil.COMMA);
               path.jjtAccept(this, select);
            }
         }
      }

      if(limitNode != null)
View Full Code Here

      // add all the additional path tables
      if(!allJoinPaths.isEmpty())
      {
         for(Iterator iter = allJoinPaths.iterator(); iter.hasNext();)
         {
            ASTPath path = (ASTPath) iter.next();
            for(int i = 0; i < path.size(); i++)
            {
               declareTables(path, i, buf);
            }
         }
      }

      // add all parent paths for collection member join paths
      if(!allCollectionMemberJoinPaths.isEmpty())
      {
         for(Iterator iter = allCollectionMemberJoinPaths.values().iterator(); iter.hasNext();)
         {
            ASTPath path = (ASTPath) iter.next();
            // don't declare the last one as the first path was left joined
            for(int i = 0; i < path.size() - 1; i++)
            {
               declareTables(path, i, buf);
            }
         }
      }

      // get all the left joined paths
      if(!allLeftJoinPaths.isEmpty())
      {
         Set allLeftJoins = new HashSet();
         for(Iterator iter = allLeftJoinPaths.values().iterator(); iter.hasNext();)
         {
            allLeftJoins.addAll((Set) iter.next());
         }

         // add all parent paths for left joins
         for(Iterator iter = allLeftJoins.iterator(); iter.hasNext();)
         {
            ASTPath path = (ASTPath) iter.next();
            // don't declare the last one as the first path was left joined
            for(int i = 0; i < path.size() - 1; i++)
            {
               declareTables(path, i, buf);
            }
         }
      }
View Full Code Here

         return;
      }

      for(Iterator iter = paths.iterator(); iter.hasNext();)
      {
         ASTPath path = (ASTPath) iter.next();

         JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) path.getCMRField();
         String parentAlias = aliasManager.getAlias(parentPath);

         if(cmrField.getRelationMetaData().isForeignKeyMappingStyle())
         {
            JDBCEntityBridge childEntity = (JDBCEntityBridge) cmrField.getRelatedEntity();
            String childAlias = aliasManager.getAlias(path.getPath());

            buf.append(SQLUtil.LEFT_JOIN)
               .append(childEntity.getQualifiedTableName())
               .append(' ')
               .append(childAlias)
               .append(SQLUtil.ON);
            SQLUtil.getJoinClause(cmrField, parentAlias, childAlias, buf);
         }
         else
         {
            String relationTableAlias = aliasManager.getRelationTableAlias(path.getPath());
            buf.append(SQLUtil.LEFT_JOIN)
               .append(cmrField.getQualifiedTableName())
               .append(' ')
               .append(relationTableAlias)
               .append(SQLUtil.ON);
View Full Code Here

      // add all the additional path tables
      if(!ctermJoinPaths.isEmpty())
      {
         for(Iterator iter = ctermJoinPaths.iterator(); iter.hasNext();)
         {
            ASTPath path = (ASTPath) iter.next();
            for(int i = 0; i < path.size(); i++)
            {
               createThetaJoin(path, i, joinedAliases, buf);
            }
         }
      }

      // add all the collection member path tables
      if(!ctermCollectionMemberJoinPaths.isEmpty())
      {
         for(Iterator iter = ctermCollectionMemberJoinPaths.entrySet().iterator(); iter.hasNext();)
         {
            Map.Entry entry = (Map.Entry) iter.next();
            String childAlias = (String) entry.getKey();
            ASTPath path = (ASTPath) entry.getValue();

            // join the memeber path
            createThetaJoin(path, path.size() - 1, joinedAliases, childAlias, buf);

            // join the memeber path parents
            for(int i = 0; i < path.size() - 1; i++)
            {
               createThetaJoin(path, i, joinedAliases, buf);
            }
         }
      }

      // get all the left joined paths
      if(!ctermLeftJoinPaths.isEmpty())
      {
         Set allLeftJoins = new HashSet();
         for(Iterator iter = ctermLeftJoinPaths.values().iterator(); iter.hasNext();)
         {
            allLeftJoins.addAll((Set) iter.next());
         }

         // add all parent paths for left joins
         for(Iterator iter = allLeftJoins.iterator(); iter.hasNext();)
         {
            ASTPath path = (ASTPath) iter.next();
            // don't declare the last one as the first path was left joined
            for(int i = 0; i < path.size() - 1; i++)
            {
               createThetaJoin(path, i, joinedAliases, buf);
            }
         }
      }
View Full Code Here

   public Object visit(ASTCollectionMemberDeclaration node, Object data)
   {
      StringBuffer buf = (StringBuffer) data;

      // first arg is a collection valued path
      ASTPath path = (ASTPath) node.jjtGetChild(0);

      // add this path to the list of declared paths
      declaredPaths.add(path.getPath());

      // get the entity at the end of this path
      JDBCEntityBridge entity = (JDBCEntityBridge) path.getEntity();

      // second arg is the identifier
      ASTIdentifier id = (ASTIdentifier) node.jjtGetChild(1);

      // get the alias
      String alias = aliasManager.getAlias(id.identifier);

      // add this path to the list of join paths so parent paths will be joined
      addCollectionMemberJoinPath(alias, path);

      // declare the alias mapping
      aliasManager.addAlias(path.getPath(), alias);

      buf.append(entity.getQualifiedTableName());
      buf.append(' ');
      buf.append(alias);
      leftJoins(path.getPath(), buf);

      if(onFindCMRJoin != null && alias.equals(selectAlias))
      {
         buf.append(onFindCMRJoin);
         onFindCMRJoin = null;
      }

      // add the relation-table
      JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) path.getCMRField();
      if(cmrField.getRelationMetaData().isTableMappingStyle())
      {
         String relationTableAlias = aliasManager.getRelationTableAlias(path.getPath());
         buf.append(SQLUtil.COMMA)
            .append(cmrField.getQualifiedTableName())
            .append(' ')
            .append(relationTableAlias);
      }
View Full Code Here

   public Object visit(ASTSelect node, Object data)
   {
      StringBuffer buf = (StringBuffer) data;

      Node child0 = node.jjtGetChild(0);
      ASTPath path;
      if(child0 instanceof ASTPath)
      {
         path = (ASTPath) child0;

         if(path.isCMPField())
         {
            // set the select object
            JDBCCMPFieldBridge selectField = (JDBCCMPFieldBridge) path.getCMPField();
            selectManager = (JDBCStoreManager) selectField.getManager();
            selectObject = selectField;
            setTypeFactory(selectManager.getJDBCTypeFactory());
            addJoinPath(path);
            selectAlias = aliasManager.getAlias(path.getPath(path.size() - 2));
            SQLUtil.getColumnNamesClause(selectField, selectAlias, buf);
         }
         else
         {
            // set the select object
            JDBCEntityBridge selectEntity = (JDBCEntityBridge) path.getEntity();
            selectManager = (JDBCStoreManager) selectEntity.getManager();
            selectObject = selectEntity;
            setTypeFactory(selectManager.getJDBCTypeFactory());
            selectEntity(path, node.distinct, buf);
         }
      }
      else
      {
         // the function should take a path expresion as a parameter
         path = getPathFromChildren(child0);

         if(path == null)
         {
            throw new IllegalStateException("The function in SELECT clause does not contain a path expression.");
         }

         if(path.isCMPField())
         {
            JDBCCMPFieldBridge selectField = (JDBCCMPFieldBridge) path.getCMPField();
            selectManager = (JDBCStoreManager) selectField.getManager();
            if(selectField.getJDBCType().hasMapper())
               this.functionJDBCType = selectField.getJDBCType();
         }
         else if(path.isCMRField())
         {
            JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) path.getCMRField();
            selectManager = (JDBCStoreManager) cmrField.getEntity().getManager();
            addJoinPath(path);
         }
         else
         {
            final JDBCEntityBridge entity = (JDBCEntityBridge) path.getEntity();
            selectManager = (JDBCStoreManager) entity.getManager();
            addJoinPath(path);
         }

         setTypeFactory(selectManager.getJDBCTypeFactory());
View Full Code Here

      StringBuffer buf = (StringBuffer) data;

      final Node child0 = node.jjtGetChild(0);
      if(child0 instanceof ASTPath)
      {
         ASTPath path = (ASTPath) child0;

         if(path.isCMRField())
         {
            JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) path.getCMRField();
            if(cmrField.getRelationMetaData().isTableMappingStyle())
            {
               existsClause(path, buf, !node.not);
               return buf;
            }
         }

         String alias = aliasManager.getAlias(path.getPath(path.size() - 2));
         JDBCFieldBridge field = (JDBCFieldBridge) path.getField();

         // if jdbc type is null then it should be a cmr field in
         // a one-to-one mapping that isn't a foreign key.
         // handle it the way the IS EMPTY on the one side of one-to-many
         // relationship is handled
View Full Code Here

   }

   public Object visit(ASTIsEmpty node, Object data)
   {
      StringBuffer buf = (StringBuffer) data;
      ASTPath path = (ASTPath) node.jjtGetChild(0);

      existsClause(path, buf, !node.not);
      return buf;
   }
View Full Code Here

   public Object visit(ASTMemberOf node, Object data)
   {
      StringBuffer buf = (StringBuffer) data;

      // setup compare to vars first, so we can compre types in from vars
      ASTPath toPath = (ASTPath) node.jjtGetChild(1);

      JDBCCMRFieldBridge toCMRField = (JDBCCMRFieldBridge) toPath.getCMRField();

      JDBCEntityBridge toChildEntity = (JDBCEntityBridge) toPath.getEntity();

      String pathStr = toPath.getPath(toPath.size() - 2);
      String toParentAlias = aliasManager.getAlias(pathStr);
      String toChildAlias = aliasManager.getAlias(toPath.getPath());
      String relationTableAlias = null;
      if(toCMRField.getRelationMetaData().isTableMappingStyle())
      {
         relationTableAlias = aliasManager.getRelationTableAlias(toPath.getPath());
      }

      // setup from variables
      String fromAlias = null;
      int fromParamNumber = -1;
      if(node.jjtGetChild(0) instanceof ASTParameter)
      {
         ASTParameter fromParam = (ASTParameter) node.jjtGetChild(0);

         // can only compare like kind entities
         verifyParameterEntityType(fromParam.number, toChildEntity);

         fromParamNumber = fromParam.number;
      }
      else
      {
         ASTPath fromPath = (ASTPath) node.jjtGetChild(0);
         addJoinPath(fromPath);

         JDBCEntityBridge fromEntity = (JDBCEntityBridge) fromPath.getEntity();
         fromAlias = aliasManager.getAlias(fromPath.getPath());

         // can only compare like kind entities
         if(!fromEntity.equals(toChildEntity))
         {
            throw new IllegalStateException("Only like types can be " +
View Full Code Here

TOP

Related Classes of org.jboss.ejb.plugins.cmp.ejbql.ASTPath

Copyright © 2018 www.massapicom. 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.