use of org.apache.cayenne.dba.QuotingStrategy in project cayenne by apache.
the class SetPrimaryKeyToDb method appendAddNewPrimaryKeySQL.
protected void appendAddNewPrimaryKeySQL(DbAdapter adapter, List<String> sqls) {
QuotingStrategy quotingStrategy = adapter.getQuotingStrategy();
StringBuilder sql = new StringBuilder();
sql.append("ALTER TABLE ");
sql.append(quotingStrategy.quotedFullyQualifiedName(getEntity()));
sql.append(" ADD PRIMARY KEY (");
for (Iterator<DbAttribute> it = primaryKeyNew.iterator(); it.hasNext(); ) {
sql.append(quotingStrategy.quotedName(it.next()));
if (it.hasNext()) {
sql.append(", ");
}
}
sql.append(")");
sqls.add(sql.toString());
}
use of org.apache.cayenne.dba.QuotingStrategy in project cayenne by apache.
the class InsertBatchTranslator method createSql.
@Override
protected String createSql() {
List<DbAttribute> dbAttributes = query.getDbAttributes();
QuotingStrategy strategy = adapter.getQuotingStrategy();
StringBuilder buffer = new StringBuilder("INSERT INTO ");
buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity()));
buffer.append(" (");
int columnCount = 0;
for (DbAttribute attribute : dbAttributes) {
if (includeInBatch(attribute)) {
if (columnCount > 0) {
buffer.append(", ");
}
buffer.append(strategy.quotedName(attribute));
columnCount++;
}
}
buffer.append(") VALUES (");
for (int i = 0; i < columnCount; i++) {
if (i > 0) {
buffer.append(", ");
}
buffer.append('?');
}
buffer.append(')');
return buffer.toString();
}
use of org.apache.cayenne.dba.QuotingStrategy in project cayenne by apache.
the class SoftDeleteBatchTranslator method createSql.
@Override
protected String createSql() {
QuotingStrategy strategy = adapter.getQuotingStrategy();
StringBuilder buffer = new StringBuilder("UPDATE ");
buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity()));
buffer.append(" SET ").append(strategy.quotedIdentifier(query.getDbEntity(), deletedFieldName)).append(" = ?");
applyQualifier(buffer);
return buffer.toString();
}
use of org.apache.cayenne.dba.QuotingStrategy in project cayenne by apache.
the class EJBQLPathAnaliserTranslator method visitMemberOf.
@Override
public boolean visitMemberOf(EJBQLExpression expression) {
if (expression.getChildrenCount() != 2) {
throw new EJBQLException("MEMBER OF must have exactly two children, got: " + expression.getChildrenCount());
}
if (!(expression.getChild(1) instanceof EJBQLPath)) {
throw new EJBQLException("Second child of the MEMBER OF must be a collection path, got: " + expression.getChild(1));
}
QuotingStrategy quoter = context.getQuotingStrategy();
EJBQLPath path = (EJBQLPath) expression.getChild(1);
// make sure the ID for the path does not overlap with other condition
// joins...
String id = path.getAbsolutePath();
String correlatedEntityId = path.getId();
ClassDescriptor correlatedEntityDescriptor = context.getEntityDescriptor(correlatedEntityId);
String correlatedTableName = quoter.quotedFullyQualifiedName(correlatedEntityDescriptor.getEntity().getDbEntity());
String correlatedTableAlias = context.getTableAlias(correlatedEntityId, correlatedTableName);
String subqueryId = context.createIdAlias(id);
ClassDescriptor targetDescriptor = context.getEntityDescriptor(subqueryId);
if (expression.isNegated()) {
context.append(" NOT");
}
context.append(" EXISTS (SELECT 1 FROM ");
String subqueryTableName = quoter.quotedFullyQualifiedName(targetDescriptor.getEntity().getDbEntity());
String subqueryRootAlias = context.getTableAlias(subqueryId, subqueryTableName);
ObjRelationship relationship = correlatedEntityDescriptor.getEntity().getRelationship(path.getRelativePath());
if (relationship.getDbRelationshipPath().contains(".")) {
// if the DbRelationshipPath contains '.', the relationship is
// flattened
subqueryRootAlias = processFlattenedRelationShip(subqueryRootAlias, relationship);
} else {
// not using "AS" to separate table name and alias name - OpenBase
// doesn't
// support "AS", and the rest of the databases do not care
context.append(subqueryTableName).append(' ').append(subqueryRootAlias);
}
context.append(" WHERE");
DbRelationship correlatedJoinRelationship = context.getIncomingRelationships(new EJBQLTableId(id)).get(0);
for (DbJoin join : correlatedJoinRelationship.getJoins()) {
context.append(' ').append(subqueryRootAlias).append('.').append(join.getTargetName()).append(" = ");
context.append(correlatedTableAlias).append('.').append(quoter.quotedSourceName(join));
context.append(" AND");
}
// translate subquery_root_id = LHS_of_memberof
EJBQLEquals equals = new EJBQLEquals(-1);
EJBQLIdentificationVariable identifier = new EJBQLIdentificationVariable(-1);
identifier.setText(subqueryId);
equals.jjtAddChild(identifier, 0);
equals.jjtAddChild((Node) expression.getChild(0), 1);
equals.visit(this);
context.append(")");
return false;
}
use of org.apache.cayenne.dba.QuotingStrategy in project cayenne by apache.
the class EJBQLPathAnaliserTranslator method processFlattenedRelationShip.
private String processFlattenedRelationShip(String subqueryRootAlias, ObjRelationship relationship) {
QuotingStrategy quoter = context.getQuotingStrategy();
List<DbRelationship> dbRelationships = relationship.getDbRelationships();
// relation
for (int i = dbRelationships.size() - 1; i > 0; i--) {
DbRelationship dbRelationship = dbRelationships.get(i);
String subqueryTargetTableName = quoter.quotedFullyQualifiedName((DbEntity) dbRelationship.getTargetEntity());
String subqueryTargetAlias;
if (i == dbRelationships.size() - 1) {
subqueryTargetAlias = subqueryRootAlias;
context.append(subqueryTargetTableName).append(' ').append(subqueryTargetAlias);
} else {
subqueryTargetAlias = context.getTableAlias(subqueryTargetTableName, subqueryTargetTableName);
}
context.append(" JOIN ");
String subquerySourceTableName = quoter.quotedFullyQualifiedName((DbEntity) dbRelationship.getSourceEntity());
String subquerySourceAlias = context.getTableAlias(subquerySourceTableName, subquerySourceTableName);
context.append(subquerySourceTableName).append(' ').append(subquerySourceAlias);
context.append(" ON (");
List<DbJoin> joins = dbRelationship.getJoins();
Iterator<DbJoin> it = joins.iterator();
while (it.hasNext()) {
DbJoin join = it.next();
context.append(' ').append(subqueryTargetAlias).append('.').append(join.getTargetName()).append(" = ");
context.append(subquerySourceAlias).append('.').append(join.getSourceName());
if (it.hasNext()) {
context.append(" AND");
}
}
context.append(" )");
subqueryRootAlias = subquerySourceAlias;
}
return subqueryRootAlias;
}
Aggregations