All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mysema.query.jpa.AbstractSQLQuery Maven / Gradle / Ivy

/*
 * Copyright (c) 2010 Mysema Ltd.
 * All rights reserved.
 *
 */
package com.mysema.query.jpa;

import com.mysema.query.QueryMetadata;
import com.mysema.query.sql.ForeignKey;
import com.mysema.query.sql.RelationalPath;
import com.mysema.query.support.ProjectableQuery;
import com.mysema.query.support.QueryMixin;
import com.mysema.query.types.Expression;
import com.mysema.query.types.Ops;
import com.mysema.query.types.Path;
import com.mysema.query.types.Predicate;
import com.mysema.query.types.SubQueryExpression;
import com.mysema.query.types.expr.NumberExpression;
import com.mysema.query.types.expr.NumberOperation;

/**
 * Abstract super class for SQLQuery implementation for JPA and Hibernate
 * 
 * @author tiwe
 *
 * @param 
 */
public abstract class AbstractSQLQuery> extends ProjectableQuery{

    private static final NumberExpression COUNT_ALL_AGG_EXPR = NumberOperation.create(Integer.class, Ops.AggOps.COUNT_ALL_AGG);

    @SuppressWarnings("unchecked")
    public AbstractSQLQuery(QueryMetadata metadata) {
        super(new QueryMixin(metadata));
        this.queryMixin.setSelf((T)this);
    }

    @Override
    public long count() {
        return uniqueResult(COUNT_ALL_AGG_EXPR);
    }

    public T from(Expression... args) {
        return queryMixin.from(args);
    }

    public  T fullJoin(ForeignKey key, RelationalPath entity) {
        return queryMixin.innerJoin(entity).on(key.on(entity));
    }

    public T fullJoin(RelationalPath o) {
        return queryMixin.fullJoin(o);
    }

    public T fullJoin(SubQueryExpression o, Path alias) {
        return queryMixin.fullJoin(o, alias);
    }

    public QueryMetadata getMetadata(){
        return queryMixin.getMetadata();
    }

    public  T innerJoin(ForeignKey key, RelationalPath entity) {
        return queryMixin.innerJoin(entity).on(key.on(entity));
    }

    public T innerJoin(RelationalPath o) {
        return queryMixin.innerJoin(o);
    }

    public T innerJoin(SubQueryExpression o, Path alias) {
        return queryMixin.innerJoin(o, alias);
    }

    public  T join(ForeignKey key, RelationalPath entity) {
        return queryMixin.innerJoin(entity).on(key.on(entity));
    }

    public T join(RelationalPath o) {
        return queryMixin.join(o);
    }

    public T join(SubQueryExpression o, Path alias) {
        return queryMixin.join(o, alias);
    }

    public  T leftJoin(ForeignKey key, RelationalPath entity) {
        return queryMixin.innerJoin(entity).on(key.on(entity));
    }

    public T leftJoin(RelationalPath o) {
        return queryMixin.leftJoin(o);
    }

    public T leftJoin(SubQueryExpression o, Path alias) {
        return queryMixin.leftJoin(o, alias);
    }

    public T on(Predicate... conditions) {
        return queryMixin.on(conditions);
    }

    public  T rightJoin(ForeignKey key, RelationalPath entity) {
        return queryMixin.innerJoin(entity).on(key.on(entity));
    }

    public T rightJoin(RelationalPath o) {
        return queryMixin.rightJoin(o);
    }

    public T rightJoin(SubQueryExpression o, Path alias) {
        return queryMixin.rightJoin(o, alias);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy