private boolean hasIdGeneration(Set<IdSourceKeyMetadata> idSourceKeys) { for ( IdSourceKeyMetadata idSourceKeyMetadata : idSourceKeys ) { if ( idSourceKeyMetadata.getType() == IdSourceType.TABLE ) { return true; } } return false; }
private boolean hasIdGeneration(Set<IdSourceKeyMetadata> idSourceKeys) { for ( IdSourceKeyMetadata idSourceKeyMetadata : idSourceKeys ) { if ( idSourceKeyMetadata.getType() == IdSourceType.TABLE ) { return true; } } return false; }
public void createUniqueConstraintsForTableSequences(Statements statements, Iterable<IdSourceKeyMetadata> tableIdGenerators) { for ( IdSourceKeyMetadata idSourceKeyMetadata : tableIdGenerators ) { if ( idSourceKeyMetadata.getType() == IdSourceType.TABLE ) { addUniqueConstraintForTableBasedSequence( statements, idSourceKeyMetadata ); } } }
public void createUniqueConstraintsForTableSequences(List<Statement> statements, Iterable<IdSourceKeyMetadata> tableIdGenerators) { for ( IdSourceKeyMetadata idSourceKeyMetadata : tableIdGenerators ) { if ( idSourceKeyMetadata.getType() == IdSourceType.TABLE ) { addUniqueConstraintForTableBasedSequence( statements, idSourceKeyMetadata ); } } }
public static boolean isSequenceGeneratorId(IdSourceKeyMetadata idSourceKeyMetadata) { return IdSourceKeyMetadata.IdSourceType.SEQUENCE.equals( idSourceKeyMetadata.getType() ); } }
private String getQuery(IdSourceKey idSourceKey) { return idSourceKey.getMetadata().getType() == IdSourceType.TABLE ? getTableQuery( idSourceKey ) : SEQUENCE_VALUE_QUERY; }
private Long updateSequenceValue(IdSourceKey idSourceKey, Node sequence, int increment) { String valueProperty = idSourceKey.getMetadata().getType() == IdSourceType.TABLE ? idSourceKey.getMetadata().getValueColumnName() : SEQUENCE_VALUE_PROPERTY; Number currentValue = (Number) sequence.getProperty( valueProperty ); long updatedValue = currentValue.longValue() + increment; sequence.setProperty( valueProperty, updatedValue ); return currentValue.longValue(); } }
protected RemoteStatements updateNextValueQuery(NextValueRequest request) { return request.getKey().getMetadata().getType() == IdSourceType.TABLE ? getTableQuery( request ) : getSequenceIncrementQuery( request ); }
protected String sequenceName(IdSourceKey key) { return key.getMetadata().getType() == IdSourceType.SEQUENCE ? key.getMetadata().getName() : key.getColumnValue(); }
public void createUniqueConstraintsForTableSequences(Iterable<IdSourceKeyMetadata> tableIdGenerators) { Transaction tx = null; try { tx = neo4jDb.beginTx(); for ( IdSourceKeyMetadata idSourceKeyMetadata : tableIdGenerators ) { if ( idSourceKeyMetadata.getType() == IdSourceType.TABLE ) { addUniqueConstraintForTableBasedSequence( idSourceKeyMetadata ); } } tx.success(); } finally { tx.close(); } }
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 ); } }
/** * Generate the next value in a sequence for a given {@link IdSourceKey}. * * @return the next value in a sequence */ @Override public Long nextValue(NextValueRequest request) { String sequenceName = sequenceName( request.getKey() ); // This method return 2 statements: the first one to acquire a lock and the second one to update the sequence node RemoteStatements remoteStatements = updateNextValueQuery( request ); Number nextValue = nextValue( remoteStatements ); // sequence nodes are expected to have been created up-front if ( request.getKey().getMetadata().getType() == IdSourceType.SEQUENCE ) { if ( nextValue == null ) { throw logger.sequenceNotFound( sequenceName ); } } // The only way I found to make it work in a multi-threaded environment is to first increment the value and then read it. // Our API allows for an initial value and to make sure that I'm actually reading the correct one, // the first time I need to decrement the value I obtain from the db. return nextValue.longValue() - request.getIncrement(); }
private void initializeIdSources(SchemaDefinitionContext context, IgniteDatastoreProvider igniteDatastoreProvider) { if ( idSourceKeyMetadata.getType() == IdSourceKeyMetadata.IdSourceType.TABLE ) { try { try { if ( idSourceKeyMetadata.getType() == IdSourceKeyMetadata.IdSourceType.SEQUENCE ) { if ( idSourceKeyMetadata.getName() != null && !generatedSequences.contains( idSourceKeyMetadata.getName() ) ) { igniteDatastoreProvider.atomicSequence( idSourceKeyMetadata.getName(), 1, true );
if ( request.getKey().getMetadata().getType() == IdSourceType.SEQUENCE ) { throw logger.sequenceNotFound( sequenceName( request.getKey() ) );
@Override public Number nextValue(NextValueRequest request) { Long result = null; switch ( request.getKey().getMetadata().getType() ) { case TABLE: IgniteCache<String, Long> cache = provider.getIdSourceCache( request.getKey().getMetadata() );