public void prepareForAutoDiscovery(JdbcResultMetadata metadata) throws SQLException { if ( columnProcessors == null || columnProcessors.length == 0 ) { int columns = metadata.getColumnCount(); columnProcessors = new ResultColumnProcessor[ columns ]; for ( int i = 1; i <= columns; i++ ) { columnProcessors[ i - 1 ] = new ScalarResultColumnProcessor( i ); } } }
@Override public Object extract(Object[] data, ResultSet resultSet, SharedSessionContractImplementor session) throws SQLException, HibernateException { if ( constructor == null ) { throw new IllegalStateException( "Constructor to call was null" ); } final Object[] args = new Object[ scalarProcessors.length ]; for ( int i = 0; i < scalarProcessors.length; i++ ) { args[i] = scalarProcessors[i].extract( data, resultSet, session ); } try { return constructor.newInstance( args ); } catch (Exception e) { throw new HibernateException( String.format( "Unable to call %s constructor", constructor.getDeclaringClass() ), e ); } }
@Override public void performDiscovery(JdbcResultMetadata metadata, List<Type> types, List<String> aliases) throws SQLException { final List<Type> localTypes = new ArrayList<>(); for ( ScalarResultColumnProcessor scalar : scalarProcessors ) { scalar.performDiscovery( metadata, localTypes, aliases ); } types.addAll( localTypes ); constructor = resolveConstructor( targetClass, localTypes ); }
specifiedAliases.add( scalarRtn.getColumnAlias() ); resultColumnProcessors.add( new ScalarResultColumnProcessor( StringHelper.unquote( scalarRtn.getColumnAlias(), factory.getJdbcServices().getDialect() ), scalarRtn.getType() int i = 0; for ( ScalarReturn scalarReturn : constructorReturn.getScalars() ) { scalarProcessors[i++] = new ScalarResultColumnProcessor( StringHelper.unquote( scalarReturn.getColumnAlias(), factory.getJdbcServices().getDialect() ), scalarReturn.getType()