private String createId(IdSourceKey key) { StringBuilder builder = new StringBuilder( key.getTable() ); builder.append( ":" ); builder.append( key.getColumnName() ); builder.append( ":" ); builder.append( key.getColumnValue() ); return builder.toString(); }
@Override public void writeObject(ObjectOutput output, IdSourceKey key) throws IOException { output.writeInt( VERSION ); output.writeUTF( key.getTable() ); //Wrapping in String[] and Object[] respectively as this used to be the format, //to maintain compatibility with Hibernate OGM 5.0 output.writeObject( new String[] { key.getColumnName() } ); output.writeObject( new Object[] { key.getColumnValue() } ); }
@Override public void writeObject(ObjectOutput output, IdSourceKey key) throws IOException { output.writeInt( VERSION ); output.writeUTF( key.getTable() ); //Wrapping in String[] and Object[] respectively as this used to be the format, //to maintain compatibility with Hibernate OGM 5.0 output.writeObject( new String[] { key.getColumnName() } ); output.writeObject( new Object[] { key.getColumnValue() } ); }
private String counterName(NextValueRequest request) { StringBuilder builder = new StringBuilder(); builder.append( request.getKey().getTable() ); builder.append( "." ); builder.append( request.getKey().getColumnValue() ); return builder.toString(); } }
private String counterName(NextValueRequest request) { StringBuilder builder = new StringBuilder(); builder.append( request.getKey().getTable() ); builder.append( "." ); builder.append( request.getKey().getColumnValue() ); return builder.toString(); } }
SerializableIdSourceKey(IdSourceKey key) { columnName = key.getColumnName(); columnValue = key.getColumnValue(); table = key.getTable(); }
/** * Ex.: * <pre> * MATCH (n:hibernate_sequences:TABLE_BASED_SEQUENCE) WHERE n.sequence_name = {sequenceName} RETURN n * </pre> */ private String getTableQuery(IdSourceKey idSourceKey) { String query = queryCache.get( idSourceKey.getTable() ); if ( query == null ) { query = "MATCH (n" + labels( idSourceKey.getTable(), NodeLabel.TABLE_BASED_SEQUENCE.name() ) + ") WHERE n." + idSourceKey.getMetadata().getKeyColumnName() + " = {" + SEQUENCE_NAME_QUERY_PARAM + "} RETURN n"; String cached = queryCache.putIfAbsent( idSourceKey.getTable(), query ); if ( cached != null ) { query = cached; } } return query; }
@Override public Number getSequenceValue(NextValueRequest request) { IdSourceKey idSourceKey = request.getKey(); if ( isSequenceGeneratorId( idSourceKey ) ) { return sequenceHandlers.get( idSourceKey.getTable() ).nextValue( request ); } // else it is TableGenerator: return super.getSequenceValue( request ); }
protected String key(NextValueRequest request) { return request.getKey().getTable() + ":" + request.getInitialValue() + ":" + request.getIncrement(); }
public Number nextValue(NextValueRequest request) { if ( request.getKey().getMetadata().getType().equals( IdSourceType.TABLE ) ) { return tableClusterHandler.nextValue( request ); } return sequenceCounterHandlers .get( request.getKey().getTable() ) .nextValue( request ); } }
public Number nextValue(NextValueRequest request) { if ( request.getKey().getMetadata().getType().equals( IdSourceType.TABLE ) ) { return tableClusterHandler.nextValue( request ); } return sequenceCounterHandlers .get( request.getKey().getTable() ) .nextValue( request ); } }
public Number getSequenceValue(NextValueRequest request) { final String cacheName = request.getKey().getMetadata().getName(); final SequencesPerCache sequencesSet = sequencesPerCache.computeIfAbsent( cacheName, ( k ) -> { SequenceTableDefinition sequenceTableDefinition = idSchemaPerName.get( cacheName ); if ( sequenceTableDefinition == null ) { throw log.valueRequestedForUnknownSequence( request.getKey().getTable(), request.getKey().getColumnValue() ); } return new SequencesPerCache( provider.getCache( cacheName ) ); } ); return sequencesSet.getSequenceValue( request ); } }
@Override public Number nextValue(NextValueRequest request) { String valueColumnName = request.getKey().getMetadata().getValueColumnName(); MongoCollection<Document> sequenceCollection = getCollection( request.getKey().getTable(), null ); Document sequenceId = prepareIdObject( request.getKey() ); Document setInitialValueOnInsert = new Document(); addSubQuery( "$setOnInsert", setInitialValueOnInsert, valueColumnName, request.getInitialValue() + request.getIncrement() ); // I don't trust to make this a constant because the object is not immutable FindOneAndUpdateOptions enableUpsert = new FindOneAndUpdateOptions().upsert( true ); Document originalDocument = sequenceCollection.findOneAndUpdate( sequenceId, setInitialValueOnInsert, enableUpsert ); Object nextValue = null; if ( originalDocument == null ) { return request.getInitialValue(); // first time we ask this value } else { // all columns should match to find the value Document incrementUpdate = new Document(); addSubQuery( "$inc", incrementUpdate, valueColumnName, request.getIncrement() ); Document beforeUpdateDoc = sequenceCollection.findOneAndUpdate( sequenceId, incrementUpdate, new FindOneAndUpdateOptions().upsert( true ) ); nextValue = beforeUpdateDoc.get( valueColumnName ); } return (Number) nextValue; }
@Override public Number nextValue(NextValueRequest request) { String valueColumnName = request.getKey().getMetadata().getValueColumnName(); MongoCollection<Document> sequenceCollection = getCollection( request.getKey().getTable(), null ); Document sequenceId = prepareIdObject( request.getKey() ); Document setInitialValueOnInsert = new Document(); addSubQuery( "$setOnInsert", setInitialValueOnInsert, valueColumnName, request.getInitialValue() + request.getIncrement() ); // I don't trust to make this a constant because the object is not immutable FindOneAndUpdateOptions enableUpsert = new FindOneAndUpdateOptions().upsert( true ); Document originalDocument = sequenceCollection.findOneAndUpdate( sequenceId, setInitialValueOnInsert, enableUpsert ); Object nextValue = null; if ( originalDocument == null ) { return request.getInitialValue(); // first time we ask this value } else { // all columns should match to find the value Document incrementUpdate = new Document(); addSubQuery( "$inc", incrementUpdate, valueColumnName, request.getIncrement() ); Document beforeUpdateDoc = sequenceCollection.findOneAndUpdate( sequenceId, incrementUpdate, new FindOneAndUpdateOptions().upsert( true ) ); nextValue = beforeUpdateDoc.get( valueColumnName ); } return (Number) nextValue; }