/** * Convenience method for creating a param location recognizer and * initiating the parse. * * @param query The query to be parsed for parameter locations. * @param sessionFactory * @return The generated recognizer, with journaled location info. */ public static ParamLocationRecognizer parseLocations( String query, SessionFactoryImplementor sessionFactory) { final ParamLocationRecognizer recognizer = new ParamLocationRecognizer( sessionFactory.getSessionFactoryOptions().jdbcStyleParamsZeroBased() ? 0 : 1 ); ParameterParser.parse( query, recognizer ); return recognizer; }
@Override public ParameterMetadataImpl getParameterMetadata(String nativeQuery) { final ParamLocationRecognizer recognizer = ParamLocationRecognizer.parseLocations( nativeQuery, sessionFactory ); return new ParameterMetadataImpl( recognizer.getOrdinalParameterDescriptionMap(), recognizer.getNamedParameterDescriptionMap() ); }
@Override public void namedParameter(String name, int position) { getOrBuildNamedParameterDescription( name ).add( position ); }
@SuppressWarnings({ "UnnecessaryUnboxing" }) private ParameterMetadata buildNativeSQLParameterMetadata(String sqlString) { ParamLocationRecognizer recognizer = ParamLocationRecognizer.parseLocations( sqlString ); OrdinalParameterDescriptor[] ordinalDescriptors = new OrdinalParameterDescriptor[ recognizer.getOrdinalParameterLocationList().size() ]; for ( int i = 0; i < recognizer.getOrdinalParameterLocationList().size(); i++ ) { final Integer position = ( Integer ) recognizer.getOrdinalParameterLocationList().get( i ); ordinalDescriptors[i] = new OrdinalParameterDescriptor( i, null, position.intValue() ); } Iterator itr = recognizer.getNamedParameterDescriptionMap().entrySet().iterator(); Map<String,NamedParameterDescriptor> namedParamDescriptorMap = new HashMap<String,NamedParameterDescriptor>(); while( itr.hasNext() ) { final Map.Entry entry = ( Map.Entry ) itr.next(); final String name = ( String ) entry.getKey(); final ParamLocationRecognizer.NamedParameterDescription description = ( ParamLocationRecognizer.NamedParameterDescription ) entry.getValue(); namedParamDescriptorMap.put( name , new NamedParameterDescriptor( name, null, description.buildPositionsArray(), description.isJpaStyle() ) ); } return new ParameterMetadata( ordinalDescriptors, namedParamDescriptorMap ); }
@Override public ParameterMetadataImpl buildParameterMetadata(String nativeQuery) { // At the moment we don't care about JDBC base count for positional parameters because // we don't have a dialect that supports them. // After a quick inspection it seems that only with Neo4j would be easy to make it work, // and even in that scenario I'm not sure it will matter. // I think it makes sense to keep track of the JPA compliance problems in separate issues. // In this case after solving OGM-1407 int jdbcStyleOrdinalCountBase = 0; ParamLocationRecognizer recognizer = new ParamLocationRecognizer( jdbcStyleOrdinalCountBase ); parseQueryParameters( nativeQuery, recognizer ); recognizer.complete(); final Map<Integer, OrdinalParameterDescriptor> ordinalDescriptors = recognizer.getOrdinalParameterDescriptionMap(); final Map<String, NamedParameterDescriptor> namedDescriptors = recognizer.getNamedParameterDescriptionMap(); return new ParameterMetadataImpl( ordinalDescriptors, namedDescriptors ); }
@SuppressWarnings({ "UnnecessaryUnboxing" }) private ParameterMetadata buildNativeSQLParameterMetadata(String sqlString) { ParamLocationRecognizer recognizer = ParamLocationRecognizer.parseLocations( sqlString ); OrdinalParameterDescriptor[] ordinalDescriptors = new OrdinalParameterDescriptor[ recognizer.getOrdinalParameterLocationList().size() ]; for ( int i = 0; i < recognizer.getOrdinalParameterLocationList().size(); i++ ) { final Integer position = ( Integer ) recognizer.getOrdinalParameterLocationList().get( i ); ordinalDescriptors[i] = new OrdinalParameterDescriptor( i, null, position.intValue() ); } Iterator itr = recognizer.getNamedParameterDescriptionMap().entrySet().iterator(); Map<String,NamedParameterDescriptor> namedParamDescriptorMap = new HashMap<String,NamedParameterDescriptor>(); while( itr.hasNext() ) { final Map.Entry entry = ( Map.Entry ) itr.next(); final String name = ( String ) entry.getKey(); final ParamLocationRecognizer.NamedParameterDescription description = ( ParamLocationRecognizer.NamedParameterDescription ) entry.getValue(); namedParamDescriptorMap.put( name , new NamedParameterDescriptor( name, null, description.buildPositionsArray(), description.isJpaStyle() ) ); } return new ParameterMetadata( ordinalDescriptors, namedParamDescriptorMap ); }
private ParameterMetadata buildParameterMetadata(ParameterTranslations parameterTranslations, String hql) { long start = System.currentTimeMillis(); ParamLocationRecognizer recognizer = ParamLocationRecognizer.parseLocations( hql ); long end = System.currentTimeMillis(); LOG.tracev( "HQL param location recognition took {0} mills ({1})", ( end - start ), hql ); int[] locations = ArrayHelper.toIntArray( recognizer.getOrdinalParameterLocationList() ); if ( parameterTranslations.supportsOrdinalParameterMetadata() && locations.length != ordinalParamCount ) { throw new HibernateException( "ordinal parameter mismatch" ); Iterator itr = recognizer.getNamedParameterDescriptionMap().entrySet().iterator(); Map namedParamDescriptorMap = new HashMap(); while( itr.hasNext() ) {
/** * Convenience method for creating a param location recognizer and * initiating the parse. * * @param query The query to be parsed for parameter locations. * @return The generated recognizer, with journaled location info. */ public static ParamLocationRecognizer parseLocations(String query) { ParamLocationRecognizer recognizer = new ParamLocationRecognizer(); ParameterParser.parse( query, recognizer ); return recognizer; }
public void namedParameter(String name, int position) { getOrBuildNamedParameterDescription( name, false ).add( position ); }
private ParameterMetadata buildParameterMetadata(ParameterTranslations parameterTranslations, String hql) { long start = System.currentTimeMillis(); ParamLocationRecognizer recognizer = ParamLocationRecognizer.parseLocations( hql ); long end = System.currentTimeMillis(); LOG.tracev( "HQL param location recognition took {0} mills ({1})", ( end - start ), hql ); int[] locations = ArrayHelper.toIntArray( recognizer.getOrdinalParameterLocationList() ); if ( parameterTranslations.supportsOrdinalParameterMetadata() && locations.length != ordinalParamCount ) { throw new HibernateException( "ordinal parameter mismatch" ); Iterator itr = recognizer.getNamedParameterDescriptionMap().entrySet().iterator(); Map namedParamDescriptorMap = new HashMap(); while( itr.hasNext() ) {
/** * Convenience method for creating a param location recognizer and * initiating the parse. * * @param query The query to be parsed for parameter locations. * @return The generated recognizer, with journaled location info. */ public static ParamLocationRecognizer parseLocations(String query) { ParamLocationRecognizer recognizer = new ParamLocationRecognizer(); ParameterParser.parse( query, recognizer ); return recognizer; }
public void jpaPositionalParameter(String name, int position) { getOrBuildNamedParameterDescription( name, true ).add( position ); }
public void jpaPositionalParameter(String name, int position) { getOrBuildNamedParameterDescription( name, true ).add( position ); }
public void namedParameter(String name, int position) { getOrBuildNamedParameterDescription( name, false ).add( position ); }