use of org.apache.cayenne.dba.DbAdapter in project cayenne by apache.
the class IngresMergerTokenFactory method createAddRelationshipToDb.
@Override
public MergerToken createAddRelationshipToDb(DbEntity entity, final DbRelationship rel) {
return new AddRelationshipToDb(entity, rel) {
@Override
public List<String> createSql(DbAdapter adapter) {
if (!rel.isToMany() && rel.isToPK() && !rel.isToDependentPK()) {
DbEntity source = (DbEntity) rel.getSourceEntity();
QuotingStrategy context = adapter.getQuotingStrategy();
StringBuilder buf = new StringBuilder();
StringBuilder refBuf = new StringBuilder();
buf.append("ALTER TABLE ");
buf.append(context.quotedFullyQualifiedName(source));
// requires the ADD CONSTRAINT statement
buf.append(" ADD CONSTRAINT ");
String name = "U_" + rel.getSourceEntity().getName() + "_" + (long) (System.currentTimeMillis() / (Math.random() * 100000));
buf.append(context.quotedIdentifier(rel.getSourceEntity(), name));
buf.append(" FOREIGN KEY (");
boolean first = true;
for (DbJoin join : rel.getJoins()) {
if (!first) {
buf.append(", ");
refBuf.append(", ");
} else {
first = false;
}
buf.append(context.quotedSourceName(join));
refBuf.append(context.quotedTargetName(join));
}
buf.append(") REFERENCES ");
buf.append(context.quotedFullyQualifiedName((DbEntity) rel.getTargetEntity()));
buf.append(" (");
buf.append(refBuf.toString());
buf.append(')');
// also make sure we delete dependent FKs
buf.append(" ON DELETE CASCADE");
String fksql = buf.toString();
if (fksql != null) {
return Collections.singletonList(fksql);
}
}
return Collections.emptyList();
}
};
}
use of org.apache.cayenne.dba.DbAdapter in project cayenne by apache.
the class IngresMergerTokenFactory method createSetAllowNullToDb.
@Override
public MergerToken createSetAllowNullToDb(DbEntity entity, DbAttribute column) {
return new SetAllowNullToDb(entity, column) {
@Override
public List<String> createSql(DbAdapter adapter) {
StringBuilder sqlBuffer = new StringBuilder();
QuotingStrategy context = adapter.getQuotingStrategy();
sqlBuffer.append("ALTER TABLE ");
sqlBuffer.append(context.quotedFullyQualifiedName(getEntity()));
sqlBuffer.append(" ALTER COLUMN ");
sqlBuffer.append(context.quotedName(getColumn()));
sqlBuffer.append(" ");
sqlBuffer.append(adapter.externalTypesForJdbcType(getColumn().getType())[0]);
if (adapter.typeSupportsLength(getColumn().getType()) && getColumn().getMaxLength() > 0) {
sqlBuffer.append("(");
sqlBuffer.append(getColumn().getMaxLength());
sqlBuffer.append(")");
}
sqlBuffer.append(" WITH NULL");
return Collections.singletonList(sqlBuffer.toString());
}
};
}
use of org.apache.cayenne.dba.DbAdapter in project cayenne by apache.
the class MySQLMergerTokenFactory method createSetAllowNullToDb.
@Override
public MergerToken createSetAllowNullToDb(final DbEntity entity, final DbAttribute column) {
return new SetAllowNullToDb(entity, column) {
@Override
public List<String> createSql(DbAdapter adapter) {
StringBuffer sqlBuffer = new StringBuffer();
QuotingStrategy context = adapter.getQuotingStrategy();
sqlBuffer.append("ALTER TABLE ");
sqlBuffer.append(context.quotedFullyQualifiedName(getEntity()));
sqlBuffer.append(" CHANGE ");
sqlBuffer.append(context.quotedName(getColumn()));
sqlBuffer.append(" ");
adapter.createTableAppendColumn(sqlBuffer, column);
return Collections.singletonList(sqlBuffer.toString());
}
};
}
use of org.apache.cayenne.dba.DbAdapter in project cayenne by apache.
the class MySQLMergerTokenFactory method createDropRelationshipToDb.
@Override
public MergerToken createDropRelationshipToDb(final DbEntity entity, DbRelationship rel) {
return new DropRelationshipToDb(entity, rel) {
@Override
public List<String> createSql(DbAdapter adapter) {
String fkName = getFkName();
if (fkName == null) {
return Collections.emptyList();
}
QuotingStrategy context = adapter.getQuotingStrategy();
// http://dev.mysql.com/tech-resources/articles/mysql-cluster-50.html
return Collections.singletonList("ALTER TABLE " + context.quotedFullyQualifiedName(entity) + " DROP FOREIGN KEY " + fkName);
}
};
}
use of org.apache.cayenne.dba.DbAdapter in project cayenne by apache.
the class SybaseMergerTokenFactory method createDropColumnToDb.
/**
* @since 3.0
*/
@Override
public MergerToken createDropColumnToDb(DbEntity entity, DbAttribute column) {
return new DropColumnToDb(entity, column) {
@Override
public List<String> createSql(DbAdapter adapter) {
StringBuilder sqlBuffer = new StringBuilder();
QuotingStrategy context = adapter.getQuotingStrategy();
sqlBuffer.append("ALTER TABLE ");
sqlBuffer.append(context.quotedFullyQualifiedName(getEntity()));
sqlBuffer.append(" DROP ");
sqlBuffer.append(context.quotedName(getColumn()));
return Collections.singletonList(sqlBuffer.toString());
}
};
}
Aggregations