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

com.datastax.driver.core.DefaultContinuousPagingResult Maven / Gradle / Ivy

Go to download

A driver for DataStax Enterprise (DSE) and Apache Cassandra 1.2+ clusters that works exclusively with the Cassandra Query Language version 3 (CQL3) and Cassandra's binary protocol, supporting DSE-specific features such as geospatial types, DSE Graph and DSE authentication.

There is a newer version: 2.4.0
Show newest version
/*
 * Copyright DataStax, Inc.
 *
 * This software can be used solely with DataStax Enterprise. Please consult the license at
 * http://www.datastax.com/terms/datastax-dse-driver-license-terms
 */
package com.datastax.driver.core;

import com.google.common.collect.AbstractIterator;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.Uninterruptibles;

import java.util.Iterator;
import java.util.concurrent.ExecutionException;

class DefaultContinuousPagingResult implements ContinuousPagingResult {

    private final RowIterator iterator;
    private final ColumnDefinitions columnDefinitions;

    DefaultContinuousPagingResult(ListenableFuture firstPageFuture) {
        try {
            AsyncContinuousPagingResult result = Uninterruptibles.getUninterruptibly(firstPageFuture);
            this.iterator = new RowIterator(result);
            this.columnDefinitions = result.getColumnDefinitions();
        } catch (ExecutionException e) {
            throw DriverThrowables.propagateCause(e);
        }
    }

    @Override
    public Iterator iterator() {
        return iterator;
    }

    @Override
    public ColumnDefinitions getColumnDefinitions() {
        return columnDefinitions;
    }

    @Override
    public void cancel() {
        this.iterator.cancel();
    }

    @Override
    public ExecutionInfo getExecutionInfo() {
        return this.iterator.getExecutionInfo();
    }

    private static class RowIterator extends AbstractIterator {
        private AsyncContinuousPagingResult currentResult;
        private Iterator currentRows;
        private boolean cancelled;

        private RowIterator(AsyncContinuousPagingResult result) {
            this.currentResult = result;
            this.currentRows = result.currentPage().iterator();
        }

        @Override
        protected Row computeNext() {
            maybeFetchNextResult();
            return currentRows.hasNext() ? currentRows.next() : endOfData();
        }

        private void maybeFetchNextResult() {
            if (!currentRows.hasNext() && !cancelled && !currentResult.isLast()) {
                try {
                    currentResult = Uninterruptibles.getUninterruptibly(currentResult.nextPage());
                    currentRows = currentResult.currentPage().iterator();
                } catch (ExecutionException e) {
                    throw DriverThrowables.propagateCause(e);
                }
            }
        }

        private ExecutionInfo getExecutionInfo() {
            return currentResult.getExecutionInfo();
        }

        private void cancel() {
            currentResult.cancel();
            cancelled = true;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy