Search in sources :

Example 41 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class OrderingTranslator method doAppendPart.

/**
 * Translates query Ordering list to SQL ORDER BY clause. Ordering list is
 * obtained from <code>queryAssembler</code>'s query object. In a process of
 * building of ORDER BY clause, <code>queryAssembler</code> is notified when
 * a join needs to be added.
 *
 * @since 3.0
 */
@Override
protected void doAppendPart() {
    Query q = queryAssembler.getQuery();
    // only select queries can have ordering...
    if (q == null || !(q instanceof SelectQuery)) {
        return;
    }
    Iterator<Ordering> it = ((SelectQuery<?>) q).getOrderings().iterator();
    StringBuilder mainBuffer = this.out;
    try {
        while (it.hasNext()) {
            Ordering ord = it.next();
            // reset buffer to collect SQL for the single column, that we'll
            // be reusing
            this.out = new StringBuilder();
            if (ord.isCaseInsensitive()) {
                out.append("UPPER(");
            }
            Expression exp = ord.getSortSpec();
            if (exp.getType() == Expression.OBJ_PATH) {
                appendObjPath(exp);
            } else if (exp.getType() == Expression.DB_PATH) {
                appendDbPath(exp);
            } else if (exp.getType() == Expression.FUNCTION_CALL) {
                appendFunction(exp);
            } else {
                throw new CayenneRuntimeException("Unsupported ordering expression: %s", exp);
            }
            // Close UPPER() modifier
            if (ord.isCaseInsensitive()) {
                out.append(")");
            }
            String columnSQL = out.toString();
            mainBuffer.append(columnSQL);
            orderByColumnList.add(columnSQL);
            // "ASC" is a noop, omit it from the query
            if (!ord.isAscending()) {
                mainBuffer.append(" DESC");
            }
            if (it.hasNext()) {
                mainBuffer.append(", ");
            }
        }
    } finally {
        this.out = mainBuffer;
    }
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) SelectQuery(org.apache.cayenne.query.SelectQuery) Query(org.apache.cayenne.query.Query) Expression(org.apache.cayenne.exp.Expression) Ordering(org.apache.cayenne.query.Ordering) CayenneRuntimeException(org.apache.cayenne.CayenneRuntimeException)

Example 42 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class QualifierTranslator method extractQualifier.

protected Expression extractQualifier() {
    // if additional qualifier is set, use it
    if (this.qualifier != null) {
        return this.qualifier;
    }
    Query q = queryAssembler.getQuery();
    Expression qualifier = ((SelectQuery<?>) q).getQualifier();
    // append Entity qualifiers, taking inheritance into account
    ObjEntity entity = getObjEntity();
    if (entity != null) {
        ClassDescriptor descriptor = queryAssembler.getEntityResolver().getClassDescriptor(entity.getName());
        Expression entityQualifier = descriptor.getEntityInheritanceTree().qualifierForEntityAndSubclasses();
        if (entityQualifier != null) {
            qualifier = (qualifier != null) ? qualifier.andExp(entityQualifier) : entityQualifier;
        }
    }
    // Attaching root Db entity's qualifier
    if (getDbEntity() != null) {
        Expression dbQualifier = getDbEntity().getQualifier();
        if (dbQualifier != null) {
            dbQualifier = dbQualifier.transform(new DbEntityQualifierTransformer());
            qualifier = qualifier == null ? dbQualifier : qualifier.andExp(dbQualifier);
        }
    }
    return qualifier;
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) ObjEntity(org.apache.cayenne.map.ObjEntity) SelectQuery(org.apache.cayenne.query.SelectQuery) Query(org.apache.cayenne.query.Query) ClassDescriptor(org.apache.cayenne.reflect.ClassDescriptor) Expression(org.apache.cayenne.exp.Expression)

Example 43 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class DefaultOperationObserver method printExceptions.

/**
 * Prints the information about query and global exceptions.
 */
public void printExceptions(PrintWriter out) {
    if (globalExceptions.size() > 0) {
        if (globalExceptions.size() == 1) {
            out.println("Global Exception:");
        } else {
            out.println("Global Exceptions:");
        }
        for (final Throwable th : globalExceptions) {
            th.printStackTrace(out);
        }
    }
    if (queryExceptions.size() > 0) {
        if (queryExceptions.size() == 1) {
            out.println("Query Exception:");
        } else {
            out.println("Query Exceptions:");
        }
        for (final Query query : queryExceptions.keySet()) {
            Throwable th = queryExceptions.get(query);
            th.printStackTrace(out);
        }
    }
}
Also used : Query(org.apache.cayenne.query.Query)

Aggregations

Query (org.apache.cayenne.query.Query)43 Test (org.junit.Test)25 SelectQuery (org.apache.cayenne.query.SelectQuery)15 SQLTemplate (org.apache.cayenne.query.SQLTemplate)14 ArrayList (java.util.ArrayList)10 CayenneRuntimeException (org.apache.cayenne.CayenneRuntimeException)8 DataRow (org.apache.cayenne.DataRow)6 QueryResponse (org.apache.cayenne.QueryResponse)6 MockQuery (org.apache.cayenne.query.MockQuery)6 List (java.util.List)5 ObjectIdQuery (org.apache.cayenne.query.ObjectIdQuery)5 Collection (java.util.Collection)4 HashMap (java.util.HashMap)4 ObjectContext (org.apache.cayenne.ObjectContext)4 ObjectId (org.apache.cayenne.ObjectId)4 Persistent (org.apache.cayenne.Persistent)4 MockOperationObserver (org.apache.cayenne.access.MockOperationObserver)4 Map (java.util.Map)3 DbEntity (org.apache.cayenne.map.DbEntity)3 EntityResolver (org.apache.cayenne.map.EntityResolver)3