/* * 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.dialect.query.spi; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.TypedValue; import org.hibernate.ogm.type.spi.TypeTranslator; /** * Represents the parameters passed to a query. Modelled after {@code QueryParameters} in Hibernate ORM, providing only * those values needed for OGM's purposes at this point. * * @author Gunnar Morling */ public class QueryParameters { private final RowSelection rowSelection; private final Map<String, TypedGridValue> namedParameters; private final List<TypedGridValue> positionalParameters; public QueryParameters(RowSelection rowSelection, Map<String, TypedGridValue> namedParameters, List<TypedGridValue> positionalParameters) { this.rowSelection = rowSelection; this.namedParameters = namedParameters; this.positionalParameters = positionalParameters; } public static QueryParameters fromOrmQueryParameters(org.hibernate.engine.spi.QueryParameters parameters, TypeTranslator typeTranslator, SessionFactoryImplementor sessionFactoryImplementor) { RowSelection selection = RowSelection.fromOrmRowSelection( parameters.getRowSelection() ); Map<String, TypedGridValue> namedParameters = createNamedParameters( sessionFactoryImplementor, parameters, typeTranslator ); List<TypedGridValue> positionalParameters = createPositionalParameters( parameters, typeTranslator ); return new QueryParameters( selection, namedParameters, positionalParameters ); } private static List<TypedGridValue> createPositionalParameters(org.hibernate.engine.spi.QueryParameters parameters, TypeTranslator typeTranslator) { List<TypedGridValue> positionalParameters = new ArrayList<>( parameters.getPositionalParameterTypes().length ); for ( int i = 0; i < parameters.getPositionalParameterTypes().length; i++ ) { positionalParameters.add( new TypedGridValue( typeTranslator.getType( parameters.getPositionalParameterTypes()[i] ), parameters.getPositionalParameterValues()[i] ) ); } return positionalParameters; } private static Map<String, TypedGridValue> createNamedParameters(SessionFactoryImplementor factory, org.hibernate.engine.spi.QueryParameters parameters, TypeTranslator typeTranslator) { Map<String, TypedGridValue> namedParameters = new HashMap<>(); for ( Entry<String, TypedValue> parameter : parameters.getNamedParameters().entrySet() ) { TypedGridValue typedGridValue = TypedGridValue.fromOrmTypedValue( parameter.getValue(), typeTranslator, factory ); namedParameters.put( parameter.getKey(), typedGridValue ); } return namedParameters; } public RowSelection getRowSelection() { return rowSelection; } public Map<String, TypedGridValue> getNamedParameters() { return namedParameters; } public List<TypedGridValue> getPositionalParameters() { return positionalParameters; } }