Search in sources :

Example 6 with EntityTypeMetadata

use of com.datastax.driver.mapping.meta.EntityTypeMetadata in project cassandra-driver-mapping by valchkou.

the class MappingBuilder method buildDelete.

public static <E> BuiltStatement buildDelete(E entity, String keyspace) {
    EntityTypeMetadata entityMetadata = EntityTypeParser.getEntityMetadata(entity.getClass());
    List<String> pkCols = entityMetadata.getPkColumns();
    Object[] values = entityMetadata.getEntityPKValues(entity).toArray(new Object[pkCols.size()]);
    Delete delete = buildDelete(entityMetadata, pkCols, values, keyspace);
    return delete;
}
Also used : EntityTypeMetadata(com.datastax.driver.mapping.meta.EntityTypeMetadata)

Example 7 with EntityTypeMetadata

use of com.datastax.driver.mapping.meta.EntityTypeMetadata in project cassandra-driver-mapping by valchkou.

the class MappingBuilder method getFromRow.

/**
     * Convert individual ResultSet Row into Entity instance
     */
public static <T> T getFromRow(Class<T> clazz, Row row) {
    EntityTypeMetadata entityMetadata = EntityTypeParser.getEntityMetadata(clazz);
    T entity = null;
    Object primaryKey = null;
    Object partitionKey = null;
    // create PK
    try {
        entity = clazz.newInstance();
        PrimaryKeyMetadata pkmeta = entityMetadata.getPrimaryKeyMetadata();
        if (pkmeta.isCompound()) {
            EntityFieldMetaData pkField = pkmeta.getOwnField();
            primaryKey = pkField.getType().newInstance();
            pkField.setValue(entity, primaryKey);
            if (pkmeta.hasPartitionKey()) {
                PrimaryKeyMetadata partmeta = pkmeta.getPartitionKey();
                EntityFieldMetaData partField = partmeta.getOwnField();
                partitionKey = partField.getType().newInstance();
                partField.setValue(primaryKey, partitionKey);
            }
        }
    } catch (Exception e) {
    // skip error to support any-2-any
    }
    // set properties' values
    for (EntityFieldMetaData field : entityMetadata.getFields()) {
        Object value = getValueFromRow(row, field);
        try {
            if (value != null) {
                if (field.isPartition()) {
                    field.setValue(partitionKey, value);
                } else if (field.isPrimary()) {
                    field.setValue(primaryKey, value);
                } else {
                    field.setValue(entity, value);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    return entity;
}
Also used : EntityFieldMetaData(com.datastax.driver.mapping.meta.EntityFieldMetaData) EntityTypeMetadata(com.datastax.driver.mapping.meta.EntityTypeMetadata) PrimaryKeyMetadata(com.datastax.driver.mapping.meta.PrimaryKeyMetadata) ExecutionException(java.util.concurrent.ExecutionException)

Example 8 with EntityTypeMetadata

use of com.datastax.driver.mapping.meta.EntityTypeMetadata in project cassandra-driver-mapping by valchkou.

the class MappingBuilder method buildInsert.

/**
     * Statement to persist an entity in Cassandra
     * 
     * @param entity to be inserted
     * @return com.datastax.driver.core.BoundStatement
     */
public static <E> BuiltStatement buildInsert(E entity, WriteOptions options, String keyspace) {
    Class<?> clazz = entity.getClass();
    EntityTypeMetadata entityMetadata = EntityTypeParser.getEntityMetadata(clazz);
    String table = entityMetadata.getTableName();
    List<EntityFieldMetaData> fields = entityMetadata.getFields();
    List<String> pkCols = entityMetadata.getPkColumns();
    List<Object> pkVals = entityMetadata.getEntityPKValues(entity);
    String[] columns = new String[fields.size()];
    Object[] values = new Object[fields.size()];
    EntityFieldMetaData verField = null;
    Object newVersion = null;
    Object oldVersion = null;
    // increment and set @Version field
    if (entityMetadata.hasVersion()) {
        verField = entityMetadata.getVersionField();
        oldVersion = verField.getValue(entity);
        newVersion = incVersion(oldVersion);
        verField.setValue(entity, newVersion);
    }
    for (int i = 0; i < fields.size(); i++) {
        EntityFieldMetaData f = fields.get(i);
        String colName = f.getColumnName();
        Object colVal = null;
        if (pkCols.contains(colName)) {
            int idx = pkCols.indexOf(colName);
            colVal = pkVals.get(idx);
            if (colVal == null && f.isAutoGenerate()) {
                if (f.getDataType() == DataType.Name.TIMEUUID) {
                    colVal = QueryBuilder.fcall("now");
                } else if (f.getDataType() == DataType.Name.UUID) {
                    colVal = QueryBuilder.fcall("uuid");
                }
            }
        } else {
            colVal = f.getValue(entity);
        }
        columns[i] = colName;
        if (f.equals(verField)) {
            values[i] = newVersion;
        } else {
            values[i] = colVal;
        }
    }
    Insert insert = insertInto(keyspace, table).values(columns, values);
    if (verField != null) {
        insert.ifNotExists();
    }
    applyOptions(options, insert, entityMetadata);
    return insert;
}
Also used : EntityFieldMetaData(com.datastax.driver.mapping.meta.EntityFieldMetaData) EntityTypeMetadata(com.datastax.driver.mapping.meta.EntityTypeMetadata)

Example 9 with EntityTypeMetadata

use of com.datastax.driver.mapping.meta.EntityTypeMetadata in project cassandra-driver-mapping by valchkou.

the class MappingSession method save.

/**
     * Save Entity. If Entity has @Version field, in attempt to save not the
     * latest version null is returned.
     * 
     * @param entity
     * @param options WriteOptions
     * @return ResultSetFuture.
     */
public <E> E save(E entity, WriteOptions options) {
    maybeSync(entity.getClass());
    Statement stmt = MappingBuilder.prepareSave(entity, options, keyspace);
    ResultSet rs = session.execute(stmt);
    EntityTypeMetadata entityMetadata = EntityTypeParser.getEntityMetadata(entity.getClass());
    if (entityMetadata.hasVersion()) {
        Row row = rs.one();
        if (!(row != null && rs.wasApplied())) {
            return null;
        }
    }
    return entity;
}
Also used : EntityTypeMetadata(com.datastax.driver.mapping.meta.EntityTypeMetadata) RegularStatement(com.datastax.driver.core.RegularStatement) PreparedStatement(com.datastax.driver.core.PreparedStatement) BoundStatement(com.datastax.driver.core.BoundStatement) BuiltStatement(com.datastax.driver.core.querybuilder.BuiltStatement) Statement(com.datastax.driver.core.Statement) ResultSet(com.datastax.driver.core.ResultSet) Row(com.datastax.driver.core.Row)

Example 10 with EntityTypeMetadata

use of com.datastax.driver.mapping.meta.EntityTypeMetadata in project cassandra-driver-mapping by valchkou.

the class SchemaSync method getScript.

public static String getScript(String keyspace, Session session, Class<?> clazz, SyncOptions syncOptions) {
    StringBuilder sb = new StringBuilder();
    EntityTypeMetadata entityMetadata = EntityTypeParser.getEntityMetadata(clazz);
    List<RegularStatement> statements = buildSyncStatements(keyspace, session, entityMetadata, syncOptions);
    for (RegularStatement stmt : statements) {
        sb.append(stmt.getQueryString());
        sb.append("\n");
    }
    return sb.toString();
}
Also used : EntityTypeMetadata(com.datastax.driver.mapping.meta.EntityTypeMetadata) RegularStatement(com.datastax.driver.core.RegularStatement)

Aggregations

EntityTypeMetadata (com.datastax.driver.mapping.meta.EntityTypeMetadata)40 Test (org.junit.Test)18 EntityFieldMetaData (com.datastax.driver.mapping.meta.EntityFieldMetaData)13 TableMetadata (com.datastax.driver.core.TableMetadata)8 ColumnMetadata (com.datastax.driver.core.ColumnMetadata)6 PrimaryKeyMetadata (com.datastax.driver.mapping.meta.PrimaryKeyMetadata)4 RegularStatement (com.datastax.driver.core.RegularStatement)3 EntityWithCompositeKey (com.datastax.driver.mapping.entity.EntityWithCompositeKey)2 SimpleKey (com.datastax.driver.mapping.entity.SimpleKey)2 ExecutionException (java.util.concurrent.ExecutionException)2 BoundStatement (com.datastax.driver.core.BoundStatement)1 Cluster (com.datastax.driver.core.Cluster)1 KeyspaceMetadata (com.datastax.driver.core.KeyspaceMetadata)1 PreparedStatement (com.datastax.driver.core.PreparedStatement)1 ResultSet (com.datastax.driver.core.ResultSet)1 Row (com.datastax.driver.core.Row)1 Statement (com.datastax.driver.core.Statement)1 BuiltStatement (com.datastax.driver.core.querybuilder.BuiltStatement)1 TableProperties (com.datastax.driver.mapping.annotation.TableProperties)1 TableProperty (com.datastax.driver.mapping.annotation.TableProperty)1