Search in sources :

Example 1 with DetectedDbEntity

use of org.apache.cayenne.map.DetectedDbEntity in project cayenne by apache.

the class DbAttributeMerger method createTokensForMissingImported.

/**
 * Add column to db
 * @param original attribute found in model but missing in db
 */
@Override
Collection<MergerToken> createTokensForMissingImported(DbAttribute original) {
    DbEntity originalDbEntity = original.getEntity();
    List<MergerToken> tokens = new LinkedList<>();
    tokens.add(getTokenFactory().createAddColumnToDb(originalDbEntity, original));
    // Create not null check
    if (original.isMandatory()) {
        if (valueForNull.hasValueFor(originalDbEntity, original)) {
            tokens.add(getTokenFactory().createSetValueForNullToDb(originalDbEntity, original, valueForNull));
        }
        tokens.add(getTokenFactory().createSetNotNullToDb(originalDbEntity, original));
    }
    if (original.isPrimaryKey() && originalDbEntity instanceof DetectedDbEntity && "VIEW".equals(((DetectedDbEntity) originalDbEntity).getType())) {
        // Views doesn't has PKs in a database, but if the user selects some PKs in a model, we put these keys.
        return null;
    }
    return tokens;
}
Also used : DetectedDbEntity(org.apache.cayenne.map.DetectedDbEntity) DbEntity(org.apache.cayenne.map.DbEntity) MergerToken(org.apache.cayenne.dbsync.merge.token.MergerToken) DetectedDbEntity(org.apache.cayenne.map.DetectedDbEntity) LinkedList(java.util.LinkedList)

Example 2 with DetectedDbEntity

use of org.apache.cayenne.map.DetectedDbEntity in project cayenne by apache.

the class DbLoadDataStore method addDbEntitySafe.

DbEntity addDbEntitySafe(DbEntity entity) {
    if (!(entity instanceof DetectedDbEntity)) {
        throw new IllegalArgumentException("Only DetectedDbEntity can be inserted in this map");
    }
    DbEntity old = getDbEntity(entity.getName());
    if (old != null) {
        removeDbEntity(old.getName());
    }
    addDbEntity(entity);
    return old;
}
Also used : DetectedDbEntity(org.apache.cayenne.map.DetectedDbEntity) DbEntity(org.apache.cayenne.map.DbEntity) DetectedDbEntity(org.apache.cayenne.map.DetectedDbEntity)

Example 3 with DetectedDbEntity

use of org.apache.cayenne.map.DetectedDbEntity in project cayenne by apache.

the class EntityLoader method addDbEntityToMap.

private void addDbEntityToMap(DetectedDbEntity table, DbLoadDataStore map) {
    DbEntity oldEnt = map.addDbEntitySafe(table);
    if (oldEnt != null) {
        LOGGER.debug("Overwrite DbEntity: " + oldEnt.getName());
        delegate.dbEntityRemoved(oldEnt);
    }
    delegate.dbEntityAdded(table);
}
Also used : DetectedDbEntity(org.apache.cayenne.map.DetectedDbEntity) DbEntity(org.apache.cayenne.map.DbEntity)

Example 4 with DetectedDbEntity

use of org.apache.cayenne.map.DetectedDbEntity in project cayenne by apache.

the class EntityLoader method processResultSetRow.

@Override
protected void processResultSetRow(CatalogFilter catalog, SchemaFilter schema, DbLoadDataStore map, ResultSet rs) throws SQLException {
    String name = rs.getString("TABLE_NAME");
    String catalogName = rs.getString("TABLE_CAT");
    String schemaName = rs.getString("TABLE_SCHEM");
    String type = rs.getString("TABLE_TYPE");
    // So skip them all together (it's about "name == null" check)
    if (name == null || !schema.tables.isIncludeTable(name)) {
        return;
    }
    if (!(catalog.name == null || catalog.name.equals(catalogName)) || !(schema.name == null || schema.name.equals(schemaName))) {
        LOGGER.error(catalogName + "." + schema + "." + schemaName + " wrongly loaded for catalog/schema : " + catalog.name + "." + schema.name);
        return;
    }
    DetectedDbEntity table = new DetectedDbEntity(name);
    table.setCatalog(catalogName);
    table.setSchema(schemaName);
    table.setType(type);
    addDbEntityToMap(table, map);
}
Also used : DetectedDbEntity(org.apache.cayenne.map.DetectedDbEntity)

Example 5 with DetectedDbEntity

use of org.apache.cayenne.map.DetectedDbEntity in project cayenne by apache.

the class PrimaryKeyLoader method processResultSet.

@Override
void processResultSet(DbEntity dbEntity, DbLoadDataStore map, ResultSet rs) throws SQLException {
    String columnName = rs.getString("COLUMN_NAME");
    DbAttribute attribute = dbEntity.getAttribute(columnName);
    if (attribute == null) {
        // why an attribute might be null is not quiet clear
        // but there is a bug report 731406 indicating that it is
        // possible so just print the warning, and ignore
        LOGGER.warn("Can't locate attribute for primary key: " + columnName);
        return;
    }
    attribute.setPrimaryKey(true);
    ((DetectedDbEntity) dbEntity).setPrimaryKeyName(rs.getString("PK_NAME"));
}
Also used : DbAttribute(org.apache.cayenne.map.DbAttribute) DetectedDbEntity(org.apache.cayenne.map.DetectedDbEntity)

Aggregations

DetectedDbEntity (org.apache.cayenne.map.DetectedDbEntity)5 DbEntity (org.apache.cayenne.map.DbEntity)3 LinkedList (java.util.LinkedList)1 MergerToken (org.apache.cayenne.dbsync.merge.token.MergerToken)1 DbAttribute (org.apache.cayenne.map.DbAttribute)1