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;
}
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;
}
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;
}
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;
}
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();
}
Aggregations