public void gen_where(final Map<String, Object> context, final QLSelect select, final PrintWriter out) {
        final Class<?> clazz = (Class<?>) context.get("class");

        if (clazz == null) {
            throw new IllegalArgumentException("context not contains 'class'");
        }

        final QLExpr where = select.getWhere();
        if (where == null) {
            return;
        }

        final QLLimit limit = select.getLimit();

        QLAstVisitorAdapter setTypeVisitor = new SetTypeVisitor(clazz);
        where.accept(setTypeVisitor);

        out.print("			if(");
        QLAstVisitor visitor = new WhereGenOutputVisitor(out, clazz);
        where.accept(visitor);

        out.println(") {");

        if (limit != null && select.getOrderBy() == null) {
            out.println("				if (_dest_.size() >= rowCount) {");
            out.println("					break;");
            out.println("				}");
        }

        out.println("				" + destCollectionName + ".add(item);");
        out.println("			}");
        out.println();
    }