Search in sources :

Example 1 with Update

use of com.datastax.oss.driver.api.querybuilder.update.Update in project spring-data-cassandra by spring-projects.

the class CassandraTemplate method doUpdateVersioned.

private <T> EntityWriteResult<T> doUpdateVersioned(T entity, UpdateOptions options, CqlIdentifier tableName, CassandraPersistentEntity<?> persistentEntity) {
    AdaptibleEntity<T> source = getEntityOperations().forEntity(entity, getConverter().getConversionService());
    Number previousVersion = source.getVersion();
    T toSave = source.incrementVersion();
    StatementBuilder<Update> builder = getStatementFactory().update(toSave, options, persistentEntity, tableName);
    SimpleStatement update = source.appendVersionCondition(builder, previousVersion).build();
    return executeSave(toSave, tableName, update, result -> {
        if (!result.wasApplied()) {
            throw new OptimisticLockingFailureException(String.format("Cannot save entity %s with version %s to table %s. Has it been modified meanwhile?", toSave, source.getVersion(), tableName));
        }
    });
}
Also used : OptimisticLockingFailureException(org.springframework.dao.OptimisticLockingFailureException) SimpleStatement(com.datastax.oss.driver.api.core.cql.SimpleStatement) Update(com.datastax.oss.driver.api.querybuilder.update.Update)

Example 2 with Update

use of com.datastax.oss.driver.api.querybuilder.update.Update in project archiva by apache.

the class CassandraMetadataRepository method updateFacets.

/*
     * iterate over available facets to remove/add from the artifactMetadata
     *
     * @param facetedMetadata
     * @param artifactMetadataModel only use for the key
     */
private void updateFacets(final FacetedMetadata facetedMetadata, final ArtifactMetadataModel artifactMetadataModel) {
    String table = cassandraArchivaManager.getMetadataFacetFamilyName();
    CqlSession session = cassandraArchivaManager.getSession();
    {
        for (final String facetId : getSupportedFacets()) {
            MetadataFacet metadataFacet = facetedMetadata.getFacet(facetId);
            if (metadataFacet != null) {
                Select deleteRows = selectFrom(table).column(DEFAULT_PRIMARY_KEY).whereColumn(REPOSITORY_NAME.toString()).isEqualTo(literal(artifactMetadataModel.getRepositoryId())).whereColumn(NAMESPACE_ID.toString()).isEqualTo(literal(artifactMetadataModel.getNamespace())).whereColumn(PROJECT_ID.toString()).isEqualTo(literal(artifactMetadataModel.getProject())).whereColumn(PROJECT_VERSION.toString()).isEqualTo(literal(artifactMetadataModel.getProjectVersion())).whereColumn(FACET_ID.toString()).isEqualTo(literal(facetId)).allowFiltering();
                ResultSet resultSet = session.execute(deleteRows.build());
                StreamSupport.stream(resultSet.spliterator(), false).map(row -> row.getString(DEFAULT_PRIMARY_KEY)).distinct().forEach(key -> {
                    Delete delete = deleteFrom(table).whereColumn(DEFAULT_PRIMARY_KEY).isEqualTo(literal(key));
                    session.execute(delete.build());
                });
                Map<String, String> properties = metadataFacet.toProperties();
                for (Map.Entry<String, String> entry : properties.entrySet()) {
                    String key = new MetadataFacetModel.KeyBuilder().withKey(entry.getKey()).withArtifactMetadataModel(artifactMetadataModel).withFacetId(facetId).withName(metadataFacet.getName()).build();
                    Update update = update(table).setColumn(REPOSITORY_NAME.toString(), literal(artifactMetadataModel.getRepositoryId())).setColumn(NAMESPACE_ID.toString(), literal(artifactMetadataModel.getNamespace())).setColumn(PROJECT_ID.toString(), literal(artifactMetadataModel.getProject())).setColumn(PROJECT_VERSION.toString(), literal(artifactMetadataModel.getProjectVersion())).setColumn(FACET_ID.toString(), literal(facetId)).setColumn(KEY.toString(), literal(entry.getKey())).setColumn(VALUE.toString(), literal(entry.getValue())).whereColumn(DEFAULT_PRIMARY_KEY).isEqualTo(literal(key));
                    session.execute(update.build());
                }
            }
        }
    }
}
Also used : QueryBuilder(com.datastax.oss.driver.api.querybuilder.QueryBuilder) MailingList(org.apache.archiva.metadata.model.MailingList) Arrays(java.util.Arrays) ZonedDateTime(java.time.ZonedDateTime) BiFunction(java.util.function.BiFunction) Insert(com.datastax.oss.driver.api.querybuilder.insert.Insert) RepositorySession(org.apache.archiva.metadata.repository.RepositorySession) LoggerFactory(org.slf4j.LoggerFactory) Delete(com.datastax.oss.driver.api.querybuilder.delete.Delete) UpdateWithAssignments(com.datastax.oss.driver.api.querybuilder.update.UpdateWithAssignments) StringUtils(org.apache.commons.lang3.StringUtils) STORAGE_TZ(org.apache.archiva.metadata.model.ModelInfo.STORAGE_TZ) MetadataRepository(org.apache.archiva.metadata.repository.MetadataRepository) Map(java.util.Map) ProjectMetadata(org.apache.archiva.metadata.model.ProjectMetadata) Select(com.datastax.oss.driver.api.querybuilder.select.Select) DEFAULT_PRIMARY_KEY(org.apache.archiva.metadata.repository.cassandra.CassandraArchivaManager.DEFAULT_PRIMARY_KEY) ArtifactMetadata(org.apache.archiva.metadata.model.ArtifactMetadata) ColumnDefinition(com.datastax.oss.driver.api.core.cql.ColumnDefinition) ProjectVersionReference(org.apache.archiva.metadata.model.ProjectVersionReference) ColumnNames(org.apache.archiva.metadata.repository.cassandra.model.ColumnNames) Update(com.datastax.oss.driver.api.querybuilder.update.Update) CiManagement(org.apache.archiva.metadata.model.CiManagement) IssueManagement(org.apache.archiva.metadata.model.IssueManagement) UUID(java.util.UUID) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) MetadataService(org.apache.archiva.metadata.repository.MetadataService) List(java.util.List) Stream(java.util.stream.Stream) License(org.apache.archiva.metadata.model.License) Dependency(org.apache.archiva.metadata.model.Dependency) MetadataFacetFactory(org.apache.archiva.metadata.model.MetadataFacetFactory) UpdateStart(com.datastax.oss.driver.api.querybuilder.update.UpdateStart) Spliterator(java.util.Spliterator) MetadataRepositoryException(org.apache.archiva.metadata.repository.MetadataRepositoryException) Repository(org.apache.archiva.metadata.repository.cassandra.model.Repository) AbstractMetadataRepository(org.apache.archiva.metadata.repository.AbstractMetadataRepository) MetadataFacet(org.apache.archiva.metadata.model.MetadataFacet) ClusteringOrder(com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder) HashMap(java.util.HashMap) Namespace(org.apache.archiva.metadata.repository.cassandra.model.Namespace) ArtifactMetadataModel(org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel) ArrayList(java.util.ArrayList) ModelMapper(org.modelmapper.ModelMapper) ProjectVersionMetadata(org.apache.archiva.metadata.model.ProjectVersionMetadata) CqlSession(com.datastax.oss.driver.api.core.CqlSession) QueryParameter(org.apache.archiva.metadata.QueryParameter) ProjectVersionMetadataModel(org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel) ChecksumAlgorithm(org.apache.archiva.checksum.ChecksumAlgorithm) Project(org.apache.archiva.metadata.repository.cassandra.model.Project) StreamSupport(java.util.stream.StreamSupport) Organization(org.apache.archiva.metadata.model.Organization) FacetedMetadata(org.apache.archiva.metadata.model.FacetedMetadata) Scm(org.apache.archiva.metadata.model.Scm) LinkedList(java.util.LinkedList) Row(com.datastax.oss.driver.api.core.cql.Row) RegularInsert(com.datastax.oss.driver.api.querybuilder.insert.RegularInsert) Logger(org.slf4j.Logger) Properties(java.util.Properties) Iterator(java.util.Iterator) ResultSet(com.datastax.oss.driver.api.core.cql.ResultSet) Consumer(java.util.function.Consumer) MetadataResolutionException(org.apache.archiva.metadata.repository.MetadataResolutionException) MetadataFacetModel(org.apache.archiva.metadata.repository.cassandra.model.MetadataFacetModel) Comparator(java.util.Comparator) Delete(com.datastax.oss.driver.api.querybuilder.delete.Delete) Select(com.datastax.oss.driver.api.querybuilder.select.Select) ResultSet(com.datastax.oss.driver.api.core.cql.ResultSet) MetadataFacet(org.apache.archiva.metadata.model.MetadataFacet) Update(com.datastax.oss.driver.api.querybuilder.update.Update) CqlSession(com.datastax.oss.driver.api.core.CqlSession) Map(java.util.Map) HashMap(java.util.HashMap)

Example 3 with Update

use of com.datastax.oss.driver.api.querybuilder.update.Update in project archiva by apache.

the class CassandraMetadataRepository method addMetadataFacet.

@Override
public void addMetadataFacet(RepositorySession repositorySession, String repositoryId, MetadataFacet metadataFacet) throws MetadataRepositoryException {
    if (metadataFacet == null) {
        return;
    }
    final String table = this.cassandraArchivaManager.getMetadataFacetFamilyName();
    if (metadataFacet.toProperties().isEmpty()) {
        String key = new MetadataFacetModel.KeyBuilder().withRepositoryId(repositoryId).withFacetId(metadataFacet.getFacetId()).withName(metadataFacet.getName()).build();
        CqlSession session = cassandraArchivaManager.getSession();
        {
            Update update = update(table).setColumn(REPOSITORY_NAME.toString(), literal(repositoryId)).setColumn(FACET_ID.toString(), literal(metadataFacet.getFacetId())).setColumn(NAME.toString(), literal(metadataFacet.getName())).whereColumn(DEFAULT_PRIMARY_KEY).isEqualTo(literal(key));
            session.execute(update.build());
        }
    } else {
        CqlSession session = cassandraArchivaManager.getSession();
        {
            for (Map.Entry<String, String> entry : metadataFacet.toProperties().entrySet()) {
                String key = new MetadataFacetModel.KeyBuilder().withRepositoryId(repositoryId).withFacetId(metadataFacet.getFacetId()).withName(metadataFacet.getName()).withKey(entry.getKey()).build();
                Update update = update(table).setColumn(REPOSITORY_NAME.toString(), literal(repositoryId)).setColumn(FACET_ID.toString(), literal(metadataFacet.getFacetId())).setColumn(NAME.toString(), literal(metadataFacet.getName())).setColumn(KEY.toString(), literal(entry.getKey())).setColumn(VALUE.toString(), literal(entry.getValue())).whereColumn(DEFAULT_PRIMARY_KEY).isEqualTo(literal(key));
                session.execute(update.build());
            }
        }
    }
}
Also used : Update(com.datastax.oss.driver.api.querybuilder.update.Update) CqlSession(com.datastax.oss.driver.api.core.CqlSession)

Example 4 with Update

use of com.datastax.oss.driver.api.querybuilder.update.Update in project archiva by apache.

the class CassandraMetadataRepository method updateArtifact.

@Override
public void updateArtifact(RepositorySession repositorySession, String repositoryId, String namespaceId, String projectId, String projectVersion, ArtifactMetadata artifactMeta) throws MetadataRepositoryException {
    Namespace namespace = getNamespace(repositoryId, namespaceId);
    if (namespace == null) {
        namespace = updateOrAddNamespace(repositoryId, namespaceId);
    }
    ProjectMetadata projectMetadata = new ProjectMetadata();
    projectMetadata.setId(projectId);
    projectMetadata.setNamespace(namespaceId);
    updateProject(repositorySession, repositoryId, projectMetadata);
    String key = new ArtifactMetadataModel.KeyBuilder().withNamespace(namespace).withProject(projectId).withId(artifactMeta.getId()).withProjectVersion(projectVersion).build();
    String table = this.cassandraArchivaManager.getArtifactMetadataFamilyName();
    CqlSession session = cassandraArchivaManager.getSession();
    {
        Update update = update(table).setColumn(ID.toString(), // 
        literal(artifactMeta.getId())).setColumn(REPOSITORY_NAME.toString(), // 
        literal(repositoryId)).setColumn(NAMESPACE_ID.toString(), // 
        literal(namespaceId)).setColumn(PROJECT_ID.toString(), // 
        literal(artifactMeta.getProject())).setColumn(PROJECT_VERSION.toString(), // 
        literal(projectVersion)).setColumn(VERSION.toString(), // 
        literal(artifactMeta.getVersion())).setColumn(FILE_LAST_MODIFIED.toString(), // 
        literal(artifactMeta.getFileLastModified().toInstant().toEpochMilli())).setColumn(SIZE.toString(), // 
        literal(artifactMeta.getSize())).setColumn((WHEN_GATHERED.toString()), literal(artifactMeta.getWhenGathered().toInstant().toEpochMilli())).whereColumn(DEFAULT_PRIMARY_KEY).isEqualTo(literal(key));
        session.execute(update.build()).wasApplied();
        removeChecksums(key);
        recordChecksums(repositoryId, key, mapChecksums(artifactMeta.getChecksums()));
        key = // 
        new ProjectVersionMetadataModel.KeyBuilder().withRepository(// 
        repositoryId).withNamespace(// 
        namespace).withProjectId(// 
        projectId).withProjectVersion(// 
        projectVersion).withId(// 
        artifactMeta.getId()).build();
        table = cassandraArchivaManager.getProjectVersionMetadataFamilyName();
        Insert insert = insertInto(table).value(DEFAULT_PRIMARY_KEY, literal(key)).value(REPOSITORY_NAME.toString(), literal(repositoryId)).value(NAMESPACE_ID.toString(), literal(namespaceId)).value(PROJECT_ID.toString(), literal(projectId)).value(PROJECT_VERSION.toString(), literal(projectVersion)).value(VERSION.toString(), literal(artifactMeta.getVersion())).ifNotExists();
        session.execute(insert.build());
    }
    ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel();
    artifactMetadataModel.setRepositoryId(repositoryId);
    artifactMetadataModel.setNamespace(namespaceId);
    artifactMetadataModel.setProject(projectId);
    artifactMetadataModel.setProjectVersion(projectVersion);
    artifactMetadataModel.setVersion(artifactMeta.getVersion());
    artifactMetadataModel.setFileLastModified(artifactMeta.getFileLastModified() == null ? ZonedDateTime.now().toInstant().toEpochMilli() : artifactMeta.getFileLastModified().toInstant().toEpochMilli());
    artifactMetadataModel.setChecksums(mapChecksums(artifactMeta.getChecksums()));
    // now facets
    updateFacets(artifactMeta, artifactMetadataModel);
}
Also used : ArtifactMetadataModel(org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel) ProjectMetadata(org.apache.archiva.metadata.model.ProjectMetadata) Update(com.datastax.oss.driver.api.querybuilder.update.Update) Insert(com.datastax.oss.driver.api.querybuilder.insert.Insert) RegularInsert(com.datastax.oss.driver.api.querybuilder.insert.RegularInsert) CqlSession(com.datastax.oss.driver.api.core.CqlSession) Namespace(org.apache.archiva.metadata.repository.cassandra.model.Namespace)

Example 5 with Update

use of com.datastax.oss.driver.api.querybuilder.update.Update in project camel-spring-boot by apache.

the class CassandraComponentProducerIT method testEndpointNoCqlParameter.

/**
 * Simulate different CQL statements in the incoming message containing a header with RegularStatement, justifying
 * the cassandracql endpoint not containing a "cql" Uri parameter
 */
@Test
public void testEndpointNoCqlParameter() {
    Update update = QueryBuilder.update("camel_user").setColumn("first_name", bindMarker()).whereColumn("login").isEqualTo(bindMarker());
    producerTemplateNoEndpointCql.sendBodyAndHeader(new Object[] { "Claus 2", "c_ibsen" }, CassandraConstants.CQL_QUERY, update.build());
    ResultSet resultSet1 = getSession().execute(String.format("select login, first_name, last_name from camel_user where login = '%s'", "c_ibsen"));
    Row row1 = resultSet1.one();
    assertNotNull(row1);
    assertEquals("Claus 2", row1.getString("first_name"));
    assertEquals("Ibsen", row1.getString("last_name"));
    update = QueryBuilder.update("camel_user").setColumn("last_name", bindMarker()).whereColumn("login").isEqualTo(bindMarker());
    producerTemplateNoEndpointCql.sendBodyAndHeader(new Object[] { "Ibsen 2", "c_ibsen" }, CassandraConstants.CQL_QUERY, update.build());
    ResultSet resultSet2 = getSession().execute(String.format("select login, first_name, last_name from camel_user where login = '%s'", "c_ibsen"));
    Row row2 = resultSet2.one();
    assertNotNull(row2);
    assertEquals("Claus 2", row2.getString("first_name"));
    assertEquals("Ibsen 2", row2.getString("last_name"));
}
Also used : ResultSet(com.datastax.oss.driver.api.core.cql.ResultSet) Row(com.datastax.oss.driver.api.core.cql.Row) Update(com.datastax.oss.driver.api.querybuilder.update.Update) CamelSpringBootTest(org.apache.camel.test.spring.junit5.CamelSpringBootTest) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Aggregations

Update (com.datastax.oss.driver.api.querybuilder.update.Update)9 Row (com.datastax.oss.driver.api.core.cql.Row)5 CqlSession (com.datastax.oss.driver.api.core.CqlSession)4 ResultSet (com.datastax.oss.driver.api.core.cql.ResultSet)4 ProjectMetadata (org.apache.archiva.metadata.model.ProjectMetadata)3 ArtifactMetadataModel (org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel)3 Namespace (org.apache.archiva.metadata.repository.cassandra.model.Namespace)3 CamelSpringBootTest (org.apache.camel.test.spring.junit5.CamelSpringBootTest)3 Test (org.junit.jupiter.api.Test)3 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)3 SimpleStatement (com.datastax.oss.driver.api.core.cql.SimpleStatement)2 Insert (com.datastax.oss.driver.api.querybuilder.insert.Insert)2 RegularInsert (com.datastax.oss.driver.api.querybuilder.insert.RegularInsert)2 Select (com.datastax.oss.driver.api.querybuilder.select.Select)2 UpdateWithAssignments (com.datastax.oss.driver.api.querybuilder.update.UpdateWithAssignments)2 ColumnDefinition (com.datastax.oss.driver.api.core.cql.ColumnDefinition)1 ClusteringOrder (com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder)1 QueryBuilder (com.datastax.oss.driver.api.querybuilder.QueryBuilder)1 Delete (com.datastax.oss.driver.api.querybuilder.delete.Delete)1 UpdateStart (com.datastax.oss.driver.api.querybuilder.update.UpdateStart)1