presto-cassandra/src/main/java/io/prestosql/plugin/cassandra/CassandraSplitManager.java/CassandraSplitManager/getSplits
class CassandraSplitManager:    @Override
    public ConnectorSplitSource getSplits(ConnectorTransactionHandle transaction, ConnectorSession session, ConnectorTableHandle tableHandle, SplitSchedulingStrategy splitSchedulingStrategy)
    {
        CassandraTableHandle cassandraTableHandle = (CassandraTableHandle) tableHandle;

        List<CassandraPartition> partitions;
        String clusteringKeyPredicates;
        if (cassandraTableHandle.getPartitions().isPresent()) {
            partitions = cassandraTableHandle.getPartitions().get();
            clusteringKeyPredicates = cassandraTableHandle.getClusteringKeyPredicates();
        }
        else {
            CassandraPartitionResult partitionResult = partitionManager.getPartitions(cassandraTableHandle, TupleDomain.all());
            partitions = partitionResult.getPartitions();
            clusteringKeyPredicates = extractClusteringKeyPredicates(partitionResult, cassandraTableHandle, cassandraSession);
        }

        if (partitions.isEmpty()) {
            return new FixedSplitSource(ImmutableList.of());
        }

        // if this is an unpartitioned table, split into equal ranges
        if (partitions.size() == 1) {
            CassandraPartition cassandraPartition = partitions.get(0);
            if (cassandraPartition.isUnpartitioned() || cassandraPartition.isIndexedColumnPredicatePushdown()) {
                CassandraTable table = cassandraSession.getTable(cassandraTableHandle.getSchemaTableName());
                List<ConnectorSplit> splits = getSplitsByTokenRange(table, cassandraPartition.getPartitionId(), getSplitsPerNode(session));
                return new FixedSplitSource(splits);
            }
        }

        return new FixedSplitSource(getSplitsForPartitions(cassandraTableHandle, partitions, clusteringKeyPredicates));
    }