13a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesipackage com.xtremelabs.robolectric.shadows;
23a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesi
33a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesiimport android.database.sqlite.SQLiteQueryBuilder;
422c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
63f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.util.Join;
73a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesi
8132d4264fdf1ae13da2115b1a4240ea98a936d88Michael Portuesi/**
9132d4264fdf1ae13da2115b1a4240ea98a936d88Michael Portuesi * Shadow for {@code SQLiteQueryBuilder}.
10132d4264fdf1ae13da2115b1a4240ea98a936d88Michael Portuesi */
113a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesi@Implements(SQLiteQueryBuilder.class)
123a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesipublic class ShadowSQLiteQueryBuilder {
133f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
143f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    @Implementation
153f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    public static String buildQueryString(boolean distinct, String tables,
163f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz                                          String[] columns, String where, String groupBy, String having,
173f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz                                          String orderBy, String limit) {
183f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
193f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        StringBuilder sb = new StringBuilder("SELECT ");
203f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
213f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        if (distinct) {
223f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            sb.append("DISTINCT ");
233f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        }
243f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
253f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        if (columns != null) {
2658b862ca990aee16b3ce609edad78998fe3fba12Phil Goodwin & Tyler Schultz            sb.append(Join.join(", ", (Object[]) columns));
273f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        } else {
283f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            sb.append("*");
293f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        }
303f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
313f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        sb.append(" FROM ");
323f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        sb.append(tables);
333f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
343f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        conditionallyAppend(sb, " WHERE ", where);
353f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        conditionallyAppend(sb, " GROUP BY ", groupBy);
363f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        conditionallyAppend(sb, " HAVING ", having);
373f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        conditionallyAppend(sb, " ORDER BY ", orderBy);
383f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        conditionallyAppend(sb, " LIMIT ", limit);
393f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
403f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        return sb.toString();
413f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    }
423f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz
433f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    private static void conditionallyAppend(StringBuilder sb, String keyword, String value) {
443f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        if (value != null) {
453f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            sb.append(keyword);
463f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz            sb.append(value);
473f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz        }
483f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz    }
493a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesi
503a99d4817b65b7eb0a9f44486072dbf43fdb2144Michael Portuesi}
51