Java 类org.hibernate.ogm.model.spi.Tuple 实例源码

项目:hibernate-ogm-redis    文件:AbstractRedisDialect.java   
protected static Object getAssociationRow(Tuple row, AssociationKey associationKey) {
    String[] columnsToPersist = associationKey.getMetadata()
            .getColumnsWithoutKeyColumns( row.getColumnNames() );

    // return value itself if there is only a single column to store
    if ( columnsToPersist.length == 1 ) {
        return row.get( columnsToPersist[0] );
    }
    Entity rowObject = new Entity();
    String prefix = getColumnSharedPrefixOfAssociatedEntityLink( associationKey );
    for ( String column : columnsToPersist ) {
        Object value = row.get( column );
        if ( value != null ) {
            String columnName = column.startsWith( prefix ) ? column.substring( prefix.length() ) : column;
            rowObject.set( columnName, value );
        }
    }

    return rowObject.getPropertiesAsHierarchy();
}
项目:hibernate-ogm-redis    文件:Base64ByteArrayMappedGridTypeDescriptor.java   
@Override
public <X> GridValueExtractor<X> getExtractor(final JavaTypeDescriptor<X> javaTypeDescriptor) {
    return new GridValueExtractor<X>() {

        @Override
        public X extract(Tuple resultset, String name) {
            final X result = (X) resultset.get( name );
            if ( result == null ) {
                return null;
            }
            else {
                byte[] bytes = Base64ByteArrayTypeDescriptor.INSTANCE.fromString( (String) result );
                return javaTypeDescriptor.wrap( bytes, null );
            }
        }
    };
}
项目:hibernate-ogm-redis    文件:RedisHashEnumType.java   
@Override
public void nullSafeSet(Tuple resultset, Object value, String[] names, SessionImplementor session)
        throws HibernateException {
    if ( names.length > 1 ) {
        throw new NotYetImplementedException( "Multi column property not implemented yet" );
    }
    if ( value == null ) {
        log.tracef( "binding [null] to parameter [$s]", names[0] );
    }
    else {
        Object endValue = isOrdinal() ?
                Integer.toString( ( (Enum<?>) value ).ordinal() ) :
                ( (Enum<?>) value ).name();
        log.tracef( "binding [$s] to parameter(s) $s", endValue, names[0] );
        resultset.put( names[0], endValue );
    }
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
@Override
public Tuple getTuple(EntityKey key, OperationContext operationContext) {
    String entityIdString = entityId( key );
    if ( !connection.exists( entityIdString ) ) {
        return null;
    }

    Map<String, String> objects;
    if ( operationContext.getTupleTypeContext().getSelectableColumns().isEmpty() ) {
        objects = connection.hgetall( entityIdString );
    }
    else {
        List<String> hmget = connection.hmget( entityIdString, getFields( operationContext.getTupleTypeContext() ) );
        objects = toEntity( operationContext.getTupleTypeContext(), hmget );
    }

    return createTuple( objects );
}
项目:hibernate-ogm-ignite    文件:IgniteEmbeddedAssociationSnapshot.java   
public IgniteEmbeddedAssociationSnapshot(AssociationKey associationKey, Tuple tuple) {
    this.associationMetadata = associationKey.getMetadata();
    this.tuple = tuple;
    BinaryObject obj = ( (IgniteTupleSnapshot) tuple.getSnapshot() ).getCacheValue();
    Object objects[] = obj != null ? (Object[]) obj.field( StringHelper.realColumnName( associationMetadata.getCollectionRole() ) ) : null;
    rows = new HashMap<>();
    if ( objects != null ) {
        String rowKeyColumnNames[] = new String[ associationMetadata.getRowKeyColumnNames().length ];
        for ( int i = 0; i < rowKeyColumnNames.length; i++ ) {
            rowKeyColumnNames[i] = StringHelper.stringAfterPoint( associationMetadata.getRowKeyColumnNames()[i] );
        }
        for ( int i = 0; i < objects.length; i++ ) {
            BinaryObject itemObject = (BinaryObject) objects[i];
            Object rowKeyColumnValues[] = new Object[rowKeyColumnNames.length];
            for ( int j = 0; j < rowKeyColumnNames.length; j++ ) {
                rowKeyColumnValues[j] = itemObject.field( rowKeyColumnNames[j] );
            }
            RowKey rowKey = new RowKey( associationMetadata.getRowKeyColumnNames(), rowKeyColumnValues );
            this.rows.put( rowKey, new IgniteTupleSnapshot( null, itemObject, associationMetadata.getAssociatedEntityKeyMetadata().getEntityKeyMetadata() ) );
        }
    }
}
项目:lightblue-hibernate-ogm    文件:LightblueTupleSnapshot.java   
public void update(Tuple tuple) {
    for (TupleOperation operation : tuple.getOperations()) {
        columnNames.add(operation.getColumn());
        ObjectNode context = node;
        String[] components = operation.getColumn().split("\\.");
        for (int i = 0; i < components.length - 1; i++) {
            context = ensureNode(context, components[i]);
        }
        String fieldName = components[components.length - 1];
        switch (operation.getType()) {
        case PUT:
            context.putPOJO(fieldName, operation.getValue());
            break;
        default:
            context.putNull(fieldName);
        }
    }
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
@Override
public Tuple getTuple(EntityKey key, OperationContext operationContext) {
    Entity entity = entityStorageStrategy.getEntity( entityId( key ) );

    if ( entity != null ) {
        return new Tuple( new RedisJsonTupleSnapshot( entity ), SnapshotType.UPDATE );
    }
    else if ( isInTheInsertionQueue( key, operationContext ) ) {
        return createTuple( key, operationContext );
    }
    else {
        return null;
    }
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
@Override
public org.hibernate.ogm.model.spi.Association createAssociation(
        AssociationKey key,
        AssociationContext associationContext) {
    RedisAssociation redisAssociation;

    if ( isStoredInEntityStructure( key.getMetadata(), associationContext.getAssociationTypeContext() ) ) {
        TuplePointer tuplePointer = getEmbeddingEntityTuplePointer( key, associationContext );
        Entity owningEntity = getEntityFromTuple( tuplePointer.getTuple() );

        if ( owningEntity == null ) {
            owningEntity = new Entity();
            storeEntity( key.getEntityKey(), owningEntity, associationContext.getAssociationTypeContext().getHostingEntityOptionsContext() );
            tuplePointer.setTuple( new Tuple( new RedisJsonTupleSnapshot( owningEntity ), SnapshotType.UPDATE ) );
        }

        redisAssociation = RedisAssociation.fromEmbeddedAssociation( tuplePointer, key.getMetadata() );
    }
    else {
        redisAssociation = RedisAssociation.fromAssociationDocument( new Association() );
    }

    org.hibernate.ogm.model.spi.Association association = new org.hibernate.ogm.model.spi.Association(
            new RedisAssociationSnapshot(
                    redisAssociation,
                    key
            )
    );

    // in the case of an association stored in the entity structure, we might end up with rows present in the current snapshot of the entity
    // while we want an empty association here. So, in this case, we clear the snapshot to be sure the association created is empty.
    if ( !association.isEmpty() ) {
        association.clear();
    }

    return association;
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
@Override
public Tuple next() {
    String key = iterator.next();
    Entity document = storageStrategy.getEntity( key );
    addKeyValuesFromKeyName( entityKeyMetadata, prefix, key, document );
    return createTuple( document );
}
项目:hibernate-ogm-redis    文件:Base64ByteArrayMappedGridTypeDescriptor.java   
@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 ) );
        }
    };
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
@Override
public Association createAssociation(
        AssociationKey key, AssociationContext associationContext) {

    RedisAssociation redisAssociation;
    if ( isStoredInEntityStructure( key.getMetadata(), associationContext.getAssociationTypeContext() ) ) {
        TuplePointer tuplePointer = getEmbeddingEntityTuplePointer( key, associationContext );
        HashEntity owningEntity = getEntityFromTuple( tuplePointer.getTuple() );

        if ( owningEntity == null ) {
            owningEntity = new HashEntity( new HashMap<String, String>() );
            storeEntity( key.getEntityKey(), owningEntity, associationContext.getAssociationTypeContext().getHostingEntityOptionsContext() );
            tuplePointer.setTuple( new Tuple( new RedisHashTupleSnapshot( owningEntity ), SnapshotType.UPDATE ) );
        }

        redisAssociation = RedisAssociation.fromHashEmbeddedAssociation( tuplePointer, key.getMetadata() );

    }
    else {
        redisAssociation = RedisAssociation.fromAssociationDocument( new org.hibernate.ogm.datastore.redis.dialect.value.Association() );
    }

    return new org.hibernate.ogm.model.spi.Association(
            new RedisAssociationSnapshot(
                    redisAssociation, key
            )
    );
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
@Override
public Tuple next() {
    String key = iterator.next();
    Map<String, String> hgetall = connection.hgetall( key );
    Map<String, String> properties = new HashMap<>();
    properties.putAll( hgetall );
    addKeyValuesFromKeyName( entityKeyMetadata, prefix, key, properties );
    return createTuple( properties );
}
项目:hibernate-ogm-ignite    文件:IgniteDialect.java   
@Override
public Tuple getTuple(EntityKey key, OperationContext operationContext) {
    IgniteCache<Object, BinaryObject> entityCache = provider.getEntityCache( key.getMetadata() );
    if ( entityCache == null ) {
        throw log.cacheNotFound( key.getMetadata().getTable() );
    }
    Object id = provider.createKeyObject( key );
    BinaryObject po = entityCache.get( id );
    if ( po != null ) {
        return new Tuple( new IgniteTupleSnapshot( id, po, key.getMetadata() ), SnapshotType.UPDATE );
    }
    else {
        return null;
    }
}
项目:hibernate-ogm-ignite    文件:IgniteDialect.java   
@Override
public Tuple createTuple(EntityKey key, OperationContext operationContext) {
    IgniteCache<Object, BinaryObject> entityCache = provider.getEntityCache( key.getMetadata() );
    if ( entityCache == null ) {
        throw log.cacheNotFound( key.getMetadata().getTable() );
    }
    Object id = provider.createKeyObject( key );
    return new Tuple( new IgniteTupleSnapshot( id, null, key.getMetadata() ), SnapshotType.INSERT );
}
项目:hibernate-ogm-ignite    文件:IgniteDialect.java   
@Override
public void insertOrUpdateTuple(EntityKey key, TuplePointer tuplePointer, TupleContext tupleContext) throws TupleAlreadyExistsException {
    IgniteCache<Object, BinaryObject> entityCache = provider.getEntityCache( key.getMetadata() );
    Tuple tuple = tuplePointer.getTuple();

    Object keyObject = null;
    BinaryObjectBuilder builder = null;
    IgniteTupleSnapshot tupleSnapshot = (IgniteTupleSnapshot) tuple.getSnapshot();
    keyObject = tupleSnapshot.getCacheKey();
    if ( tuple.getSnapshotType() == SnapshotType.UPDATE ) {
        builder = provider.createBinaryObjectBuilder( tupleSnapshot.getCacheValue() );
    }
    else {
        builder = provider.createBinaryObjectBuilder( provider.getEntityTypeName( key.getMetadata().getTable() ) );
    }
    for ( String columnName : tuple.getColumnNames() ) {
        Object value = tuple.get( columnName );
        if ( value != null ) {
            builder.setField( StringHelper.realColumnName( columnName ), value );
        }
        else {
            builder.removeField( StringHelper.realColumnName( columnName ) );
        }
    }
    BinaryObject valueObject = builder.build();
    entityCache.put( keyObject, valueObject );
    tuplePointer.setTuple( new Tuple( new IgniteTupleSnapshot( keyObject, valueObject, key.getMetadata() ), SnapshotType.UPDATE ) );
}
项目:hibernate-ogm-ignite    文件:IgniteGridTypeDescriptor.java   
@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) {
            resultset.put( names[0], javaTypeDescriptor.unwrap( value, targetClass, options ) );
        }
    };
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
@Override
public Tuple getTuple(EntityKey key, TupleContext tupleContext) {
    ObjectNode object = fetchObject(key, tupleContext);
    if (object != null) {
        return new Tuple(new LightblueTupleSnapshot(object, key.getMetadata(), OperationType.UPDATE));
    }
    if (isInQueue(key, tupleContext)) {
        return createTuple(key, tupleContext);
    }
    return null;
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
@Override
public Tuple createTuple(EntityKey key, OperationContext operationContext) {
    return new Tuple( new RedisJsonTupleSnapshot( new Entity() ), SnapshotType.INSERT );
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
@Override
public ClosableIterator<Tuple> get(TransactionContext transactionContext) {
    return new RedisJsonTupleIterator( cursor, storageStrategy, prefix, entityKeyMetadata );
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
private Tuple createTuple(Entity document) {
    return new Tuple( new RedisJsonTupleSnapshot( document ), SnapshotType.UPDATE );
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
private Entity getEntityFromTuple(Tuple tuple) {
    if ( tuple == null ) {
        return null;
    }
    return ( (RedisJsonTupleSnapshot) tuple.getSnapshot() ).getEntity();
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
@Override
public Tuple createTuple(EntityKey key, OperationContext operationContext) {
    return new Tuple( new RedisHashTupleSnapshot( new HashEntity( new HashMap<String, String>() ) ), SnapshotType.INSERT );
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
private static Tuple createTuple(Map<String, String> properties) {
    return new Tuple( new RedisHashTupleSnapshot( new HashEntity( properties ) ), SnapshotType.UPDATE );
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
private HashEntity getEntityFromTuple(Tuple tuple) {
    if ( tuple == null ) {
        return null;
    }
    return ( (RedisHashTupleSnapshot) tuple.getSnapshot() ).getEntity();
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
@Override
public ClosableIterator<Tuple> get(TransactionContext transactionContext) {
    return new RedisHashTupleIterator( cursor, connection, prefix, entityKeyMetadata );
}
项目:hibernate-ogm-redis    文件:RedisDialectClusterForEachTest.java   
@Test
public void testScan() throws Exception {

    AbstractRedisDialect dialect = RedisTestHelper.getDialect( getProvider() );
    assumeTrue( dialect.isClusterMode() );

    // pre-computed key file.
    URL resource = Resources.getResource( "redis-cluster-slothashes.txt" );
    List<String> lines = Resources.readLines( resource, StandardCharsets.ISO_8859_1 );

    OgmSession session = openSession();
    session.getTransaction().begin();

    // given
    int availableKeys = 0;
    for ( String line : lines ) {

        if ( line.startsWith( "#" ) || line.trim().isEmpty() ) {
            continue;
        }

        String key = line.substring( 0, line.indexOf( ' ' ) ).trim();

        Band record = new Band( key, key );
        session.persist( record );
        availableKeys++;
    }
    session.getTransaction().commit();

    final AtomicInteger counter = new AtomicInteger();

    dialect.forEachTuple( new ModelConsumer() {
        @Override
        public void consume(TuplesSupplier supplier) {
            try ( ClosableIterator<Tuple> closableIterator = supplier.get( null ) ) {
                while ( closableIterator.hasNext() ) {
                    counter.incrementAndGet();
                }
            }
        }
    }, null, new DefaultEntityKeyMetadata( "Band", new String[] {"id"} ) );

    assertEquals( availableKeys, counter.get() );
}
项目:hibernate-ogm-ignite    文件:IgniteEmbeddedAssociationSnapshot.java   
@Override
public Tuple get(RowKey rowKey) {
    TupleSnapshot row = rows.get( rowKey );
    return row != null ? new Tuple( row, SnapshotType.UPDATE ) : null;
}
项目:hibernate-ogm-ignite    文件:IgniteAssociationSnapshot.java   
@Override
public Tuple get(RowKey rowKey) {
    TupleSnapshot row = rows.get( rowKey );
    return row != null ? new Tuple( row, SnapshotType.UPDATE ) : null;
}
项目:hibernate-ogm-ignite    文件:IgniteDialect.java   
@Override
public Tuple next() {
    T value = resultIterator.next();
    rowNum++;
    return new Tuple( createTupleSnapshot( value ), SnapshotType.UPDATE );
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
@Override
public Tuple createTuple(EntityKey key, TupleContext tupleContext) {
    return new Tuple(new LightblueTupleSnapshot(mapper.createObjectNode(), key.getMetadata(), OperationType.INSERT));
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
@Override
public ClosableIterator<Tuple> executeBackendQuery(BackendQuery<String> query, QueryParameters queryParameters) {
    final String queryString = query.getQuery();
    String entityName = queryParameters.getNamedParameters().get("entityName").getValue().toString();
    String entityVersion = queryParameters.getNamedParameters().get("entityVersion").getValue().toString();
    DataFindRequest request = new DataFindRequest(entityName, entityVersion);
    request.select(new FieldProjection("*", true, true)); // FIXME dummy projection for broken client
    request.where(new Query() {

        @Override
        public String toJson() {
            return queryString;
        }
    });
    JsonNode jsonNode;
    try {
        jsonNode = provider.getLightblueClient().data(request).getJson().get("processed");
        List<Tuple> tuples = new ArrayList<Tuple>(jsonNode.size());
        for (int i = 0; i < jsonNode.size(); i++) {
            tuples.add(tupleFromNode((ObjectNode) jsonNode.get(i), entityName, entityVersion));
        }
        final Iterator<Tuple> iter = tuples.iterator();
        return new ClosableIterator<Tuple>() {

            @Override
            public Tuple next() {
                return iter.next();
            }

            @Override
            public boolean hasNext() {
                return iter.hasNext();
            }

            @Override
            public void close() {
                // NO-OP
            }

            @Override
            public void remove() {
                // TODO Auto-generated method stub

            }
        };
    } catch (LightblueException e) {
        throw new RuntimeException("Error while communicating with lightblue.", e);
    }
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
private Tuple tupleFromNode(ObjectNode objectNode, String entityName, String entityVersion) {
    return new Tuple(new LightblueTupleSnapshot(objectNode, entityName, entityVersion, OperationType.UPDATE));
}