@Override @SuppressWarnings( {"unchecked" } ) public <X> X unwrap(byte[] value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( Byte[].class.isAssignableFrom( type ) ) { return (X) value; } if ( byte[].class.isAssignableFrom( type ) ) { return (X) value; } if ( InputStream.class.isAssignableFrom( type ) ) { return (X) new ByteArrayInputStream( value ); } if ( BinaryStream.class.isAssignableFrom( type ) ) { return (X) new BinaryStreamImpl( value ); } if ( Blob.class.isAssignableFrom( type ) ) { return (X) options.getLobCreator().createBlob( value ); } throw unknownUnwrap( type ); }
@Override public <X> byte[] wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Byte[].class.isInstance( value ) ) { return unwrapBytes( (Byte[]) value ); } if ( byte[].class.isInstance( value ) ) { return (byte[]) value; } if ( InputStream.class.isInstance( value ) ) { return DataHelper.extractBytes( (InputStream) value ); } if ( Blob.class.isInstance( value ) || DataHelper.isNClob( value.getClass() ) ) { try { return DataHelper.extractBytes( ( (Blob) value ).getBinaryStream() ); } catch (SQLException e) { throw new HibernateException( "Unable to access lob stream", e ); } } throw unknownWrap( value.getClass() ); }
@Override public <X> BasicBinder<X> getClobBinder(final JavaTypeDescriptor<X> javaTypeDescriptor) { return new BasicBinder<X>( javaTypeDescriptor, this ) { @Override protected void doBind(final PreparedStatement st, final X value, final int index, final WrapperOptions options) throws SQLException { final CharacterStream characterStream = javaTypeDescriptor.unwrap( value, CharacterStream.class, options ); if ( value instanceof ClobImplementer ) { st.setCharacterStream( index, new CloseSuppressingReader( characterStream.asReader() ), characterStream.getLength() ); } else { st.setCharacterStream( index, characterStream.asReader(), characterStream.getLength() ); } } }; }
@Override @SuppressWarnings("unchecked") public <X> ValueBinder<X> getBinder(JavaTypeDescriptor<X> javaTypeDescriptor) { // Get the binder for the intermediate type representation final ValueBinder realBinder = delegate.getBinder( intermediateJavaTypeDescriptor ); return new BasicBinder<X>( javaTypeDescriptor, this ) { @Override @SuppressWarnings("unchecked") protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options) throws SQLException { final Object convertedValue; try { convertedValue = converter.convertToDatabaseColumn( value ); } catch (PersistenceException pe) { throw pe; } catch (RuntimeException re) { throw new PersistenceException( "Error attempting to apply AttributeConverter", re ); } realBinder.bind( st, convertedValue, index, options ); } }; }
public <X> Clob wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } // Support multiple return types from // org.hibernate.type.descriptor.sql.ClobTypeDescriptor if ( Clob.class.isAssignableFrom( value.getClass() ) ) { return options.getLobCreator().wrap( (Clob) value ); } else if ( Reader.class.isAssignableFrom( value.getClass() ) ) { Reader reader = (Reader) value; return options.getLobCreator().createClob( DataHelper.extractString( reader ) ); } throw unknownWrap( value.getClass() ); }
@Override public <X> Boolean wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Boolean.class.isInstance( value ) ) { return (Boolean) value; } if ( Number.class.isInstance( value ) ) { final int intValue = ( (Number) value ).intValue(); return intValue == 0 ? FALSE : TRUE; } if ( Character.class.isInstance( value ) ) { return isTrue( (Character) value ) ? TRUE : FALSE; } if ( String.class.isInstance( value ) ) { return isTrue( ( (String) value ).charAt( 0 ) ) ? TRUE : FALSE; } throw unknownWrap( value.getClass() ); }
@Override public <X> Short wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Short.class.isInstance( value ) ) { return (Short) value; } if ( Number.class.isInstance( value ) ) { return ( (Number) value ).shortValue(); } if ( String.class.isInstance( value ) ) { return Short.valueOf( ( (String) value ) ); } throw unknownWrap( value.getClass() ); }
public <X> NClob wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } // Support multiple return types from // org.hibernate.type.descriptor.sql.ClobTypeDescriptor if ( NClob.class.isAssignableFrom( value.getClass() ) ) { return options.getLobCreator().wrap( (NClob) value ); } else if ( Reader.class.isAssignableFrom( value.getClass() ) ) { Reader reader = (Reader) value; return options.getLobCreator().createNClob( DataHelper.extractString( reader ) ); } throw unknownWrap( value.getClass() ); }
@Override public <X> Date wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Date.class.isInstance( value ) ) { return (Date) value; } if ( Long.class.isInstance( value ) ) { return new java.sql.Date( ( (Long) value ).longValue() ); } if ( Calendar.class.isInstance( value ) ) { return new java.sql.Date( ( (Calendar) value ).getTimeInMillis() ); } if ( java.util.Date.class.isInstance( value ) ) { return new java.sql.Date( ( (java.util.Date) value ).getTime() ); } throw unknownWrap( value.getClass() ); }
@SuppressWarnings({ "unchecked" }) public <X> X unwrap(Calendar value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( Calendar.class.isAssignableFrom( type ) ) { return (X) value; } if ( java.sql.Date.class.isAssignableFrom( type ) ) { return (X) new java.sql.Date( value.getTimeInMillis() ); } if ( java.sql.Time.class.isAssignableFrom( type ) ) { return (X) new java.sql.Time( value.getTimeInMillis() ); } if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) { return (X) new java.sql.Timestamp( value.getTimeInMillis() ); } if ( Date.class.isAssignableFrom( type ) ) { return (X) new Date( value.getTimeInMillis() ); } throw unknownUnwrap( type ); }
public <X> Calendar wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Calendar.class.isInstance( value ) ) { return (Calendar) value; } if ( ! Date.class.isInstance( value ) ) { throw unknownWrap( value.getClass() ); } Calendar cal = new GregorianCalendar(); if ( Environment.jvmHasTimestampBug() ) { final long milliseconds = ( (Date) value ).getTime(); final long nanoseconds = java.sql.Timestamp.class.isInstance( value ) ? ( (java.sql.Timestamp) value ).getNanos() : 0; cal.setTime( new Date( milliseconds + nanoseconds / 1000000 ) ); } else { cal.setTime( (Date) value ); } return cal; }
@SuppressWarnings({ "unchecked" }) @Override public <X> X unwrap(Character value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( Character.class.isAssignableFrom( type ) ) { return (X) value; } if ( String.class.isAssignableFrom( type ) ) { return (X) value.toString(); } if ( Number.class.isAssignableFrom( type ) ) { return (X) Short.valueOf( (short)value.charValue() ); } throw unknownUnwrap( type ); }
@SuppressWarnings({ "unchecked" }) public <X> X unwrap(String value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( String.class.isAssignableFrom( type ) ) { return (X) value; } if ( Reader.class.isAssignableFrom( type ) ) { return (X) new StringReader( value ); } if ( CharacterStream.class.isAssignableFrom( type ) ) { return (X) new CharacterStreamImpl( value ); } if ( Clob.class.isAssignableFrom( type ) ) { return (X) options.getLobCreator().createClob( value ); } if ( DataHelper.isNClob( type ) ) { return (X) options.getLobCreator().createNClob( value ); } throw unknownUnwrap( type ); }
public <X> String wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( String.class.isInstance( value ) ) { return (String) value; } if ( Reader.class.isInstance( value ) ) { return DataHelper.extractString( (Reader) value ); } if ( Clob.class.isInstance( value ) ) { return DataHelper.extractString( (Clob) value ); } throw unknownWrap( value.getClass() ); }
@SuppressWarnings({ "unchecked" }) public <X> X unwrap(UUID value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( UUID.class.isAssignableFrom( type ) ) { return (X) PassThroughTransformer.INSTANCE.transform( value ); } if ( String.class.isAssignableFrom( type ) ) { return (X) ToStringTransformer.INSTANCE.transform( value ); } if ( byte[].class.isAssignableFrom( type ) ) { return (X) ToBytesTransformer.INSTANCE.transform( value ); } throw unknownUnwrap( type ); }
public <X> Calendar wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Calendar.class.isInstance( value ) ) { return (Calendar) value; } if ( ! java.util.Date.class.isInstance( value ) ) { throw unknownWrap( value.getClass() ); } Calendar cal = new GregorianCalendar(); if ( Environment.jvmHasTimestampBug() ) { final long milliseconds = ( (java.util.Date) value ).getTime(); final long nanoseconds = java.sql.Timestamp.class.isInstance( value ) ? ( (java.sql.Timestamp) value ).getNanos() : 0; cal.setTime( new Date( milliseconds + nanoseconds / 1000000 ) ); } else { cal.setTime( (java.util.Date) value ); } return cal; }
@Override public <X> Date wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Timestamp.class.isInstance( value ) ) { return (Timestamp) value; } if ( Long.class.isInstance( value ) ) { return new Timestamp( (Long) value ); } if ( Calendar.class.isInstance( value ) ) { return new Timestamp( ( (Calendar) value ).getTimeInMillis() ); } if ( Date.class.isInstance( value ) ) { return (Date) value; } throw unknownWrap( value.getClass() ); }
@Override public <X> BasicBinder<X> getBlobBinder(final JavaTypeDescriptor<X> javaTypeDescriptor) { return new BasicBinder<X>( javaTypeDescriptor, this ) { @Override protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options) throws SQLException { BlobTypeDescriptor descriptor = BLOB_BINDING; if ( byte[].class.isInstance( value ) ) { // performance shortcut for binding BLOB data in byte[] format descriptor = PRIMITIVE_ARRAY_BINDING; } else if ( options.useStreamForLobBinding() ) { descriptor = STREAM_BINDING; } descriptor.getBlobBinder( javaTypeDescriptor ).doBind( st, value, index, options ); } }; }
@Override public <X> Byte wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Byte.class.isInstance( value ) ) { return (Byte) value; } if ( Number.class.isInstance( value ) ) { return ( (Number) value ).byteValue(); } if ( String.class.isInstance( value ) ) { return Byte.valueOf( ( (String) value ) ); } throw unknownWrap( value.getClass() ); }
public <X> byte[] wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( byte[].class.isInstance( value ) ) { return (byte[]) value; } if ( InputStream.class.isInstance( value ) ) { return DataHelper.extractBytes( (InputStream) value ); } if ( Blob.class.isInstance( value ) || DataHelper.isNClob( value.getClass() ) ) { try { return DataHelper.extractBytes( ( (Blob) value ).getBinaryStream() ); } catch ( SQLException e ) { throw new HibernateException( "Unable to access lob stream", e ); } } throw unknownWrap( value.getClass() ); }
@Override public <X> Integer wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Integer.class.isInstance( value ) ) { return (Integer) value; } if ( Number.class.isInstance( value ) ) { return ( (Number) value ).intValue(); } if ( String.class.isInstance( value ) ) { return Integer.valueOf( ( (String) value ) ); } throw unknownWrap( value.getClass() ); }
@SuppressWarnings({ "unchecked" }) @Override public <X> X unwrap(Byte[] value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( Byte[].class.isAssignableFrom( type ) ) { return (X) value; } if ( byte[].class.isAssignableFrom( type ) ) { return (X) unwrapBytes( value ); } if ( InputStream.class.isAssignableFrom( type ) ) { return (X) new ByteArrayInputStream( unwrapBytes( value ) ); } if ( BinaryStream.class.isAssignableFrom( type ) ) { return (X) new BinaryStreamImpl( unwrapBytes( value ) ); } if ( Blob.class.isAssignableFrom( type ) ) { return (X) options.getLobCreator().createBlob( unwrapBytes( value ) ); } throw unknownUnwrap( type ); }
@Override public <X> Date wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Date.class.isInstance( value ) ) { return (Date) value; } if ( Long.class.isInstance( value ) ) { return new Date( (Long) value ); } if ( Calendar.class.isInstance( value ) ) { return new Date( ( (Calendar) value ).getTimeInMillis() ); } throw unknownWrap( value.getClass() ); }
@Override public <X> Long wrap(X value, WrapperOptions options) { if ( value == null ) { return null; } if ( Long.class.isInstance( value ) ) { return (Long) value; } if ( Number.class.isInstance( value ) ) { return ( (Number) value ).longValue(); } else if ( String.class.isInstance( value ) ) { return Long.valueOf( ( (String) value ) ); } throw unknownWrap( value.getClass() ); }
@SuppressWarnings({ "unchecked" }) public <X> X unwrap(T value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } else if ( type.isInstance( value ) ) { return (X) value; } else if ( byte[].class.isAssignableFrom( type ) ) { return (X) toBytes( value ); } else if ( InputStream.class.isAssignableFrom( type ) ) { return (X) new ByteArrayInputStream( toBytes( value ) ); } else if ( BinaryStream.class.isAssignableFrom( type ) ) { return (X) new BinaryStreamImpl( toBytes( value ) ); } else if ( Blob.class.isAssignableFrom( type )) { return (X) options.getLobCreator().createBlob( toBytes(value) ); } throw unknownUnwrap( type ); }
@SuppressWarnings({ "unchecked" }) public <X> X unwrap(char[] value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( char[].class.isAssignableFrom( type ) ) { return (X) value; } if ( String.class.isAssignableFrom( type ) ) { return (X) new String( value ); } if ( Clob.class.isAssignableFrom( type ) ) { return (X) options.getLobCreator().createClob( new String( value ) ); } if ( Reader.class.isAssignableFrom( type ) ) { return (X) new StringReader( new String( value ) ); } if ( CharacterStream.class.isAssignableFrom( type ) ) { return (X) new CharacterStreamImpl( new String( value ) ); } throw unknownUnwrap( type ); }
@Override public <X> BasicBinder<X> getClobBinder(final JavaTypeDescriptor<X> javaTypeDescriptor) { return new BasicBinder<X>( javaTypeDescriptor, this ) { @Override protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options) throws SQLException { st.setClob( index, javaTypeDescriptor.unwrap( value, Clob.class, options ) ); } }; }
@Override public J extract(ResultSet rs, String name, WrapperOptions options) throws SQLException { final J value = doExtract( rs, name, options ); final boolean traceEnabled = log.isTraceEnabled(); if ( value == null || rs.wasNull() ) { if ( traceEnabled ) { log.tracef( "extracted value ([%s] : [%s]) - [null]", name, JdbcTypeNameMapper.getTypeName( getSqlDescriptor().getSqlType() ) ); } return null; } else { if ( traceEnabled ) { log.tracef( "extracted value ([%s] : [%s]) - [%s]", name, JdbcTypeNameMapper.getTypeName( getSqlDescriptor().getSqlType() ), getJavaDescriptor().extractLoggableRepresentation( value ) ); } return value; } }
@Override public J extract(CallableStatement statement, int index, WrapperOptions options) throws SQLException { final J value = doExtract( statement, index, options ); final boolean traceEnabled = log.isTraceEnabled(); if ( value == null || statement.wasNull() ) { if ( traceEnabled ) { log.tracef( "extracted procedure output parameter ([%s] : [%s]) - [null]", index, JdbcTypeNameMapper.getTypeName( getSqlDescriptor().getSqlType() ) ); } return null; } else { if ( traceEnabled ) { log.tracef( "extracted procedure output parameter ([%s] : [%s]) - [%s]", index, JdbcTypeNameMapper.getTypeName( getSqlDescriptor().getSqlType() ), getJavaDescriptor().extractLoggableRepresentation( value ) ); } return value; } }
@Override public <X> GridValueBinder<X> getBinder(final JavaTypeDescriptor<X> javaTypeDescriptor) { return new BasicGridBinder<X>( javaTypeDescriptor, this ) { @Override protected void doBind(Tuple resultset, X value, String[] names, WrapperOptions options) { byte[] unwrap = javaTypeDescriptor.unwrap( value, byte[].class, options ); resultset.put( names[0], Base64ByteArrayTypeDescriptor.INSTANCE.toString( unwrap ) ); } }; }
public <X> ValueBinder<X> getBinder(final JavaTypeDescriptor<X> javaTypeDescriptor) { return new BasicBinder<X>( javaTypeDescriptor, this ) { @Override protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options) throws SQLException { st.setObject( index, javaTypeDescriptor.unwrap( value, UUID.class, options ), getSqlType() ); } }; }
@SuppressWarnings({"unchecked"}) @Override public <X> X unwrap(JsonNode value, Class<X> type, WrapperOptions options) { if (value == null) { return null; } if (String.class.isAssignableFrom(type)) { return (X) toString(value); } if (JsonNode.class.isAssignableFrom(type)) { return (X) JacksonUtil.toJsonNode(toString(value)); } throw unknownUnwrap(type); }
@SuppressWarnings({ "unchecked" }) public final void nullSafeSet( PreparedStatement st, Object value, int index, final SessionImplementor session) throws SQLException { final WrapperOptions options = getOptions(session); nullSafeSet( st, value, index, options ); }
@Override public T extract(CallableStatement statement, int startIndex, final SessionImplementor session) throws SQLException { final WrapperOptions options = getOptions(session); return remapSqlTypeDescriptor( options ).getExtractor( javaTypeDescriptor ).extract( statement, startIndex, options ); }
@Override public <X> ValueBinder<X> getBinder(final JavaTypeDescriptor<X> javaTypeDescriptor) { return new BasicBinder<X>(javaTypeDescriptor, this) { @Override protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options) throws SQLException { st.setObject(index, javaTypeDescriptor.unwrap(value, JsonNode.class, options), getSqlType()); } }; }
@SuppressWarnings({"unchecked"}) @Override public <X> X unwrap(Object value, Class<X> type, WrapperOptions options) { if (value == null) { return null; } if (String.class.isAssignableFrom(type)) { return (X) toString(value); } if (Object.class.isAssignableFrom(type)) { return (X) JacksonUtil.toJsonNode(toString(value)); } throw unknownUnwrap(type); }
@Override @SuppressWarnings({ "unchecked" }) public <X> X unwrap(BigInteger value, Class<X> type, WrapperOptions options) { if ( value == null ) { return null; } if ( BigInteger.class.isAssignableFrom( type ) ) { return (X) value; } if ( BigDecimal.class.isAssignableFrom( type ) ) { return (X) new BigDecimal( value ); } if ( Byte.class.isAssignableFrom( type ) ) { return (X) Byte.valueOf( value.byteValue() ); } if ( Short.class.isAssignableFrom( type ) ) { return (X) Short.valueOf( value.shortValue() ); } if ( Integer.class.isAssignableFrom( type ) ) { return (X) Integer.valueOf( value.intValue() ); } if ( Long.class.isAssignableFrom( type ) ) { return (X) Long.valueOf( value.longValue() ); } if ( Double.class.isAssignableFrom( type ) ) { return (X) Double.valueOf( value.doubleValue() ); } if ( Float.class.isAssignableFrom( type ) ) { return (X) Float.valueOf( value.floatValue() ); } throw unknownUnwrap( type ); }
@Override public <X> X unwrap(JsonStructure value, Class<X> type, WrapperOptions options) { if (value == null) { return null; } if (String.class.isAssignableFrom(type)) { return (X) this.toString(value); } throw unknownUnwrap(type); }