/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* 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.ogm.datastore.neo4j.remote.bolt.dialect.impl;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.ogm.datastore.map.impl.MapTupleSnapshot;
import org.hibernate.ogm.datastore.neo4j.remote.common.dialect.impl.RemoteNeo4jMapsTupleIterator;
import org.hibernate.ogm.model.spi.TupleSnapshot;
import org.neo4j.driver.v1.Record;
import org.neo4j.driver.v1.StatementResult;
import org.neo4j.driver.v1.Value;
/**
* Iterates over the results of a native query when each result is not mapped by an entity
*
* @author Davide D'Alto
*/
public class BoltNeo4jMapsTupleIterator extends RemoteNeo4jMapsTupleIterator<Record> {
public BoltNeo4jMapsTupleIterator(StatementResult statementResult) {
super( statementResult, statementResult.keys() );
}
@Override
protected TupleSnapshot tupleSnapshot(Record record, List<String> keys) {
// Requires a LinkedHashMap as the order of the entries is important
Map<String, Object> properties = new LinkedHashMap<>();
for ( String column : keys ) {
Value value = record.get( column );
if ( value != null && !value.isNull() ) {
properties.put( column, value.asObject() );
}
else {
properties.put( column, null );
}
}
return new MapTupleSnapshot( properties );
}
}