Examples of JDBCCMRFieldBridge


Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

        StringBuffer buf = (StringBuffer) data;

        // setup compare to vars first, so we can compare 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 CmpMessages.MESSAGES.onlyLikeTypesCanBeCompared(fromEntity.getEntityName(), toChildEntity.getEntityName());
            }
        }

        // add the path to the list of paths to left join
        addLeftJoinPath(pathStr, toPath);

        // first part makes toChild not in toParent.child
        if (!subquerySupported) {
            addJoinPath(toPath);

            // subquery not supported; use a left join and is not null
            if (node.not) {
                buf.append(SQLUtil.NOT);
            }
            buf.append('(');

            if (relationTableAlias == null) {
                SQLUtil.getIsNullClause(true, toChildEntity.getPrimaryKeyFields(), toChildAlias, buf);
            } else {
                SQLUtil.getIsNullClause(true, toCMRField.getTableKeyFields(), relationTableAlias, buf);
            }
        } else {
            // subquery supported; use exists subquery
            if (node.not) {
                buf.append(SQLUtil.NOT);
            }

            buf.append(SQLUtil.EXISTS).append('(');

            if (relationTableAlias == null) {
                buf.append(SQLUtil.SELECT);
                SQLUtil.getColumnNamesClause(toChildEntity.getPrimaryKeyFields(), toChildAlias, buf)
                        .append(SQLUtil.FROM)
                        .append(toChildEntity.getQualifiedTableName())
                        .append(' ')
                        .append(toChildAlias)
                        .append(SQLUtil.WHERE);
                SQLUtil.getJoinClause(toCMRField, toParentAlias, toChildAlias, buf);
            } else {
                buf.append(SQLUtil.SELECT);
                SQLUtil.getColumnNamesClause(toCMRField.getRelatedCMRField().getTableKeyFields(), relationTableAlias, buf)
                        .append(SQLUtil.FROM)
                        .append(toCMRField.getQualifiedTableName())
                        .append(' ')
                        .append(relationTableAlias)
                        .append(SQLUtil.WHERE);
                SQLUtil.getRelationTableJoinClause(toCMRField, toParentAlias, relationTableAlias, buf);
            }
        }

        buf.append(SQLUtil.AND);

        // second part makes fromNode equal toChild
        if (fromAlias != null) {
            // compare pk to pk
            if (relationTableAlias == null) {
                SQLUtil.getSelfCompareWhereClause(toChildEntity.getPrimaryKeyFields(),
                        toChildAlias,
                        fromAlias,
                        buf);
            } else {
                SQLUtil.getRelationTableJoinClause(toCMRField.getRelatedCMRField(),
                        fromAlias,
                        relationTableAlias,
                        buf);
            }
        } else {
            // add the parameters
            inputParameters.addAll(QueryParameter.createParameters(fromParamNumber - 1,
                    toChildEntity));

            // compare pk to parameter
            if (relationTableAlias == null) {
                SQLUtil.getWhereClause(toChildEntity.getPrimaryKeyFields(), toChildAlias, buf);
            } else {
                SQLUtil.getWhereClause(toCMRField.getRelatedCMRField().getTableKeyFields(),
                        relationTableAlias,
                        buf);
            }
        }
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

        }
        final CmpEntityBeanComponentInstance instance = (CmpEntityBeanComponentInstance) context.getPrivateData(ComponentInstance.class);
        final CmpEntityBeanContext ctx = instance.getEjbContext();

        // We are going to work with the context a lot
        JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) context.getParameters()[0];

        if (CMRMessage.GET_RELATED_ID == relationshipMessage) {
            // call getRelateId
            if (log.isTraceEnabled()) {
                log.trace("Getting related id: field=" + cmrField.getFieldName() + " id=" + ctx.getPrimaryKey());
            }
            return cmrField.getRelatedId(ctx);

        } else if (CMRMessage.ADD_RELATION == relationshipMessage) {
            // call addRelation
            Object relatedId = context.getParameters()[1];
            if (log.isTraceEnabled()) {
                log.trace("Add relation: field=" + cmrField.getFieldName() +
                        " id=" + ctx.getPrimaryKey() +
                        " relatedId=" + relatedId);
            }

            cmrField.addRelation(ctx, relatedId);

            return null;

        } else if (CMRMessage.REMOVE_RELATION == relationshipMessage) {
            // call removeRelation
            Object relatedId = context.getParameters()[1];
            if (log.isTraceEnabled()) {
                log.trace("Remove relation: field=" + cmrField.getFieldName() +
                        " id=" + ctx.getPrimaryKey() +
                        " relatedId=" + relatedId);
            }

            cmrField.removeRelation(ctx, relatedId);

            return null;
        } else if (CMRMessage.SCHEDULE_FOR_CASCADE_DELETE == relationshipMessage) {
            JDBCEntityBridge entity = (JDBCEntityBridge) cmrField.getEntity();
            entity.scheduleForCascadeDelete(ctx);
            return null;
        } else if (CMRMessage.SCHEDULE_FOR_BATCH_CASCADE_DELETE == relationshipMessage) {
            JDBCEntityBridge entity = (JDBCEntityBridge) cmrField.getEntity();
            entity.scheduleForBatchCascadeDelete(ctx);
            return null;
        } else {
            // this should not be possible we are using a type safe enum
            throw CmpMessages.MESSAGES.unknownCmpRelationshipMessage(relationshipMessage);
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

        while (i < relationData.removedRelations.size()) {
            String sql = getSQL(relationData, relationData.removedRelations.size() - i);

            Connection con = null;
            PreparedStatement ps = null;
            JDBCCMRFieldBridge cmrField = relationData.getLeftCMRField();
            try {
                // create the statement
                if (log.isDebugEnabled()) {
                    log.debug("Executing SQL: " + sql);
                }

                // get the connection
                DataSource dataSource = cmrField.getDataSource();
                con = dataSource.getConnection();
                ps = con.prepareStatement(sql);

                // set the parameters
                setParameters(ps, relationData, pairs);

                // execute statement
                int rowsAffected = ps.executeUpdate();
                if (log.isDebugEnabled()) {
                    log.debug("Rows affected = " + rowsAffected);
                }

                i += (maxKeysInDelete > 0 ? maxKeysInDelete : relationData.removedRelations.size());
            } catch (Exception e) {
                throw new EJBException("Could not delete relations from " +
                        cmrField.getQualifiedTableName(), e
                );
            } finally {
                JDBCUtil.safeClose(ps);
                JDBCUtil.safeClose(con);
            }
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

        }
        return createSQL(relationData, keys);
    }

    private static String createSQL(RelationData relationData, int keysInDelete) {
        JDBCCMRFieldBridge left = relationData.getLeftCMRField();
        JDBCCMRFieldBridge right = relationData.getRightCMRField();

        StringBuffer sql = new StringBuffer(300);
        sql.append(SQLUtil.DELETE_FROM)
                .append(left.getQualifiedTableName())
                .append(SQLUtil.WHERE);

        StringBuffer whereClause = new StringBuffer(20);
        whereClause.append('(');
        // left keys
        SQLUtil.getWhereClause(left.getTableKeyFields(), whereClause)
                .append(SQLUtil.AND);
        // right keys
        SQLUtil.getWhereClause(right.getTableKeyFields(), whereClause)
                .append(')');
        String whereClauseStr = whereClause.toString();
        sql.append(whereClauseStr);
        for (int i = 1; i < keysInDelete; ++i) {
            sql.append(SQLUtil.OR).append(whereClauseStr);
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

        }

        Connection con = null;
        PreparedStatement ps = null;

        JDBCCMRFieldBridge cmrField = relationData.getLeftCMRField();
        try {
            // get the sql
            String sql = getSQL(relationData);
            boolean debug = log.isDebugEnabled();
            if (debug)
                log.debug("Executing SQL: " + sql);

            // get the connection
            DataSource dataSource = cmrField.getDataSource();
            con = dataSource.getConnection();

            // get a prepared statement
            ps = con.prepareStatement(sql);

            Iterator pairs = relationData.addedRelations.iterator();
            while (pairs.hasNext()) {
                RelationPair pair = (RelationPair) pairs.next();

                // set the parameters
                setParameters(ps, relationData, pair);

                int rowsAffected = ps.executeUpdate();
            }
        } catch (Exception e) {
            throw new EJBException("Could insert relations into " +
                    cmrField.getQualifiedTableName(), e);
        } finally {
            JDBCUtil.safeClose(ps);
            JDBCUtil.safeClose(con);
        }
    }
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

            JDBCUtil.safeClose(con);
        }
    }

    protected static String getSQL(RelationData relationData) {
        JDBCCMRFieldBridge left = relationData.getLeftCMRField();
        JDBCCMRFieldBridge right = relationData.getRightCMRField();

        StringBuffer sql = new StringBuffer(200);
        sql.append(SQLUtil.INSERT_INTO).append(left.getQualifiedTableName());

        sql.append('(');
        SQLUtil.getColumnNamesClause(left.getTableKeyFields(), sql);
        sql.append(SQLUtil.COMMA);
        SQLUtil.getColumnNamesClause(right.getTableKeyFields(), sql);
        sql.append(')');

        sql.append(SQLUtil.VALUES).append('(');
        SQLUtil.getValuesClause(left.getTableKeyFields(), sql);
        sql.append(SQLUtil.COMMA);
        SQLUtil.getValuesClause(right.getTableKeyFields(), sql);
        sql.append(')');
        return sql.toString();
    }
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

                        "." +
                        manager.getMetaData().getName());
    }

    public Collection execute(JDBCCMRFieldBridge cmrField, Object pk) {
        JDBCCMRFieldBridge relatedCMRField = (JDBCCMRFieldBridge) cmrField.getRelatedCMRField();

        // get the read ahead cahces
        ReadAheadCache readAheadCache = manager.getReadAheadCache();
        ReadAheadCache relatedReadAheadCache = cmrField.getRelatedManager().getReadAheadCache();

        // get the finder results associated with this context, if it exists
        ReadAheadCache.EntityReadAheadInfo info = readAheadCache.getEntityReadAheadInfo(pk);
        List loadKeys = info.getLoadKeys();

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // generate the sql
            boolean[] preloadMask = getPreloadMask(cmrField);
            String sql = getSQL(cmrField, preloadMask, loadKeys.size());

            // create the statement
            if (log.isDebugEnabled())
                log.debug("load relation SQL: " + sql);

            // get the connection
            con = cmrField.getDataSource().getConnection();
            ps = con.prepareStatement(sql.toString());

            // Set the fetch size of the statement
            if (entity.getFetchSize() > 0) {
                ps.setFetchSize(entity.getFetchSize());
            }

            // get the load fields
            JDBCCMPFieldBridge[] myKeyFields = getMyKeyFields(cmrField);
            JDBCCMPFieldBridge[] relatedKeyFields = getRelatedKeyFields(cmrField);

            // set the parameters
            int paramIndex = 1;
            for (int i = 0; i < loadKeys.size(); i++) {
                Object key = loadKeys.get(i);
                for (int j = 0; j < myKeyFields.length; ++j)
                    paramIndex = myKeyFields[j].setPrimaryKeyParameters(ps, paramIndex, key);
            }

            // execute statement
            rs = ps.executeQuery();

            // initialize the results map
            Map resultsMap = new HashMap(loadKeys.size());
            for (int i = 0; i < loadKeys.size(); ++i) {
                resultsMap.put(loadKeys.get(i), new ArrayList());
            }

            // load the results
            Object[] ref = new Object[1];
            while (rs.next()) {
                // reset the column index for this row
                int index = 1;

                // ref must be reset to null before each load
                ref[0] = null;

                // if we are loading more then one entity, load the pk from the row
                Object loadedPk = pk;
                if (loadKeys.size() > 1) {
                    // load the pk
                    for (int i = 0; i < myKeyFields.length; ++i) {
                        index = myKeyFields[i].loadPrimaryKeyResults(rs, index, ref);
                        if (ref[0] == null) {
                            break;
                        }
                    }
                    loadedPk = ref[0];
                }

                // load the fk
                ref[0] = null;
                for (int i = 0; i < relatedKeyFields.length; ++i) {
                    index = relatedKeyFields[i].loadPrimaryKeyResults(rs, index, ref);
                    if (ref[0] == null) {
                        break;
                    }
                }
                Object loadedFk = ref[0];

                if (loadedFk != null) {
                    // add this value to the list for loadedPk
                    List results = (List) resultsMap.get(loadedPk);
                    results.add(loadedFk);

                    // if the related cmr field is single valued we can pre-load
                    // the reverse relationship
                    if (relatedCMRField.isSingleValued()) {
                        relatedReadAheadCache.addPreloadData(
                                loadedFk,
                                relatedCMRField,
                                Collections.singletonList(loadedPk));
                    }

                    // read the preload fields
                    if (preloadMask != null) {
                        JDBCFieldBridge[] relatedFields = cmrField.getRelatedJDBCEntity().getTableFields();
                        for (int i = 0; i < relatedFields.length; ++i) {
                            if (preloadMask[i]) {
                                JDBCFieldBridge field = relatedFields[i];
                                ref[0] = null;

                                // read the value and store it in the readahead cache
                                index = field.loadArgumentResults(rs, index, ref);
                                relatedReadAheadCache.addPreloadData(loadedFk, field, ref[0]);
                            }
                        }
                    }
                }
            }

            // set all of the preloaded values
            JDBCReadAheadMetaData readAhead = relatedCMRField.getReadAhead();
            for (Iterator iter = resultsMap.keySet().iterator(); iter.hasNext(); ) {
                Object key = iter.next();

                // get the results for this key
                List results = (List) resultsMap.get(key);
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

            return Collections.emptyList();
        }

        final List<LeftJoinCMRNode> leftJoinCMRNodes = new ArrayList<LeftJoinCMRNode>();
        for (JDBCLeftJoinMetaData leftJoin : leftJoins) {
            JDBCCMRFieldBridge cmrField = entity.getCMRFieldByName(leftJoin.getCmrField());
            if (cmrField == null) {
                throw new RuntimeException("cmr-field in left-join was not found: cmr-field=" +
                        leftJoin.getCmrField() + ", entity=" + entity.getEntityName());
            }

            List<LeftJoinCMRNode> subNodes;
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            String childPath = path + '.' + cmrField.getFieldName();
            if (declaredPaths != null) {
                declaredPaths.add(childPath);
            }

            subNodes = getLeftJoinCMRNodes(relatedEntity, childPath, leftJoin.getLeftJoins(), declaredPaths);
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

        return leftJoinCMRNodes;
    }

    public static final void leftJoinCMRNodes(String alias, List<LeftJoinCMRNode> onFindCMRNodes, AliasManager aliasManager, StringBuffer sb) {
        for (LeftJoinCMRNode node : onFindCMRNodes) {
            JDBCCMRFieldBridge cmrField = node.cmrField;
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            String relatedAlias = aliasManager.getAlias(node.path);

            JDBCRelationMetaData relation = cmrField.getMetaData().getRelationMetaData();
            if (relation.isTableMappingStyle()) {
                String relTableAlias = aliasManager.getRelationTableAlias(node.path);
                sb.append(" LEFT OUTER JOIN ")
                        .append(cmrField.getQualifiedTableName())
                        .append(' ')
                        .append(relTableAlias)
                        .append(" ON ");
                SQLUtil.getRelationTableJoinClause(cmrField, alias, relTableAlias, sb);

                sb.append(" LEFT OUTER JOIN ")
                        .append(relatedEntity.getQualifiedTableName())
                        .append(' ')
                        .append(relatedAlias)
                        .append(" ON ");
                SQLUtil.getRelationTableJoinClause(cmrField.getRelatedCMRField(), relatedAlias, relTableAlias, sb);
            } else {
                // foreign key mapping style
                sb.append(" LEFT OUTER JOIN ")
                        .append(relatedEntity.getQualifiedTableName())
                        .append(' ')
View Full Code Here

Examples of org.jboss.as.cmp.jdbc.bridge.JDBCCMRFieldBridge

    public static final void appendLeftJoinCMRColumnNames(List<LeftJoinCMRNode> onFindCMRNodes,
                                                          AliasManager aliasManager,
                                                          StringBuffer sb) {
        for (LeftJoinCMRNode node : onFindCMRNodes) {
            JDBCCMRFieldBridge cmrField = node.cmrField;
            JDBCEntityBridge relatedEntity = cmrField.getRelatedJDBCEntity();
            String childAlias = aliasManager.getAlias(node.path);

            // primary key fields
            SQLUtil.appendColumnNamesClause(relatedEntity.getPrimaryKeyFields(),
                    childAlias,
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.