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

org.hibernate.query.sqm.sql.internal.SqmMapEntryResult Maven / Gradle / Ivy

The newest version!
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later
 * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
 */
package org.hibernate.query.sqm.sql.internal;

import java.util.Map;

import org.hibernate.sql.results.graph.AssemblerCreationState;
import org.hibernate.sql.results.graph.DomainResult;
import org.hibernate.sql.results.graph.DomainResultAssembler;
import org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingOptions;
import org.hibernate.sql.results.jdbc.spi.RowProcessingState;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;

/**
 * @author Steve Ebersole
 */
public class SqmMapEntryResult> implements DomainResult {
	private final DomainResult keyResult;
	private final DomainResult valueResult;

	private final JavaTypeDescriptor javaTypeDescriptor;
	private final String alias;

	public SqmMapEntryResult(
			DomainResult keyResult,
			DomainResult valueResult,
			String alias,
			JavaTypeDescriptor javaTypeDescriptor) {
		this.alias = alias;
		this.keyResult = keyResult;
		this.valueResult = valueResult;
		this.javaTypeDescriptor = javaTypeDescriptor;
	}

	@Override
	public String getResultVariable() {
		return alias;
	}

	@Override
	public DomainResultAssembler createResultAssembler(AssemblerCreationState creationState) {
		final DomainResultAssembler keyAssembler = keyResult.createResultAssembler( creationState );
		final DomainResultAssembler valueAssembler = valueResult.createResultAssembler( creationState );

		return new DomainResultAssembler() {
			@Override
			public R assemble(RowProcessingState rowProcessingState, JdbcValuesSourceProcessingOptions options) {
				final K key = keyAssembler.assemble( rowProcessingState, options );
				final V value = valueAssembler.assemble( rowProcessingState, options );
				//noinspection unchecked
				return (R) new MapEntryImpl<>( key, value );
			}

			@Override
			public JavaTypeDescriptor getAssembledJavaTypeDescriptor() {
				return javaTypeDescriptor;
			}
		};
	}

	@Override
	public JavaTypeDescriptor getResultJavaTypeDescriptor() {
		return javaTypeDescriptor;
	}

	public static class MapEntryImpl implements Map.Entry {
		private final K key;
		private final V value;

		public MapEntryImpl(K key, V value) {
			this.key = key;
			this.value = value;
		}

		@Override
		public K getKey() {
			return key;
		}

		@Override
		public V getValue() {
			return value;
		}

		@Override
		public V setValue(V value) {
			throw new UnsupportedOperationException();
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy