Search in sources :

Example 36 with QuotingStrategy

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());
}
Also used : DbAttribute(org.apache.cayenne.map.DbAttribute) QuotingStrategy(org.apache.cayenne.dba.QuotingStrategy)

Example 37 with QuotingStrategy

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();
}
Also used : DbAttribute(org.apache.cayenne.map.DbAttribute) QuotingStrategy(org.apache.cayenne.dba.QuotingStrategy)

Example 38 with QuotingStrategy

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();
}
Also used : QuotingStrategy(org.apache.cayenne.dba.QuotingStrategy)

Example 39 with QuotingStrategy

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;
}
Also used : ObjRelationship(org.apache.cayenne.map.ObjRelationship) EJBQLIdentificationVariable(org.apache.cayenne.ejbql.parser.EJBQLIdentificationVariable) ClassDescriptor(org.apache.cayenne.reflect.ClassDescriptor) DbRelationship(org.apache.cayenne.map.DbRelationship) EJBQLException(org.apache.cayenne.ejbql.EJBQLException) DbJoin(org.apache.cayenne.map.DbJoin) QuotingStrategy(org.apache.cayenne.dba.QuotingStrategy) EJBQLPath(org.apache.cayenne.ejbql.parser.EJBQLPath) EJBQLEquals(org.apache.cayenne.ejbql.parser.EJBQLEquals)

Example 40 with QuotingStrategy

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;
}
Also used : DbRelationship(org.apache.cayenne.map.DbRelationship) DbJoin(org.apache.cayenne.map.DbJoin) QuotingStrategy(org.apache.cayenne.dba.QuotingStrategy)

Aggregations

QuotingStrategy (org.apache.cayenne.dba.QuotingStrategy)42 DbAdapter (org.apache.cayenne.dba.DbAdapter)11 DbAttribute (org.apache.cayenne.map.DbAttribute)11 DbEntity (org.apache.cayenne.map.DbEntity)5 DbJoin (org.apache.cayenne.map.DbJoin)5 DbRelationship (org.apache.cayenne.map.DbRelationship)5 CayenneRuntimeException (org.apache.cayenne.CayenneRuntimeException)4 SetAllowNullToDb (org.apache.cayenne.dbsync.merge.token.db.SetAllowNullToDb)3 SetNotNullToDb (org.apache.cayenne.dbsync.merge.token.db.SetNotNullToDb)3 EJBQLException (org.apache.cayenne.ejbql.EJBQLException)3 ArrayList (java.util.ArrayList)2 Collection (java.util.Collection)2 HashMap (java.util.HashMap)2 List (java.util.List)2 DropColumnToDb (org.apache.cayenne.dbsync.merge.token.db.DropColumnToDb)2 EJBQLPath (org.apache.cayenne.ejbql.parser.EJBQLPath)2 DataMap (org.apache.cayenne.map.DataMap)2 ObjRelationship (org.apache.cayenne.map.ObjRelationship)2 UpdateBatchQuery (org.apache.cayenne.query.UpdateBatchQuery)2 ClassDescriptor (org.apache.cayenne.reflect.ClassDescriptor)2