### Question:
Where { public Where<T, ID> raw(String rawStatement, ArgumentHolder... args) { for (ArgumentHolder arg : args) { String columnName = arg.getColumnName(); if (columnName == null) { if (arg.getSqlType() == null) { throw new IllegalArgumentException("Either the column name or SqlType must be set on each argument"); } } else { arg.setMetaInfo(findColumnFieldType(columnName)); } } addClause(new Raw(rawStatement, args)); return this; } protected  Where(TableInfo<T, ID> tableInfo, StatementBuilder<T, ID> statementBuilder, DatabaseType databaseType); Where<T, ID> and(); Where<T, ID> and(Where<T, ID> first, Where<T, ID> second, Where<T, ID>... others); Where<T, ID> and(int numClauses); Where<T, ID> between(String columnName, Object low, Object high); Where<T, ID> eq(String columnName, Object value); Where<T, ID> ge(String columnName, Object value); Where<T, ID> gt(String columnName, Object value); Where<T, ID> in(String columnName, Iterable<?> objects); Where<T, ID> notIn(String columnName, Iterable<?> objects); Where<T, ID> in(String columnName, Object... objects); Where<T, ID> notIn(String columnName, Object... objects); Where<T, ID> in(String columnName, QueryBuilder<?, ?> subQueryBuilder); Where<T, ID> notIn(String columnName, QueryBuilder<?, ?> subQueryBuilder); Where<T, ID> exists(QueryBuilder<?, ?> subQueryBuilder); Where<T, ID> isNull(String columnName); Where<T, ID> isNotNull(String columnName); Where<T, ID> le(String columnName, Object value); Where<T, ID> lt(String columnName, Object value); Where<T, ID> like(String columnName, Object value); Where<T, ID> ne(String columnName, Object value); Where<T, ID> not(); Where<T, ID> not(Where<T, ID> comparison); Where<T, ID> or(); Where<T, ID> or(Where<T, ID> left, Where<T, ID> right, Where<T, ID>... others); Where<T, ID> or(int numClauses); Where<T, ID> idEq(ID id); Where<T, ID> idEq(Dao<OD, ?> dataDao, OD data); Where<T, ID> raw(String rawStatement, ArgumentHolder... args); Where<T, ID> rawComparison(String columnName, String rawOperator, Object value); PreparedQuery<T> prepare(); List<T> query(); GenericRawResults<String[]> queryRaw(); T queryForFirst(); String[] queryRawFirst(); long countOf(); CloseableIterator<T> iterator(); Where<T, ID> reset(); String getStatement(); @Override String toString();  }### Answer:
@Test public void testRaw() throws Exception { TableInfo<Foo, Integer> tableInfo = new TableInfo<Foo, Integer>(connectionSource, null, Foo.class); Where<Foo, Integer> where = new Where<Foo, Integer>(tableInfo, null, databaseType); String raw = "VAL = 1"; int val = 17; where.eq(Foo.VAL_COLUMN_NAME, val).and().raw(raw); StringBuilder whereSb = new StringBuilder(); where.appendSql(null, whereSb, new ArrayList<ArgumentHolder>()); StringBuilder sb = new StringBuilder(); sb.append('('); databaseType.appendEscapedEntityName(sb, Foo.VAL_COLUMN_NAME); sb.append(" = ").append(val); sb.append(" AND ").append(raw).append(" ) "); assertEquals(sb.toString(), whereSb.toString()); }