private TupleAsMapResultSet getResultSet()

in core/src/main/java/org/hibernate/ogm/loader/impl/OgmLoader.java [548:617]


	private TupleAsMapResultSet getResultSet(Serializable id, QueryParameters qp, OgmLoadingContext ogmLoadingContext, SharedSessionContractImplementor session) {
		if ( id == null && ogmLoadingContext.hasResultSet() ) {
			return ogmLoadingContext.getResultSet();
		}

		//TODO this if won't work when we will support collections inside the entity tuple but that will do for now
		final TupleAsMapResultSet resultset = new TupleAsMapResultSet();
		if ( getEntityPersisters().length > 0 ) {
			OgmEntityPersister persister = getEntityPersisters()[0];
			if ( loadSeveralIds( qp ) ) {
				// here we expect to receive QueryParameters.positionalParameters full of ids and thus of the same type.
				// if that's not the case, we are in a bit of a trouble :)
				int numberOfIds = qp.getPositionalParameterValues().length;
				// prepare the array of entity keys for each id
				EntityKey[] keys = new EntityKey[numberOfIds];
				for ( int index = 0 ; index < numberOfIds ; index++ ) {
					keys[index] = EntityKeyBuilder.fromPersister( persister, (Serializable) qp.getPositionalParameterValues()[index], session );
				}
				if ( multigetGridDialect != null ) {
					for ( Tuple tuple : multigetGridDialect.getTuples( keys, persister.getTupleContext( session ) ) ) {
						if ( tuple != null ) {
							resultset.addTuple( tuple );
						}
					}
				}
				else {
					for ( EntityKey entityKey : keys ) {
						Tuple entry = gridDialect.getTuple( entityKey, persister.getTupleContext( session ) );
						if ( entry != null ) {
							resultset.addTuple( entry );
						}
					}
				}
			}
			else {
				final EntityKey key = EntityKeyBuilder.fromPersister( persister, id, session );
				Tuple entry = gridDialect.getTuple( key, persister.getTupleContext( session ) );
				if ( entry != null ) {
					resultset.addTuple( entry );
				}
			}
		}
		else {
			//collection persister
			if ( getCollectionPersisters().length != 1 ) {
				throw new AssertionFailure( "Found an unexpected number of collection persisters: " + getCollectionPersisters().length );
			}
			final OgmCollectionPersister persister = (OgmCollectionPersister) getCollectionPersisters()[0];
			Object owner = session.getPersistenceContext().getCollectionOwner( id, persister );

			AssociationPersister associationPersister = new AssociationPersister.Builder(
					persister.getOwnerEntityPersister().getMappedClass()
				)
				.gridDialect( gridDialect )
				.key( id, persister.getKeyGridType() )
				.associationKeyMetadata( persister.getAssociationKeyMetadata() )
				.associationTypeContext( persister.getAssociationTypeContext() )
				.hostingEntity( owner )
				.session( session )
				.build();

			Association assoc = associationPersister.getAssociationOrNull();
			if ( assoc != null ) {
				for ( RowKey rowKey : assoc.getKeys() ) {
					resultset.addTuple( assoc.get( rowKey ) );
				}
			}
		}
		return resultset;
	}