in harry-core/src/harry/operations/DeleteHelper.java [123:174]
private static CompiledStatement compile(SchemaSpec schema,
long pd,
List<Relation> relations,
BitSet columnsToDelete,
BitSet mask,
long ts)
{
StringBuilder b = new StringBuilder();
b.append("DELETE ");
if (columnsToDelete != null)
{
assert mask != null;
assert relations == null || relations.stream().allMatch((r) -> r.kind == Relation.RelationKind.EQ);
String[] names = columnNames(schema.allColumns, columnsToDelete, mask);
for (int i = 0; i < names.length; i++)
{
if (i > 0)
b.append(", ");
b.append(names[i]);
}
b.append(" ");
}
b.append("FROM ")
.append(schema.keyspace).append(".").append(schema.table)
.append(" USING TIMESTAMP ")
.append(ts)
.append(" WHERE ");
List<Object> bindings = new ArrayList<>();
schema.inflateRelations(pd,
relations,
new SchemaSpec.AddRelationCallback()
{
boolean isFirst = true;
public void accept(ColumnSpec<?> spec, Relation.RelationKind kind, Object value)
{
if (isFirst)
isFirst = false;
else
b.append(" AND ");
b.append(kind.getClause(spec));
bindings.add(value);
}
});
b.append(";");
Object[] bindingsArr = bindings.toArray(new Object[bindings.size()]);
return new CompiledStatement(b.toString(), bindingsArr);
}