Package org.hsqldb_voltpatches.navigator

Examples of org.hsqldb_voltpatches.navigator.RowSetNavigatorData


    Result getResult(Session session, int maxRows) {

        int    currentMaxRows = unionType == UNION_ALL ? maxRows
                                                       : Integer.MAX_VALUE;
        Result first = leftQueryExpression.getResult(session, currentMaxRows);
        RowSetNavigatorData navigator =
            (RowSetNavigatorData) first.getNavigator();
        Result second = rightQueryExpression.getResult(session,
            currentMaxRows);
        RowSetNavigatorData rightNavigator =
            (RowSetNavigatorData) second.getNavigator();

        if (unionCorresponding) {
            RowSetNavigatorData rowSet = new RowSetNavigatorData(session,
                this);

            rowSet.copy(navigator, leftQueryExpression.unionColumnMap);

            navigator = rowSet;

            first.setNavigator(navigator);

            first.metaData = this.getMetaData();
            rowSet         = new RowSetNavigatorData(session, this);

            if (unionType != UNION && unionType != UNION_ALL) {
                rowSet.copy(rightNavigator,
                            rightQueryExpression.unionColumnMap);

                rightNavigator = rowSet;
            }
        }

        switch (unionType) {

            case UNION :
                navigator.union(rightNavigator,
                                rightQueryExpression.unionColumnMap);
                break;

            case UNION_ALL :
                navigator.unionAll(rightNavigator,
                                   rightQueryExpression.unionColumnMap);
                break;

            case INTERSECT :
                navigator.intersect(rightNavigator);
                break;

            case INTERSECT_ALL :
                navigator.intersectAll(rightNavigator);
                break;

            case EXCEPT :
                navigator.except(rightNavigator);
                break;

            case EXCEPT_ALL :
                navigator.exceptAll(rightNavigator);
                break;

            default :
                throw Error.runtimeError(ErrorCode.U_S0500, "QueryExpression");
        }

        if (sortAndSlice.hasOrder()) {
            RowSetNavigatorData nav =
                (RowSetNavigatorData) first.getNavigator();

            nav.sortUnion(sortAndSlice);
            nav.trim(sortAndSlice.getLimitStart(session),
                     sortAndSlice.getLimitCount(session, maxRows));
        }

        navigator.reset();
View Full Code Here


        }

        Result result = queryExpression.getResult(session,
            isExistsPredicate ? 1
                              : 0);
        RowSetNavigatorData navigator =
            ((RowSetNavigatorData) result.getNavigator());

        if (uniqueRows) {
            navigator.removeDuplicates();
        }

        store = session.sessionData.getSubqueryRowStore(table);

        table.insertResult(store, result);
View Full Code Here

        result.getNavigator().close();
    }

    public boolean hasUniqueNotNullRows(Session session) {

        RowSetNavigatorData navigator = new RowSetNavigatorData(session,
            table);
        boolean result = navigator.hasUniqueNotNullRows();

        return result;
    }
View Full Code Here

    private Result getSingleResult(Session session, int rowCount) {

        int                 maxRows   = getMaxRowCount(session, rowCount);
        Result              r         = buildResult(session, maxRows);
        RowSetNavigatorData navigator = (RowSetNavigatorData) r.getNavigator();

        if (isDistinctSelect) {
            navigator.removeDuplicates();
        }

        navigator.sortOrder();
        navigator.trim(getLimitStart(session),
                       getLimitCount(session, rowCount));

        return r;
    }
View Full Code Here

        return r;
    }

    private Result buildResult(Session session, int limitcount) {

        RowSetNavigatorData navigator = new RowSetNavigatorData(session,
            (QuerySpecification) this);
        Result result = Result.newResult(navigator);

        result.metaData = resultMetaData;

        result.setDataResultConcurrency(isUpdatable);

        // A VoltDB extension to support LIMIT 0
        // Test for early return case added by VoltDB to support LIMIT 0 in "HSQL backend".
        if (limitcount == 0) {
            return result;
        }
        // End of VoltDB extension
        int fullJoinIndex = 0;
        RangeIterator[] rangeIterators =
            new RangeIterator[rangeVariables.length];

        for (int i = 0; i < rangeVariables.length; i++) {
            rangeIterators[i] = rangeVariables[i].getIterator(session);
        }

        for (int currentIndex = 0; ; ) {
            if (currentIndex < fullJoinIndex) {
                boolean end = true;

                for (int i = fullJoinIndex + 1; i < rangeVariables.length;
                        i++) {
                    if (rangeVariables[i].isRightJoin) {
                        rangeIterators[i] = rangeVariables[i].getFullIterator(
                            session, (RangeIteratorMain) rangeIterators[i]);
                        fullJoinIndex = i;
                        currentIndex  = i;
                        end           = false;

                        break;
                    }
                }

                if (end) {
                    break;
                }
            }

            RangeIterator it = rangeIterators[currentIndex];

            if (it.next()) {
                if (currentIndex < rangeVariables.length - 1) {
                    currentIndex++;

                    continue;
                }
            } else {
                it.reset();

                currentIndex--;

                continue;
            }

            session.sessionData.startRowProcessing();

            Object[] data = new Object[indexLimitData];

            for (int i = 0; i < indexStartAggregates; i++) {
                if (isAggregated && aggregateCheck[i]) {
                    continue;
                } else {
                    data[i] = exprColumns[i].getValue(session);
                }
            }

            for (int i = indexLimitVisible; i < indexLimitRowId; i++) {
                data[i] = it.getRowidObject();
            }

            Object[] groupData = null;

            if (isAggregated || isGrouped) {
                groupData = navigator.getGroupData(data);

                if (groupData != null) {
                    data = groupData;
                }
            }

            for (int i = indexStartAggregates; i < indexLimitExpressions;
                    i++) {
                data[i] =
                    ((ExpressionAggregate) exprColumns[i])
                        .updateAggregatingValue(session, data[i]);
            }

            if (groupData == null) {
                navigator.add(data);
            }

            if (isAggregated || isGrouped) {
                continue;
            }

            if (navigator.getSize() >= limitcount) {
                break;
            }
        }

        navigator.reset();

        if (!isGrouped && !isAggregated) {
            return result;
        }

        if (isAggregated) {
            if (!isGrouped && navigator.getSize() == 0) {
                Object[] data = new Object[exprColumns.length];

                navigator.add(data);
            }

            RangeIteratorBase it = new RangeIteratorBase(session,
                navigator.store, navigator.table, resultRangePosition);

            session.sessionContext.setRangeIterator(it);

            while (it.next()) {
                for (int i = indexStartAggregates; i < indexLimitExpressions;
                        i++) {
                    ExpressionAggregate aggregate =
                        (ExpressionAggregate) exprColumns[i];

                    it.currentData[i] = aggregate.getAggregatedValue(session,
                            it.currentData[i]);
                }

                for (int i = 0; i < indexStartAggregates; i++) {
                    if (aggregateCheck[i]) {
                        it.currentData[i] = exprColumns[i].getValue(session);
                    }
                }
            }
        }

        navigator.reset();

        if (havingCondition != null) {
            while (navigator.hasNext()) {
                Object[] data = (Object[]) navigator.getNext();

                if (!Boolean.TRUE.equals(
                        data[indexLimitVisible + groupByColumnCount])) {
                    navigator.remove();
                }
            }

            navigator.reset();
        }

        return result;
    }
View Full Code Here

TOP

Related Classes of org.hsqldb_voltpatches.navigator.RowSetNavigatorData

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.