private void validateGenerators(Iterable<IdSourceKeyMetadata> allIdSourceKeyMetadata) { for ( IdSourceKeyMetadata idSourceKeyMetadata : allIdSourceKeyMetadata ) { String keyColumn = idSourceKeyMetadata.getKeyColumnName(); if ( !keyColumn.equals( MongoDBDialect.ID_FIELDNAME ) ) { log.cannotUseGivenPrimaryKeyColumnName( keyColumn, MongoDBDialect.ID_FIELDNAME ); } } }
private IdSourceKey(IdSourceKeyMetadata metadata, String columnValue) { this.metadata = metadata; this.columnName = metadata.getKeyColumnName(); this.columnValue = columnValue; this.hashCode = calculateHashCode(); }
private void validateGenerators(Iterable<IdSourceKeyMetadata> allIdSourceKeyMetadata) { for ( IdSourceKeyMetadata idSourceKeyMetadata : allIdSourceKeyMetadata ) { String keyColumn = idSourceKeyMetadata.getKeyColumnName(); if ( !keyColumn.equals( MongoDBDialect.ID_FIELDNAME ) ) { log.cannotUseGivenPrimaryKeyColumnName( keyColumn, MongoDBDialect.ID_FIELDNAME ); } } }
public void createSequence(IdSourceKeyMetadata metadata, CassandraDatastoreProvider datastoreProvider) { List<String> primaryKeyName = new ArrayList<String>( 1 ); primaryKeyName.add( metadata.getKeyColumnName() ); List<String> columnNames = new ArrayList<String>( 2 ); columnNames.add( metadata.getKeyColumnName() ); columnNames.add( metadata.getValueColumnName() ); List<String> columnTypes = new ArrayList<String>( 2 ); columnTypes.add( "varchar" ); columnTypes.add( "bigint" ); datastoreProvider.createColumnFamilyIfNeeded( metadata.getName(), primaryKeyName, columnNames, columnTypes ); }
/** * Adds a unique constraint to make sure that each node of the same "sequence table" is unique. */ private void addUniqueConstraintForTableBasedSequence(List<Statement> statements, IdSourceKeyMetadata generatorKeyMetadata) { Statement statement = createUniqueConstraintStatement( generatorKeyMetadata.getKeyColumnName(), generatorKeyMetadata.getName() ); statements.add( statement ); }
protected String acquireLockQuery(NextValueRequest request) { StringBuilder queryBuilder = new StringBuilder(); IdSourceKeyMetadata metadata = request.getKey().getMetadata(); queryBuilder.append( "MERGE (n" ); queryBuilder.append( labels( metadata.getName(), NodeLabel.TABLE_BASED_SEQUENCE.name() ) ); queryBuilder.append( " { " ); queryBuilder.append( metadata.getKeyColumnName() ); queryBuilder.append( ": {" ); queryBuilder.append( SEQUENCE_NAME_QUERY_PARAM ); queryBuilder.append( "}} ) " ); queryBuilder.append( " ON MATCH SET n.__locked=true " ); queryBuilder.append( " ON CREATE SET n.__locked=true, n." ); queryBuilder.append( metadata.getValueColumnName() ); queryBuilder.append( " = " ); queryBuilder.append( request.getInitialValue() ); queryBuilder.append( " RETURN n." ); queryBuilder.append( metadata.getValueColumnName() ); String query = queryBuilder.toString(); return query; }
protected String increaseQuery(NextValueRequest request) { StringBuilder queryBuilder = new StringBuilder(); IdSourceKeyMetadata metadata = request.getKey().getMetadata(); queryBuilder.append( " MATCH (n " ); queryBuilder.append( labels( metadata.getName(), NodeLabel.TABLE_BASED_SEQUENCE.name() ) ); queryBuilder.append( " { " ); queryBuilder.append( metadata.getKeyColumnName() ); queryBuilder.append( ": {" ); queryBuilder.append( SEQUENCE_NAME_QUERY_PARAM ); queryBuilder.append( "}} )" ); queryBuilder.append( " SET n." ); queryBuilder.append( metadata.getValueColumnName() ); queryBuilder.append( " = n." ); queryBuilder.append( metadata.getValueColumnName() ); queryBuilder.append( " + " ); queryBuilder.append( request.getIncrement() ); queryBuilder.append( " REMOVE n.__locked RETURN n." ); queryBuilder.append( metadata.getValueColumnName() ); String query = queryBuilder.toString(); return query; }
/** * Adds a unique constraint to make sure that each node of the same "sequence table" is unique. */ private void addUniqueConstraintForTableBasedSequence(Statements statements, IdSourceKeyMetadata generatorKeyMetadata) { Statement statement = createUniqueConstraintStatement( generatorKeyMetadata.getKeyColumnName(), generatorKeyMetadata.getName() ); statements.addStatement( statement ); }
public SequenceTableDefinition(IdSourceKeyMetadata idSourceKeyMetadata, String protobufPackageName) { this.protobufPackageName = protobufPackageName; this.messageName = inferMessageName( idSourceKeyMetadata ); this.idMessageName = SanitationUtils.toProtobufIdName( messageName ); this.keyColumnName = SanitationUtils.convertNameSafely( idSourceKeyMetadata.getKeyColumnName() ); this.valueColumnName = SanitationUtils.convertNameSafely( idSourceKeyMetadata.getValueColumnName() ); this.sequenceNameEncoder = new StringProtofieldAccessor( 1, keyColumnName, false, idSourceKeyMetadata.getKeyColumnName() ); this.valueEncoder = new LongProtofieldAccessor( 2, valueColumnName, false, idSourceKeyMetadata.getValueColumnName() ); }
/** * Adds a unique constraint to make sure that each node of the same "sequence table" is unique. */ private void addUniqueConstraintForTableBasedSequence(IdSourceKeyMetadata generatorKeyMetadata) { Label generatorKeyLabel = Label.label( generatorKeyMetadata.getName() ); if ( isMissingUniqueConstraint( generatorKeyLabel ) ) { neo4jDb.schema().constraintFor( generatorKeyLabel ).assertPropertyIsUnique( generatorKeyMetadata.getKeyColumnName() ).create(); } }
/** * Ex.: * <pre> * MERGE (n:hibernate_sequences:TABLE_BASED_SEQUENCE {sequence_name: {sequenceName}}) ON CREATE SET n.current_value = {initialValue} RETURN n * </pre> */ private void addTableSequence(NextValueRequest request) { IdSourceKeyMetadata idSourceKeyMetadata = request.getKey().getMetadata(); String query = "MERGE (n" + labels( idSourceKeyMetadata.getName(), NodeLabel.TABLE_BASED_SEQUENCE.name() ) + " { " + idSourceKeyMetadata.getKeyColumnName() + ": {" + SEQUENCE_NAME_QUERY_PARAM + "}} ) ON CREATE SET n." + idSourceKeyMetadata.getValueColumnName() + " = {" + INITIAL_VALUE_QUERY_PARAM + "} RETURN n"; neo4jDb.execute( query, params( request ) ); }
/** * 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; }
private Long nextValueSelect(IdSourceKeyMetadata metadata, String sequenceName) { Statement select = QueryBuilder.select().column( quote( metadata.getValueColumnName() ) ) .from( quote( metadata.getName() ) ) .where( eq( metadata.getKeyColumnName(), QueryBuilder.bindMarker() ) ); PreparedStatement preparedStatement = provider.getSession().prepare( select.toString() ); BoundStatement boundStatement = preparedStatement.bind( sequenceName ); ResultSet resultSet; try { resultSet = provider.getSession().execute( boundStatement ); } catch (DriverException e) { throw e; } if ( resultSet.isExhausted() ) { return null; } else { return resultSet.one().getLong( 0 ); } }
private Long nextValueInsert(IdSourceKeyMetadata metadata, String sequenceName, Long value) { Insert insert = QueryBuilder.insertInto( quote( metadata.getName() ) ) .value( quote( metadata.getKeyColumnName() ), QueryBuilder.bindMarker( "sequence_name" ) ) .value( quote( metadata.getValueColumnName() ), QueryBuilder.bindMarker( "sequence_value" ) ) .ifNotExists(); PreparedStatement preparedStatement = provider.getSession().prepare( insert.toString() ); BoundStatement boundStatement = preparedStatement.bind(); boundStatement.setString( "sequence_name", sequenceName ); boundStatement.setLong( "sequence_value", value ); try { provider.getSession().execute( boundStatement ); } catch (DriverException e) { throw e; } return nextValueSelect( metadata, sequenceName ); }
private boolean nextValueUpdate(IdSourceKeyMetadata metadata, String sequenceName, Long oldValue, Long newValue) { Statement update = QueryBuilder.update( quote( metadata.getName() ) ) .with( set( quote( metadata.getValueColumnName() ), QueryBuilder.bindMarker( "sequence_value_new" ) ) ) .where( eq( quote( metadata.getKeyColumnName() ), QueryBuilder.bindMarker( "sequence_name" ) ) ) .onlyIf( eq( quote( metadata.getValueColumnName() ), QueryBuilder.bindMarker( "sequence_value_old" ) ) ); PreparedStatement preparedStatement = provider.getSession().prepare( update.toString() ); BoundStatement boundStatement = preparedStatement.bind(); boundStatement.setString( "sequence_name", sequenceName ); boundStatement.setLong( "sequence_value_new", newValue ); boundStatement.setLong( "sequence_value_old", oldValue ); ResultSet resultSet; try { resultSet = provider.getSession().execute( boundStatement ); } catch (DriverException e) { throw e; } return resultSet.one().getBool( 0 ); }