private int getMaxOrdinalPosition() { int maxOrdinalPosition = 0; for ( QueryParameter<?> queryParameter : parameterBindingMap.keySet() ) { if ( queryParameter instanceof OrdinalParameterDescriptor ) { maxOrdinalPosition = Math.max( maxOrdinalPosition, queryParameter.getPosition() ); } } for ( QueryParameter<?> queryParameter : parameterListBindingMap.keySet() ) { if ( queryParameter instanceof OrdinalParameterDescriptor ) { maxOrdinalPosition = Math.max( maxOrdinalPosition, queryParameter.getPosition() ); } } return maxOrdinalPosition; } }
private TreeMap<QueryParameter, QueryParameterBinding> getSortedPositionalParamBindingMap() { final TreeMap<QueryParameter, QueryParameterBinding> map = new TreeMap<>( Comparator.comparing( Parameter::getPosition ) ); for ( Map.Entry<QueryParameter, QueryParameterBinding> entry : parameterBindingMap.entrySet() ) { if ( entry.getKey().getPosition() == null ) { continue; } map.put( entry.getKey(), entry.getValue() ); } return map; }
/** * @deprecated (since 5.2) expect a different approach to org.hibernate.engine.spi.QueryParameters in 6.0 */ @Deprecated public Map<String, TypedValue> collectNamedParameterBindings() { final Map<String, TypedValue> collectedBindings = new HashMap<>(); for ( Map.Entry<QueryParameter, QueryParameterBinding> entry : parameterBindingMap.entrySet() ) { final String key; if ( entry.getKey().getPosition() != null ) { key = Integer.toString( entry.getKey().getPosition() ); } else { key = entry.getKey().getName(); } Type bindType = entry.getValue().getBindType(); if ( bindType == null ) { log.debugf( "Binding for parameter [%s] did not define type", key ); bindType = SerializableType.INSTANCE; } collectedBindings.put( key, new TypedValue( bindType, entry.getValue().getBindValue() ) ); } return collectedBindings; }
/** * @deprecated (since 5.2) expected changes to "collection-valued parameter binding" in 6.0 */ @Deprecated @SuppressWarnings("unchecked") private <T> QueryParameterBinding<T> getAndRemoveBinding(QueryParameter<T> parameter) { QueryParameterBinding<T> binding = parameterBindingMap.remove( parameter ); if ( binding == null ) { if ( parameter.getName() != null ) { parameter = parameterMetadata.getQueryParameter( parameter.getName() ); } else { parameter = parameterMetadata.getQueryParameter( parameter.getPosition() ); } if ( parameter == null ) { throw new HibernateException( "Unable to resolve QueryParameter" ); } } binding = parameterBindingMap.remove( parameter ); return binding; }
private QueryParameterBindingsImpl( SessionFactoryImplementor sessionFactory, ParameterMetadata parameterMetadata, boolean queryParametersValidationEnabled) { this.sessionFactory = sessionFactory; this.parameterMetadata = parameterMetadata; this.queryParametersValidationEnabled = queryParametersValidationEnabled; this.parameterBindingMap = CollectionHelper.concurrentMap( parameterMetadata.getParameterCount() ); this.jdbcStyleOrdinalCountBase = sessionFactory.getSessionFactoryOptions().jdbcStyleParamsZeroBased() ? 0 : 1; if ( parameterMetadata.hasPositionalParameters() ) { int smallestOrdinalParamLabel = Integer.MAX_VALUE; for ( QueryParameter queryParameter : parameterMetadata.getPositionalParameters() ) { if ( queryParameter.getPosition() == null ) { throw new HibernateException( "Non-ordinal parameter ended up in ordinal param list" ); } if ( queryParameter.getPosition() < smallestOrdinalParamLabel ) { smallestOrdinalParamLabel = queryParameter.getPosition(); } } ordinalParamValueOffset = smallestOrdinalParamLabel; } else { ordinalParamValueOffset = 0; } }
private QueryParameter resolveParameter(QueryParameter queryParameter) { if ( queryParameter.getName() != null ) { return parameterMetadata.getQueryParameter( queryParameter.getName() ); } else { return parameterMetadata.getQueryParameter( queryParameter.getPosition() ); } }
public void verifyParametersBound(boolean reserveFirstParameter) { for ( QueryParameter<?> parameter : parameterMetadata.collectAllParameters() ) { // check the "normal" bindings if ( parameterBindingMap.containsKey( parameter ) ) { continue; } // next check the "list" bindings if ( parameterListBindingMap != null && parameterListBindingMap.containsKey( parameter ) ) { continue; } if ( parametersConvertedToListBindings != null && parametersConvertedToListBindings.contains( parameter ) ) { continue; } if ( parameter.getName() != null ) { throw new QueryException( "Named parameter not bound : " + parameter.getName() ); } else { throw new QueryException( "Ordinal parameter not bound : " + parameter.getPosition() ); } } }
expansionList.append( "?" ).append( syntheticParam.getPosition() );