public static CompiledStatement select()

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