Search in sources :

Example 11 with Index

use of org.datanucleus.store.rdbms.key.Index in project datanucleus-rdbms by datanucleus.

the class TableImpl method isIndexReallyNeeded.

/**
 * Utility to check if an index is necessary.
 * @param requiredIdx The index
 * @param actualIndices The actual indexes
 * @return Whether the index is needed (i.e not present in the actual indexes)
 */
private boolean isIndexReallyNeeded(Index requiredIdx, Collection actualIndices) {
    Iterator i = actualIndices.iterator();
    if (requiredIdx.getName() != null) {
        // Compare the index name since it is defined
        IdentifierFactory idFactory = requiredIdx.getTable().getStoreManager().getIdentifierFactory();
        // Allow for user input in incorrect case
        String reqdName = idFactory.getIdentifierInAdapterCase(requiredIdx.getName());
        while (i.hasNext()) {
            Index actualIdx = (Index) i.next();
            // Allow for DB returning no quotes
            String actualName = idFactory.getIdentifierInAdapterCase(actualIdx.getName());
            if (actualName.equals(reqdName) && actualIdx.getTable().getIdentifier().toString().equals(requiredIdx.getTable().getIdentifier().toString())) {
                // There already is an index of that name for the same table in the actual list so not needed
                return false;
            }
        }
    } else {
        // Compare against the index table and columns since we have no index name yet
        while (i.hasNext()) {
            Index actualIdx = (Index) i.next();
            if (actualIdx.toString().equals(requiredIdx.toString()) && actualIdx.getTable().getIdentifier().toString().equals(requiredIdx.getTable().getIdentifier().toString())) {
                // There already is an index of that name for the same table in the actual list so not needed
                return false;
            }
        }
    }
    return true;
}
Also used : Iterator(java.util.Iterator) Index(org.datanucleus.store.rdbms.key.Index) IdentifierFactory(org.datanucleus.store.rdbms.identifier.IdentifierFactory)

Example 12 with Index

use of org.datanucleus.store.rdbms.key.Index in project datanucleus-rdbms by datanucleus.

the class SAPDBAdapter method getAddCandidateKeyStatement.

public String getAddCandidateKeyStatement(CandidateKey ck, IdentifierFactory factory) {
    Index idx = new Index(ck);
    idx.setName(ck.getName());
    return getCreateIndexStatement(idx, factory);
}
Also used : Index(org.datanucleus.store.rdbms.key.Index)

Example 13 with Index

use of org.datanucleus.store.rdbms.key.Index in project datanucleus-rdbms by datanucleus.

the class TimesTenAdapter method getAddCandidateKeyStatement.

/**
 * Returns the appropriate SQL to add a candidate key to its table.
 * It should return something like:
 * <pre>
 * ALTER TABLE FOO ADD CONSTRAINT FOO_CK (BAZ)
 * ALTER TABLE FOO ADD (BAZ)
 * </pre>
 *
 * @param ck An object describing the candidate key.
 * @param factory Identifier factory
 * @return The text of the SQL statement.
 */
public String getAddCandidateKeyStatement(CandidateKey ck, IdentifierFactory factory) {
    Index idx = new Index(ck);
    idx.setName(ck.getName());
    return getCreateIndexStatement(idx, factory);
}
Also used : Index(org.datanucleus.store.rdbms.key.Index)

Aggregations

Index (org.datanucleus.store.rdbms.key.Index)13 HashMap (java.util.HashMap)4 HashSet (java.util.HashSet)4 DatastoreIdentifier (org.datanucleus.store.rdbms.identifier.DatastoreIdentifier)4 IdentifierFactory (org.datanucleus.store.rdbms.identifier.IdentifierFactory)4 JavaTypeMapping (org.datanucleus.store.rdbms.mapping.java.JavaTypeMapping)4 Iterator (java.util.Iterator)3 IndexMetaData (org.datanucleus.metadata.IndexMetaData)3 Map (java.util.Map)2 Set (java.util.Set)2 AbstractMemberMetaData (org.datanucleus.metadata.AbstractMemberMetaData)2 PrimaryKey (org.datanucleus.store.rdbms.key.PrimaryKey)2 PersistableMapping (org.datanucleus.store.rdbms.mapping.java.PersistableMapping)2 NucleusUserException (org.datanucleus.exceptions.NucleusUserException)1 AbstractClassMetaData (org.datanucleus.metadata.AbstractClassMetaData)1 DiscriminatorMetaData (org.datanucleus.metadata.DiscriminatorMetaData)1 ElementMetaData (org.datanucleus.metadata.ElementMetaData)1 ForeignKeyMetaData (org.datanucleus.metadata.ForeignKeyMetaData)1 KeyMetaData (org.datanucleus.metadata.KeyMetaData)1 OrderMetaData (org.datanucleus.metadata.OrderMetaData)1