in harry-core/src/harry/model/SelectHelper.java [61:144]
public static CompiledStatement select(SchemaSpec schema, long pd, Set<ColumnSpec<?>> columns, List<Relation> relations, boolean reverse, boolean includeWriteTime)
{
boolean isWildcardQuery = columns == null;
if (isWildcardQuery)
{
columns = schema.allColumnsSet;
includeWriteTime = false;
}
StringBuilder b = new StringBuilder();
b.append("SELECT ");
boolean isFirst = true;
if (isWildcardQuery)
{
b.append("*");
}
else
{
for (int i = 0; i < schema.allColumns.size(); i++)
{
ColumnSpec<?> spec = schema.allColumns.get(i);
if (columns != null && !columns.contains(spec))
continue;
if (isFirst)
isFirst = false;
else
b.append(", ");
b.append(spec.name);
}
}
if (includeWriteTime)
{
for (ColumnSpec<?> spec : schema.staticColumns)
{
if (columns != null && !columns.contains(spec))
continue;
b.append(", ")
.append("writetime(")
.append(spec.name)
.append(")");
}
for (ColumnSpec<?> spec : schema.regularColumns)
{
if (columns != null && !columns.contains(spec))
continue;
b.append(", ")
.append("writetime(")
.append(spec.name)
.append(")");
}
}
b.append(" FROM ")
.append(schema.keyspace)
.append(".")
.append(schema.table)
.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);
}
});
addOrderBy(schema, b, reverse);
b.append(";");
Object[] bindingsArr = bindings.toArray(new Object[bindings.size()]);
return new CompiledStatement(b.toString(), bindingsArr);
}