Package org.jpox.store.mapped.mapping

Examples of org.jpox.store.mapped.mapping.JavaTypeMapping


                int fieldCount = vmd.getNoOfInheritedManagedMembers() + vmd.getNoOfManagedMembers();
               
                statementExpressionIndex = new StatementExpressionIndex[fieldCount];
                for (int i=0; i<fieldNumbers.length; ++i)
                {
                    JavaTypeMapping m = valueTable.getFieldMapping(vmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumbers[i]));
                    if (m != null)
                    {
                        if (m.includeInFetchStatement() && !(m instanceof AbstractContainerMapping))
                        {
                            statementExpressionIndex[fieldNumbers[i]] = new StatementExpressionIndex();
                            statementExpressionIndex[fieldNumbers[i]].setMapping(m);
                            fn[prefetchFieldCount++] = fieldNumbers[i];
                        }
                    }
                }
               
                prefetchFieldNumbers = new int[prefetchFieldCount];
                System.arraycopy(fn, 0, prefetchFieldNumbers, 0, prefetchFieldCount);
            }
            else
            {
                AbstractClassMetaData cmd = vmd;
                if (cmd.getIdentityType() == IdentityType.APPLICATION)
                {
                    prefetchFieldNumbers = new int[cmd.getPKMemberPositions().length];
                    int fieldCount = cmd.getNoOfInheritedManagedMembers() + cmd.getNoOfManagedMembers();
                    statementExpressionIndex = new StatementExpressionIndex[fieldCount];
                    for (int i = 0; i < prefetchFieldNumbers.length; ++i)
                    {
                        prefetchFieldNumbers[i] = cmd.getPKMemberPositions()[i];
                        JavaTypeMapping m = valueTable.getFieldMapping(cmd.getMetaDataForManagedMemberAtAbsolutePosition(prefetchFieldNumbers[i]));
                        if (m != null) // field is not stored in the table, e.g List, Set, etc or is transactional
                        {
                            if (m.includeInFetchStatement() && !(m instanceof AbstractContainerMapping))
                            {
                                statementExpressionIndex[prefetchFieldNumbers[i]] = new StatementExpressionIndex();
                                statementExpressionIndex[prefetchFieldNumbers[i]].setMapping(m);
                            }
                        }
View Full Code Here


        ScalarExpression ownerExpr = mapping.newScalarExpression(stmt, ownerTe);
        ScalarExpression ownerInCollectionExpr = ownerMapping.newScalarExpression(stmt, stmt.getTableExpression(mapTableAlias));
        stmt.andCondition(ownerExpr.eq(ownerInCollectionExpr));

        // Select COUNT(*)
        JavaTypeMapping m = dba.getMapping(String.class, storeMgr);
        StringLiteral lit = (StringLiteral)m.newLiteral(stmt, "COUNT(*)");
        lit.generateStatementWithoutQuotes();
        stmt.selectScalarExpression(lit);

        return stmt;
    }
View Full Code Here

     * @param str The expression for the search string
     * @return The expression.
     **/
    public BooleanExpression startsWithMethod(ScalarExpression source, ScalarExpression str)
    {
        JavaTypeMapping m = getMapping(BigInteger.class, source);
       
        ScalarExpression integerLiteral = m.newLiteral(source.getQueryExpression(), BigInteger.ONE);
        ArrayList args = new ArrayList();
        args.add(str);
        args.add(source);
    //Cloudscape 10.0
        //LOCATE( stringSearched, SearchString, [StartPosition] )
View Full Code Here

    {
        if (expr instanceof CharacterLiteral)
        {
            char c = ((Character) ((CharacterLiteral) expr).getValue()).charValue();
            BigInteger value = new BigInteger("" + (int) c);
            JavaTypeMapping m = getMapping(value.getClass(), expr);

            return (NumericExpression) m.newLiteral(expr.getQueryExpression(), value);
        }
        else if (expr instanceof Literal)
        {
            BigInteger value = new BigInteger((String) ((Literal) expr).getValue());
            JavaTypeMapping m = getMapping(value.getClass(), expr);
            return (NumericExpression) m.newLiteral(expr.getQueryExpression(), value);
        }
        ArrayList args = new ArrayList();
        args.add(expr);

        return new NumericExpression("JPOX_ASCII", args);
View Full Code Here

     */
    public StringExpression toStringExpression(NumericExpression expr)
    {
        if (expr instanceof Literal)
        {
            JavaTypeMapping m = getMapping(String.class, expr);
            return new StringLiteral(expr.getQueryExpression(),m,((Literal)expr).getValue().toString());           
        }
        List args = new ArrayList();
        args.add(expr);
        List argsRTRIM = new ArrayList();
View Full Code Here

     * @param pattern The literal expression with the pattern.
     * @return the match expression.
     */
    public BooleanExpression matchesMethod(StringExpression text, StringExpression pattern)
    {
        JavaTypeMapping m = getMapping(BigInteger.class, text);
        ScalarExpression integerLiteral = m.newLiteral(text.getQueryExpression(), BigInteger.ONE);

        List args = new ArrayList();
        args.add(text);
        args.add(pattern);

View Full Code Here

                if (managesField(fmd.getFullFieldName()))
                {
                    if (!fmd.getClassName(true).equals(theCmd.getFullClassName()))
                    {
                        // Field already managed by this table so maybe we are overriding a superclass
                        JavaTypeMapping fieldMapping = getMappingForFieldName(fmd.getFullFieldName());
                        ColumnMetaData[] colmds = fmd.getColumnMetaData();
                        if (colmds != null && colmds.length > 0)
                        {
                            // Apply this set of ColumnMetaData to the existing mapping
                            int colnum = 0;
                            IdentifierFactory idFactory = getStoreManager().getIdentifierFactory();
                            for (int i=0;i<fieldMapping.getNumberOfDatastoreFields();i++)
                            {
                                Column col = (Column)fieldMapping.getDataStoreMapping(i).getDatastoreField();
                                col.setIdentifier(idFactory.newDatastoreFieldIdentifier(colmds[colnum].getName()));
                                col.setMetaData(colmds[colnum]);

                                colnum++;
                                if (colnum == colmds.length)
                                {
                                    // Reached end of specified metadata
                                    break;
                                }
                            }
                            if (JPOXLogger.DATASTORE.isDebugEnabled())
                            {
                                // TODO Change this to reflect that we have updated the previous mapping
                                // Provide field->column mapping debug message
                                StringBuffer columnsStr = new StringBuffer();
                                for (int i=0;i<fieldMapping.getNumberOfDatastoreFields();i++)
                                {
                                    if (i > 0)
                                    {
                                        columnsStr.append(",");
                                    }
                                    columnsStr.append(fieldMapping.getDataStoreMapping(i).getDatastoreField());
                                }
                                if (fieldMapping.getNumberOfDatastoreFields() == 0)
                                {
                                    columnsStr.append("[none]");
                                }
                                StringBuffer datastoreMappingTypes = new StringBuffer();
                                for (int i=0;i<fieldMapping.getNumberOfDatastoreFields();i++)
                                {
                                    if (i > 0)
                                    {
                                        datastoreMappingTypes.append(',');
                                    }
                                    datastoreMappingTypes.append(fieldMapping.getDataStoreMapping(i).getClass().getName());
                                }
                                JPOXLogger.DATASTORE.debug(LOCALISER.msg("057010",
                                    fmd.getFullFieldName(), columnsStr.toString(), fieldMapping.getClass().getName(), datastoreMappingTypes.toString()));
                            }
                        }
                    }
                }
                else
View Full Code Here

                }
                catch (NoTableManagedException ex)
                {
                    //do nothing
                }
                JavaTypeMapping fieldMapping = dba.getMappingManager().getMapping(this, fieldsToAdd[i], dba, clr, JavaTypeMapping.MAPPING_FIELD);
                addFieldMapping(fieldMapping);
                pkMappings[i] = fieldMapping;
            }
        }
        initializeIDMapping();
View Full Code Here

                        {
                            initializeFKMapUniqueConstraints(ownerFmd);
                        }

                        boolean duplicate = false;
                        JavaTypeMapping fkDiscrimMapping = null;
                        JavaTypeMapping orderMapping = null;
                        if (ownerFmd.hasExtension("relation-discriminator-column"))
                        {
                            // Collection has a relation discriminator so we need to share the FK. Check for the required discriminator
                            String colName = ownerFmd.getValueForExtension("relation-discriminator-column");
                            if (colName == null)
                            {
                                // No column defined so use a fallback name
                                colName = "RELATION_DISCRIM";
                            }
                            Set fkDiscrimEntries = getExternalFkDiscriminatorMappings().entrySet();
                            Iterator discrimMappingIter = fkDiscrimEntries.iterator();
                            while (discrimMappingIter.hasNext())
                            {
                                Map.Entry entry = (Map.Entry)discrimMappingIter.next();
                                JavaTypeMapping discrimMapping = (JavaTypeMapping)entry.getValue();
                                String discrimColName = ((ColumnMetaData)discrimMapping.getDataStoreMapping(0).getDatastoreField().getMetaData()).getName();
                                if (discrimColName.equalsIgnoreCase(colName))
                                {
                                    duplicate = true;
                                    fkDiscrimMapping = discrimMapping;
                                    orderMapping = (JavaTypeMapping)getExternalOrderMappings().get(entry.getKey());
                                    break;
                                }
                            }

                            if (!duplicate)
                            {
                                // Create the relation discriminator column since we dont have this discriminator
                                ColumnMetaData colmd = new ColumnMetaData(null, colName);
                                colmd.setAllowsNull(Boolean.TRUE); // Allow for elements not in any discriminated collection
                                fkDiscrimMapping = dba.getMapping(String.class, storeMgr); // Only support String discriminators currently
                                ColumnCreator.createIndexColumn(fkDiscrimMapping, storeMgr, clr, this, colmd, false);
                            }

                            if (fkDiscrimMapping != null)
                            {
                                getExternalFkDiscriminatorMappings().put(ownerFmd, fkDiscrimMapping);
                            }
                        }

                        // Add the order mapping as necessary
                        addOrderMapping(ownerFmd, orderMapping, clr);
                    }
                    else
                    {
                        // Unidirectional (element knows nothing about the owner)
                        String ownerClassName = ownerFmd.getAbstractClassMetaData().getFullClassName();
                        JavaTypeMapping fkMapping = new PersistenceCapableMapping();
                        fkMapping.initialize(dba, ownerClassName);
                        JavaTypeMapping fkDiscrimMapping = null;
                        JavaTypeMapping orderMapping = null;
                        boolean duplicate = false;

                        try
                        {
                            // Get the owner id mapping of the "1" end
                            JavaTypeMapping ownerIdMapping = storeMgr.getDatastoreClass(ownerClassName, clr).getIDMapping();
                            ColumnMetaDataContainer colmdContainer = null;
                            if (ownerFmd.hasCollection() || ownerFmd.hasArray())
                            {
                                // 1-N Collection/array
                                colmdContainer = ownerFmd.getElementMetaData();
                            }
                            else if (ownerFmd.hasMap() && ownerFmd.getKeyMetaData() != null && ownerFmd.getKeyMetaData().getMappedBy() != null)
                            {
                                // 1-N Map with key stored in the value
                                colmdContainer = ownerFmd.getValueMetaData();
                            }
                            else if (ownerFmd.hasMap() && ownerFmd.getValueMetaData() != null && ownerFmd.getValueMetaData().getMappedBy() != null)
                            {
                                // 1-N Map with value stored in the key
                                colmdContainer = ownerFmd.getKeyMetaData();
                            }
                            CorrespondentColumnsMapper correspondentColumnsMapping =
                                new CorrespondentColumnsMapper(colmdContainer, ownerIdMapping, true);
                            int countIdFields = ownerIdMapping.getNumberOfDatastoreFields();
                            for (int i=0; i<countIdFields; i++)
                            {
                                DatastoreMapping refDatastoreMapping = ownerIdMapping.getDataStoreMapping(i);
                                JavaTypeMapping mapping = dba.getMapping(refDatastoreMapping.getJavaTypeMapping().getJavaType(), storeMgr);
                                ColumnMetaData colmd = correspondentColumnsMapping.getColumnMetaDataByIdentifier(((Column)refDatastoreMapping.getDatastoreField()).getIdentifier());
                                if (colmd == null)
                                {
                                    throw new JPOXUserException(LOCALISER.msg("057035",
                                        ((Column)refDatastoreMapping.getDatastoreField()).getIdentifier(), toString())).setFatal();
                                }

                                DatastoreIdentifier identifier = null;
                                IdentifierFactory idFactory = storeMgr.getIdentifierFactory();
                                if (colmd.getName() == null || colmd.getName().length() < 1)
                                {
                                    // No user provided name so generate one
                                    identifier = ((RDBMSIdentifierFactory)idFactory).newForeignKeyFieldIdentifier(ownerFmd,
                                        null, refDatastoreMapping.getDatastoreField().getIdentifier(),
                                        storeMgr.getOMFContext().getTypeManager().isDefaultEmbeddedType(mapping.getJavaType()),
                                        FieldRole.ROLE_OWNER);
                                }
                                else
                                {
                                    // User-defined name
                                    identifier = idFactory.newDatastoreFieldIdentifier(colmd.getName());
                                }
                                DatastoreField refColumn = addDatastoreField(mapping.getJavaType().getName(), identifier, mapping, colmd);
                                ((Column)refDatastoreMapping.getDatastoreField()).copyConfigurationTo(refColumn);

                                if (colmd == null || (colmd != null && !colmd.isAllowsNullSet()) ||
                                    (colmd != null && colmd.isAllowsNullSet() && colmd.isAllowsNull()))
                                {
                                    // User either wants it nullable, or havent specified anything, so make it nullable
                                    refColumn.setNullable();
                                }

                                fkMapping.addDataStoreMapping(getStoreManager().getMappingManager().createDatastoreMapping(mapping, storeMgr, refColumn, refDatastoreMapping.getJavaTypeMapping().getJavaType().getName()));
                                ((PersistenceCapableMapping)fkMapping).addJavaTypeMapping(mapping);
                            }
                        }
                        catch (DuplicateColumnNameException dcne)
                        {
                            // If the user hasnt specified "relation-discriminator-column" here we dont allow the sharing of columns
                            if (!ownerFmd.hasExtension("relation-discriminator-column"))
                            {
                                throw dcne;
                            }

                            // Find the FK using this column and use it instead of creating a new one since we're sharing
                            Iterator fkIter = getExternalFkMappings().entrySet().iterator();
                            fkMapping = null;
                            while (fkIter.hasNext())
                            {
                                Map.Entry entry = (Map.Entry)fkIter.next();
                                JavaTypeMapping existingFkMapping = (JavaTypeMapping)entry.getValue();
                                for (int j=0;j<existingFkMapping.getNumberOfDatastoreFields();j++)
                                {
                                    if (existingFkMapping.getDataStoreMapping(j).getDatastoreField().getIdentifier().toString().equals(dcne.getConflictingColumn().getIdentifier().toString()))
                                    {
                                        // The FK is shared (and so if it is a List we also share the index)
                                        fkMapping = existingFkMapping;
                                        fkDiscrimMapping = (JavaTypeMapping)externalFkDiscriminatorMappings.get(entry.getKey());
                                        orderMapping = (JavaTypeMapping)getExternalOrderMappings().get(entry.getKey());
View Full Code Here

        Set fieldNumbersSet = fieldMappingsMap.keySet();
        Iterator iter = fieldNumbersSet.iterator();
        while (iter.hasNext())
        {
            AbstractMemberMetaData fmd = (AbstractMemberMetaData) iter.next();
            JavaTypeMapping fieldMapping = (JavaTypeMapping)fieldMappingsMap.get(fmd);
            if (fieldMapping instanceof EmbeddedPCMapping)
            {
                // Add indexes for fields of this embedded PC object
                EmbeddedPCMapping embMapping = (EmbeddedPCMapping)fieldMapping;
                for (int i=0;i<embMapping.getNumberOfJavaTypeMappings();i++)
                {
                    JavaTypeMapping embFieldMapping = embMapping.getJavaTypeMapping(i);
                    IndexMetaData imd = embFieldMapping.getFieldMetaData().getIndexMetaData();
                    if (imd != null)
                    {
                        Index index = TableUtils.getIndexForField(this, imd, embFieldMapping);
                        if (index != null)
                        {
                            indices.add(index);
                        }
                    }
                }
            }
            else
            {
                // Add any required index for this field
                IndexMetaData imd = fmd.getIndexMetaData();
                if (imd != null)
                {
                    Index index = TableUtils.getIndexForField(this, imd, fieldMapping);
                    if (index != null)
                    {
                        indices.add(index);
                    }
                }
            }
        }

        // Check if any version column needs indexing
        if (versionMapping != null)
        {
            IndexMetaData idxmd = getVersionMetaData().getIndexMetaData();
            if (idxmd != null)
            {
                Index index = new Index(this,
                    idxmd.isUnique() != null ? idxmd.isUnique().booleanValue() : false,
                    idxmd.getValueForExtension("extended-setting"));
                if (idxmd.getName() != null)
                {
                    index.setName(idxmd.getName());
                }
                int countVersionFields = versionMapping.getNumberOfDatastoreFields();
                for (int i=0; i<countVersionFields; i++)
                {
                    index.addDatastoreField(versionMapping.getDataStoreMapping(i).getDatastoreField());
                }
                indices.add(index);
            }
        }

        // Check if any discriminator column needs indexing
        if (discriminatorMapping != null)
        {
            DiscriminatorMetaData dismd = getDiscriminatorMetaData();
            IndexMetaData idxmd = dismd.getIndexMetaData();
            if (idxmd != null)
            {
                Index index = new Index(this,
                    idxmd.isUnique() != null ? idxmd.isUnique().booleanValue() : false,
                    idxmd.getValueForExtension("extended-setting"));
                if (idxmd.getName() != null)
                {
                    index.setName(idxmd.getName());
                }
                int countDiscrimFields = discriminatorMapping.getNumberOfDatastoreFields();
                for (int i=0; i<countDiscrimFields; i++)
                {
                    index.addDatastoreField(discriminatorMapping.getDataStoreMapping(i).getDatastoreField());
                }
                indices.add(index);
            }
        }

        // Add on any order fields (for lists, arrays, collections) that need indexing
        Set orderMappingsEntries = getExternalOrderMappings().entrySet();
        Iterator orderMappingsEntriesIter = orderMappingsEntries.iterator();
        while (orderMappingsEntriesIter.hasNext())
        {
            Map.Entry entry = (Map.Entry)orderMappingsEntriesIter.next();
            AbstractMemberMetaData fmd = (AbstractMemberMetaData)entry.getKey();
            JavaTypeMapping mapping = (JavaTypeMapping)entry.getValue();
            OrderMetaData omd = fmd.getOrderMetaData();
            if (omd != null && omd.getIndexMetaData() != null)
            {
                Index index = getIndexForIndexMetaDataAndMapping(omd.getIndexMetaData(), mapping);
                if (index != null)
View Full Code Here

TOP

Related Classes of org.jpox.store.mapped.mapping.JavaTypeMapping

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.