Package org.apache.ojb.broker.query

Examples of org.apache.ojb.broker.query.ReportQueryByCriteria


   */
    public void testReportQueryGroupByExtents1()
    {
        Criteria crit = new Criteria();
        Collection results = new Vector();
        ReportQueryByCriteria q = QueryFactory.newReportQuery(Article.class, crit);
        q.setAttributes(new String[] { "productGroup.groupName", "sum(stock)", "sum(price)" });
        q.addGroupBy("productGroup.groupName");

        Iterator iter = broker.getReportQueryIteratorByQuery(q);
       
//        SELECT  A1.KategorieName,sum(A0.Lagerbestand),sum(A0.Einzelpreis)
//        FROM artikel A0
View Full Code Here


    public void testNestedJoins()
    {
        ArrayList list = new java.util.ArrayList();

        Criteria crit = new Criteria();
        ReportQueryByCriteria q = QueryFactory.newReportQuery(Person.class, crit, true);

        q.setAttributes(new String[] { "roles.roleName", "roles.project.title", "firstname", });

        Iterator iter = broker.getReportQueryIteratorByQuery(q);
        while (iter.hasNext())
        {
            list.add(iter.next());
View Full Code Here

    public void testMultipleJoins()
    {
        ArrayList list = new java.util.ArrayList();

        Criteria crit = new Criteria();
        ReportQueryByCriteria q = QueryFactory.newReportQuery(Role.class, crit, true);

        q.setAttributes(new String[] { "roleName", "project.title", "person.firstname", });

        Iterator iter = broker.getReportQueryIteratorByQuery(q);
        while (iter.hasNext())
        {
            list.add(iter.next());
View Full Code Here

   */
    public void tesXNestedJoins2()
    {
        ArrayList list = new ArrayList();
        Criteria crit = new Criteria();
        ReportQueryByCriteria q = QueryFactory.newReportQuery(Task.class, crit);

        q.setAttributes(new String[] { "role.roleName", "role.project.title", "role.person.firstname", });

        Iterator iter = broker.getReportQueryIteratorByQuery(q);
        while (iter.hasNext())
        {
            list.add(iter.next());
View Full Code Here

        ArrayList list = new ArrayList();
        Criteria crit = new Criteria();
        crit.addEqualTo("groupId", new Integer(5));

        ReportQueryByCriteria q = QueryFactory.newReportQuery(ProductGroupWithAbstractArticles.class, crit, true);
        q.setAttributes(new String[] { "groupId", "groupName", "allArticlesInGroup.articleId", "allArticlesInGroup.articleName" });

        Iterator iter = broker.getReportQueryIteratorByQuery(q);
        while (iter.hasNext())
        {
            list.add(iter.next());
View Full Code Here

        ArrayList list = new java.util.ArrayList();

        Criteria crit = new Criteria();
        crit.addGreaterOrEqualThan("allArticlesInGroup.articleId", new Integer(75));

        ReportQueryByCriteria q = QueryFactory.newReportQuery(ProductGroup.class, crit, true);
        q.setAttributes(new String[] { "groupId", "groupName" });

        Iterator iter = broker.getReportQueryIteratorByQuery(q);
        while (iter.hasNext())
        {
            list.add(iter.next());
View Full Code Here

        Criteria crit = new Criteria();
        crit.addLike("groupName", "%o%");
        crit.addLike("allArticlesInGroup.articleName", "%\u00f6%"); //unicode for ö

        ReportQueryByCriteria q = QueryFactory.newReportQuery(ProductGroup.class, crit, true);
        q.setAttributes(new String[] { "groupId", "groupName" });

        Iterator iter = broker.getReportQueryIteratorByQuery(q);
        while (iter.hasNext())
        {
            list.add(iter.next());
View Full Code Here

    public void testCountByReportQuery() throws Exception
    {
        // 7 articles, 2 books, 3 cds
        Criteria criteria = new Criteria();
        criteria.addEqualTo("productGroupId", new Integer(5));
        ReportQueryByCriteria query = QueryFactory.newReportQuery(Article.class, criteria);
        query.setAttributes(new String[]{"count(*)"});
        Iterator iter = broker.getReportQueryIteratorByQuery(query);
        Object[] row;
        int count = 0;

        while (iter.hasNext())
View Full Code Here

    {
        // 7 articles, 2 books, 3 cds
        Criteria criteria = new Criteria();
        criteria.addEqualTo("productGroupId", new Integer(5));
        Query query = QueryFactory.newQuery(Article.class, criteria);
        ReportQueryByCriteria reportQuery;
        Iterator iter = broker.getIteratorByQuery(query);
        Collection result = new Vector();
        InterfaceArticle article;
        int count;

        while (iter.hasNext())
        {
            article = (InterfaceArticle) iter.next();
            result.add(article);
        }
        assertEquals("Iterator should produce 12 items", 12, result.size());

        // get count
        count = broker.getCount(query);
        assertEquals("Count should be 12", 12, count);

        reportQuery = QueryFactory.newReportQuery(Article.class, criteria);
        reportQuery.setAttributes(new String[]{"count(*)"});
        iter = broker.getReportQueryIteratorByQuery(reportQuery);

        while (iter.hasNext())
        {
            result.add(iter.next());
View Full Code Here

     * Create a Count-Query for QueryByCriteria
     */
    private Query getQueryByCriteriaCount(QueryByCriteria aQuery)
    {
        Class                 searchClass = aQuery.getSearchClass();
        ReportQueryByCriteria countQuery  = null;
        Criteria              countCrit   = null;
        String[]              columns     = new String[1];

        // BRJ: copied Criteria without groupby, orderby, and prefetched relationships
        if (aQuery.getCriteria() != null)
        {
            countCrit = aQuery.getCriteria().copy(false, false, false);
        }

        if (aQuery.isDistinct())
        {
            // BRJ: Count distinct is dbms dependent
            // hsql/sapdb: select count (distinct(person_id || project_id)) from person_project
            // mysql: select count (distinct person_id,project_id) from person_project
            // [tomdz]
            // Some databases have no support for multi-column count distinct (e.g. Derby)
            // Here we use a SELECT count(*) FROM (SELECT DISTINCT ...) instead
            //
            // concatenation of pk-columns is a simple way to obtain a single column
            // but concatenation is also dbms dependent:
            //
            // SELECT count(distinct concat(row1, row2, row3)) mysql
            // SELECT count(distinct (row1 || row2 || row3)) ansi
            // SELECT count(distinct (row1 + row2 + row3)) ms sql-server

            FieldDescriptor[] pkFields   = m_broker.getClassDescriptor(searchClass).getPkFields();
            String[]          keyColumns = new String[pkFields.length];

            if (pkFields.length > 1)
            {
                // TODO: Use ColumnName. This is a temporary solution because
                // we cannot yet resolve multiple columns in the same attribute.
                for (int idx = 0; idx < pkFields.length; idx++)
                {
                    keyColumns[idx] = pkFields[idx].getColumnName();
                }
            }
            else
            {
                for (int idx = 0; idx < pkFields.length; idx++)
                {
                    keyColumns[idx] = pkFields[idx].getAttributeName();
                }
            }
            // [tomdz]
            // TODO: Add support for databases that do not support COUNT DISTINCT over multiple columns
//            if (getPlatform().supportsMultiColumnCountDistinct())
//            {
//                columns[0] = "count(distinct " + getPlatform().concatenate(keyColumns) + ")";
//            }
//            else
//            {
//                columns = keyColumns;
//            }

            columns[0] = "count(distinct " + getPlatform().concatenate(keyColumns) + ")";
        }
        else
        {
            columns[0] = "count(*)";
        }

        // BRJ: we have to preserve indirection table !
        if (aQuery instanceof MtoNQuery)
        {
            MtoNQuery                 mnQuery       = (MtoNQuery)aQuery;
            ReportQueryByMtoNCriteria mnReportQuery = new ReportQueryByMtoNCriteria(searchClass, columns, countCrit);

            mnReportQuery.setIndirectionTable(mnQuery.getIndirectionTable());
            countQuery = mnReportQuery;
        }
        else
        {
            countQuery = new ReportQueryByCriteria(searchClass, columns, countCrit);
        }

        // BRJ: we have to preserve outer-join-settings (by Andr� Markwalder)
        for (Iterator outerJoinPath = aQuery.getOuterJoinPaths().iterator(); outerJoinPath.hasNext();)
        {
            String path = (String) outerJoinPath.next();

            if (aQuery.isPathOuterJoin(path))
            {
                countQuery.setPathOuterJoin(path);
            }
        }

        //BRJ: add orderBy Columns asJoinAttributes
        List orderBy = aQuery.getOrderBy();

        if ((orderBy != null) && !orderBy.isEmpty())
        {
            String[] joinAttributes = new String[orderBy.size()];

            for (int idx = 0; idx < orderBy.size(); idx++)
            {
                joinAttributes[idx] = ((FieldHelper)orderBy.get(idx)).name;
            }
            countQuery.setJoinAttributes(joinAttributes);
        }

        // [tomdz]
        // TODO:
        // For those databases that do not support COUNT DISTINCT over multiple columns
View Full Code Here

TOP

Related Classes of org.apache.ojb.broker.query.ReportQueryByCriteria

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.