- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
215 lines
9.9 KiB
Java
215 lines
9.9 KiB
Java
package androidx.room.util;
|
|
|
|
import android.database.Cursor;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.sqlite.db.SupportSQLiteDatabase;
|
|
import java.util.ArrayDeque;
|
|
import java.util.ArrayList;
|
|
import java.util.Set;
|
|
import kotlin.Unit;
|
|
import kotlin.collections.CollectionsKt___CollectionsKt;
|
|
import kotlin.collections.SetsKt__SetsJVMKt;
|
|
import kotlin.collections.SetsKt__SetsKt;
|
|
import kotlin.io.CloseableKt;
|
|
import kotlin.jvm.internal.DefaultConstructorMarker;
|
|
import kotlin.jvm.internal.Intrinsics;
|
|
import kotlin.jvm.internal.SourceDebugExtension;
|
|
import kotlin.text.StringsKt__StringsJVMKt;
|
|
import kotlin.text.StringsKt__StringsKt;
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
/* loaded from: classes.dex */
|
|
public final class FtsTableInfo {
|
|
public static final Companion Companion = new Companion(null);
|
|
private static final String[] FTS_OPTIONS = {"tokenize=", "compress=", "content=", "languageid=", "matchinfo=", "notindexed=", "order=", "prefix=", "uncompress="};
|
|
public final Set<String> columns;
|
|
public final String name;
|
|
public final Set<String> options;
|
|
|
|
@VisibleForTesting
|
|
public static final Set<String> parseOptions(String str) {
|
|
return Companion.parseOptions(str);
|
|
}
|
|
|
|
public static final FtsTableInfo read(SupportSQLiteDatabase supportSQLiteDatabase, String str) {
|
|
return Companion.read(supportSQLiteDatabase, str);
|
|
}
|
|
|
|
public FtsTableInfo(String name, Set<String> columns, Set<String> options) {
|
|
Intrinsics.checkNotNullParameter(name, "name");
|
|
Intrinsics.checkNotNullParameter(columns, "columns");
|
|
Intrinsics.checkNotNullParameter(options, "options");
|
|
this.name = name;
|
|
this.columns = columns;
|
|
this.options = options;
|
|
}
|
|
|
|
/* JADX WARN: 'this' call moved to the top of the method (can break code semantics) */
|
|
public FtsTableInfo(String name, Set<String> columns, String createSql) {
|
|
this(name, columns, Companion.parseOptions(createSql));
|
|
Intrinsics.checkNotNullParameter(name, "name");
|
|
Intrinsics.checkNotNullParameter(columns, "columns");
|
|
Intrinsics.checkNotNullParameter(createSql, "createSql");
|
|
}
|
|
|
|
public boolean equals(Object obj) {
|
|
if (this == obj) {
|
|
return true;
|
|
}
|
|
if (!(obj instanceof FtsTableInfo)) {
|
|
return false;
|
|
}
|
|
FtsTableInfo ftsTableInfo = (FtsTableInfo) obj;
|
|
if (Intrinsics.areEqual(this.name, ftsTableInfo.name) && Intrinsics.areEqual(this.columns, ftsTableInfo.columns)) {
|
|
return Intrinsics.areEqual(this.options, ftsTableInfo.options);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public int hashCode() {
|
|
return (((this.name.hashCode() * 31) + this.columns.hashCode()) * 31) + this.options.hashCode();
|
|
}
|
|
|
|
public String toString() {
|
|
return "FtsTableInfo{name='" + this.name + "', columns=" + this.columns + ", options=" + this.options + "'}";
|
|
}
|
|
|
|
@SourceDebugExtension({"SMAP\nFtsTableInfo.kt\nKotlin\n*S Kotlin\n*F\n+ 1 FtsTableInfo.kt\nandroidx/room/util/FtsTableInfo$Companion\n+ 2 CursorUtil.kt\nandroidx/room/util/CursorUtil\n+ 3 _Strings.kt\nkotlin/text/StringsKt___StringsKt\n+ 4 Strings.kt\nkotlin/text/StringsKt__StringsKt\n+ 5 _Collections.kt\nkotlin/collections/CollectionsKt___CollectionsKt\n+ 6 _Arrays.kt\nkotlin/collections/ArraysKt___ArraysKt\n*L\n1#1,182:1\n145#2,7:183\n145#2,7:190\n1183#3,2:197\n1185#3:222\n107#4:199\n79#4,22:200\n766#5:223\n857#5:224\n858#5:227\n12744#6,2:225\n*S KotlinDebug\n*F\n+ 1 FtsTableInfo.kt\nandroidx/room/util/FtsTableInfo$Companion\n*L\n94#1:183,7\n108#1:190,7\n148#1:197,2\n148#1:222\n163#1:199\n163#1:200,22\n173#1:223\n173#1:224\n173#1:227\n174#1:225,2\n*E\n"})
|
|
public static final class Companion {
|
|
public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) {
|
|
this();
|
|
}
|
|
|
|
private Companion() {
|
|
}
|
|
|
|
public final FtsTableInfo read(SupportSQLiteDatabase database, String tableName) {
|
|
Intrinsics.checkNotNullParameter(database, "database");
|
|
Intrinsics.checkNotNullParameter(tableName, "tableName");
|
|
return new FtsTableInfo(tableName, readColumns(database, tableName), readOptions(database, tableName));
|
|
}
|
|
|
|
private final Set<String> readColumns(SupportSQLiteDatabase supportSQLiteDatabase, String str) {
|
|
Set createSetBuilder;
|
|
Set<String> build;
|
|
createSetBuilder = SetsKt__SetsJVMKt.createSetBuilder();
|
|
Cursor query = supportSQLiteDatabase.query("PRAGMA table_info(`" + str + "`)");
|
|
try {
|
|
if (query.getColumnCount() > 0) {
|
|
int columnIndex = query.getColumnIndex("name");
|
|
while (query.moveToNext()) {
|
|
String string = query.getString(columnIndex);
|
|
Intrinsics.checkNotNullExpressionValue(string, "cursor.getString(nameIndex)");
|
|
createSetBuilder.add(string);
|
|
}
|
|
}
|
|
Unit unit = Unit.INSTANCE;
|
|
CloseableKt.closeFinally(query, null);
|
|
build = SetsKt__SetsJVMKt.build(createSetBuilder);
|
|
return build;
|
|
} finally {
|
|
}
|
|
}
|
|
|
|
private final Set<String> readOptions(SupportSQLiteDatabase supportSQLiteDatabase, String str) {
|
|
Cursor query = supportSQLiteDatabase.query("SELECT * FROM sqlite_master WHERE `name` = '" + str + '\'');
|
|
try {
|
|
String sql = query.moveToFirst() ? query.getString(query.getColumnIndexOrThrow("sql")) : "";
|
|
CloseableKt.closeFinally(query, null);
|
|
Intrinsics.checkNotNullExpressionValue(sql, "sql");
|
|
return parseOptions(sql);
|
|
} finally {
|
|
}
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public final Set<String> parseOptions(String createStatement) {
|
|
CharSequence trim;
|
|
Set<String> set;
|
|
Character ch;
|
|
Set<String> emptySet;
|
|
Intrinsics.checkNotNullParameter(createStatement, "createStatement");
|
|
if (createStatement.length() == 0) {
|
|
emptySet = SetsKt__SetsKt.emptySet();
|
|
return emptySet;
|
|
}
|
|
String substring = createStatement.substring(StringsKt__StringsKt.indexOf$default((CharSequence) createStatement, '(', 0, false, 6, (Object) null) + 1, StringsKt__StringsKt.lastIndexOf$default((CharSequence) createStatement, ')', 0, false, 6, (Object) null));
|
|
Intrinsics.checkNotNullExpressionValue(substring, "this as java.lang.String…ing(startIndex, endIndex)");
|
|
ArrayList arrayList = new ArrayList();
|
|
ArrayDeque arrayDeque = new ArrayDeque();
|
|
int i = -1;
|
|
int i2 = 0;
|
|
int i3 = 0;
|
|
while (i2 < substring.length()) {
|
|
char charAt = substring.charAt(i2);
|
|
int i4 = i3 + 1;
|
|
if (charAt == '\'' || charAt == '\"' || charAt == '`') {
|
|
if (arrayDeque.isEmpty()) {
|
|
arrayDeque.push(Character.valueOf(charAt));
|
|
} else {
|
|
Character ch2 = (Character) arrayDeque.peek();
|
|
if (ch2 != null && ch2.charValue() == charAt) {
|
|
arrayDeque.pop();
|
|
}
|
|
}
|
|
} else if (charAt == '[') {
|
|
if (arrayDeque.isEmpty()) {
|
|
arrayDeque.push(Character.valueOf(charAt));
|
|
}
|
|
} else if (charAt == ']') {
|
|
if (!arrayDeque.isEmpty() && (ch = (Character) arrayDeque.peek()) != null && ch.charValue() == '[') {
|
|
arrayDeque.pop();
|
|
}
|
|
} else if (charAt == ',' && arrayDeque.isEmpty()) {
|
|
String substring2 = substring.substring(i + 1, i3);
|
|
Intrinsics.checkNotNullExpressionValue(substring2, "this as java.lang.String…ing(startIndex, endIndex)");
|
|
int length = substring2.length() - 1;
|
|
int i5 = 0;
|
|
boolean z = false;
|
|
while (i5 <= length) {
|
|
boolean z2 = Intrinsics.compare((int) substring2.charAt(!z ? i5 : length), 32) <= 0;
|
|
if (z) {
|
|
if (!z2) {
|
|
break;
|
|
}
|
|
length--;
|
|
} else if (z2) {
|
|
i5++;
|
|
} else {
|
|
z = true;
|
|
}
|
|
}
|
|
arrayList.add(substring2.subSequence(i5, length + 1).toString());
|
|
i = i3;
|
|
}
|
|
i2++;
|
|
i3 = i4;
|
|
}
|
|
String substring3 = substring.substring(i + 1);
|
|
Intrinsics.checkNotNullExpressionValue(substring3, "this as java.lang.String).substring(startIndex)");
|
|
trim = StringsKt__StringsKt.trim(substring3);
|
|
arrayList.add(trim.toString());
|
|
ArrayList arrayList2 = new ArrayList();
|
|
for (Object obj : arrayList) {
|
|
String str = (String) obj;
|
|
String[] strArr = FtsTableInfo.FTS_OPTIONS;
|
|
int length2 = strArr.length;
|
|
int i6 = 0;
|
|
while (true) {
|
|
if (i6 >= length2) {
|
|
break;
|
|
}
|
|
if (StringsKt__StringsJVMKt.startsWith$default(str, strArr[i6], false, 2, null)) {
|
|
arrayList2.add(obj);
|
|
break;
|
|
}
|
|
i6++;
|
|
}
|
|
}
|
|
set = CollectionsKt___CollectionsKt.toSet(arrayList2);
|
|
return set;
|
|
}
|
|
}
|
|
}
|