-
-
Notifications
You must be signed in to change notification settings - Fork 472
Expand file tree
/
Copy pathDbMetadata.kt
More file actions
55 lines (46 loc) · 1.87 KB
/
Copy pathDbMetadata.kt
File metadata and controls
55 lines (46 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package io.sentry.sqlite
/**
* Value associated with [DB_SYSTEM_KEY][io.sentry.SpanDataConvention.DB_SYSTEM_KEY] for in-memory
* databases.
*/
internal const val DB_SYSTEM_IN_MEMORY = "in-memory"
/**
* Value associated with [DB_SYSTEM_KEY][io.sentry.SpanDataConvention.DB_SYSTEM_KEY] for SQLite
* databases.
*/
internal const val DB_SYSTEM_SQLITE = "sqlite"
/**
* Sentinel file name that [SQLiteDriver.open][androidx.sqlite.SQLiteDriver.open] interprets as an
* in-memory database:
* https://developer.android.com/reference/androidx/sqlite/driver/AndroidSQLiteDriver.
*/
private const val IN_MEMORY_DB_FILENAME = ":memory:"
/** Path separators matching [File.separatorChar][java.io.File.separatorChar]. */
private val FILE_NAME_PATH_SEPARATORS = charArrayOf('/', '\\')
internal data class DbMetadata(val name: String?, val system: String)
/**
* Resolves metadata from the [fileName] argument to
* [SQLiteDriver.open][androidx.sqlite.SQLiteDriver.open].
*/
internal fun dbMetadataFromFileName(fileName: String): DbMetadata {
if (fileName == IN_MEMORY_DB_FILENAME) {
return DbMetadata(name = null, system = DB_SYSTEM_IN_MEMORY)
}
val trimmed = fileName.trimEnd { it in FILE_NAME_PATH_SEPARATORS }
if (trimmed.isEmpty()) {
return DbMetadata(name = null, system = DB_SYSTEM_SQLITE)
}
val index = trimmed.lastIndexOfAny(FILE_NAME_PATH_SEPARATORS)
val basename = if (index >= 0) trimmed.substring(index + 1) else trimmed
return DbMetadata(name = basename.ifEmpty { null }, system = DB_SYSTEM_SQLITE)
}
/**
* Resolves metadata from
* [SupportSQLiteOpenHelper.databaseName][androidx.sqlite.db.SupportSQLiteOpenHelper.databaseName].
*/
internal fun dbMetadataFromDatabaseName(databaseName: String?): DbMetadata =
if (databaseName == null) {
DbMetadata(name = null, system = DB_SYSTEM_IN_MEMORY)
} else {
DbMetadata(name = databaseName, system = DB_SYSTEM_SQLITE)
}