package androidx.sqlite.db; import c.d.b.a.a; import java.util.regex.Pattern; public final class SupportSQLiteQueryBuilder { private static final Pattern sLimitPattern = Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); private Object[] mBindArgs; private String[] mColumns = null; private boolean mDistinct = false; private String mGroupBy = null; private String mHaving = null; private String mLimit = null; private String mOrderBy = null; private String mSelection; private final String mTable; private SupportSQLiteQueryBuilder(String str) { this.mTable = str; } private static void appendClause(StringBuilder sb, String str, String str2) { if (!isEmpty(str2)) { sb.append(str); sb.append(str2); } } private static void appendColumns(StringBuilder sb, String[] strArr) { int length = strArr.length; for (int i = 0; i < length; i++) { String str = strArr[i]; if (i > 0) { sb.append(", "); } sb.append(str); } sb.append(' '); } public static SupportSQLiteQueryBuilder builder(String str) { return new SupportSQLiteQueryBuilder(str); } private static boolean isEmpty(String str) { return str == null || str.length() == 0; } public SupportSQLiteQueryBuilder columns(String[] strArr) { this.mColumns = strArr; return this; } public SupportSQLiteQuery create() { if (!isEmpty(this.mGroupBy) || isEmpty(this.mHaving)) { StringBuilder sb = new StringBuilder(120); sb.append("SELECT "); if (this.mDistinct) { sb.append("DISTINCT "); } String[] strArr = this.mColumns; if (strArr == null || strArr.length == 0) { sb.append(" * "); } else { appendColumns(sb, strArr); } sb.append(" FROM "); sb.append(this.mTable); appendClause(sb, " WHERE ", this.mSelection); appendClause(sb, " GROUP BY ", this.mGroupBy); appendClause(sb, " HAVING ", this.mHaving); appendClause(sb, " ORDER BY ", this.mOrderBy); appendClause(sb, " LIMIT ", this.mLimit); return new SimpleSQLiteQuery(sb.toString(), this.mBindArgs); } throw new IllegalArgumentException("HAVING clauses are only permitted when using a groupBy clause"); } public SupportSQLiteQueryBuilder distinct() { this.mDistinct = true; return this; } public SupportSQLiteQueryBuilder groupBy(String str) { this.mGroupBy = str; return this; } public SupportSQLiteQueryBuilder having(String str) { this.mHaving = str; return this; } public SupportSQLiteQueryBuilder limit(String str) { if (isEmpty(str) || sLimitPattern.matcher(str).matches()) { this.mLimit = str; return this; } throw new IllegalArgumentException(a.t("invalid LIMIT clauses:", str)); } public SupportSQLiteQueryBuilder orderBy(String str) { this.mOrderBy = str; return this; } public SupportSQLiteQueryBuilder selection(String str, Object[] objArr) { this.mSelection = str; this.mBindArgs = objArr; return this; } }