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

io.datakernel.aggregation.QueryPlan Maven / Gradle / Ivy

/*
 * Copyright (C) 2015-2018 SoftIndex LLC.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.datakernel.aggregation;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static io.datakernel.util.Preconditions.checkNotNull;
import static java.util.Collections.unmodifiableList;
import static java.util.Collections.unmodifiableSet;

public final class QueryPlan {
	private final List sequences;

	public QueryPlan(List sequences) {
		this.sequences = checkNotNull(sequences, "Cannot create QueryPlan with sequences that is null");
	}

	public static class Sequence {
		private final List queryFields;
		private final Set chunksFields = new LinkedHashSet<>();
		private final List chunks = new ArrayList<>();

		public Sequence(List queryFields) {
			this.queryFields = queryFields;
		}

		public List getQueryFields() {
			return unmodifiableList(queryFields);
		}

		public Set getChunksFields() {
			return unmodifiableSet(chunksFields);
		}

		public List getChunks() {
			return unmodifiableList(chunks);
		}

		public void add(AggregationChunk chunk) {
			chunks.add(chunk);
			chunksFields.addAll(chunk.getMeasures());
		}

		@Override
		public String toString() {
			return chunks.stream().map(AggregationChunk::getChunkId)
					.map(Object::toString)
					.collect(Collectors.joining(",", "[", "]"));
		}
	}

	public List getSequences() {
		return unmodifiableList(sequences);
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb
				.append("\nSequences (")
				.append(sequences.size())
				.append("): ");
		for (int i = 0; i < sequences.size(); ++i) {
			sb
					.append('\n')
					.append(i + 1)
					.append(" (")
					.append(sequences.get(i).chunks.size())
					.append("). ")
					.append(sequences.get(i)).append(' ');
		}
		return sb.toString();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy