Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replaced greenDAO with androidx.room #506

Draft
wants to merge 127 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
d961136
Started Dao Migration
JaniruTEC Oct 17, 2023
c6ba13a
Simplified database schema
JaniruTEC Oct 17, 2023
f8bbd54
Merge branch 'develop' into feature/dao-migration
JaniruTEC Oct 18, 2023
1e60faa
Removed unnecessary historic method "clearCache"
JaniruTEC Oct 18, 2023
10fd468
Added logging/comments to database configuration
JaniruTEC Oct 19, 2023
068818e
Added logging to legacy/manual migrations
JaniruTEC Oct 19, 2023
cde0c78
Reorganized migrations
JaniruTEC Oct 23, 2023
b2aeef9
Refactored injection of Migration12To13
JaniruTEC Oct 24, 2023
4809e4a
Added logging to auto migrations
JaniruTEC Oct 24, 2023
4cce1eb
Merge branch 'develop' into feature/dao-migration
JaniruTEC Oct 27, 2023
f1421b3
Reformatted "org.cryptomator.data.db" package
JaniruTEC Oct 27, 2023
741212b
Fixed formatting introduced by merge commit 4cce1eb3
JaniruTEC Nov 4, 2023
ab92786
Externalized database version for use in other locations
JaniruTEC Nov 3, 2023
712194f
Started fixing UpgradeDatabaseTest
JaniruTEC Nov 4, 2023
87ab541
Reformatted UpgradeDatabaseTest
JaniruTEC Nov 4, 2023
af6a691
Fixed regression in Sql: Caller is now allowed to omit columns to rec…
JaniruTEC Nov 4, 2023
91d3e80
Added and configured "room-testing"
JaniruTEC Nov 4, 2023
3057b47
Merge branch 'develop' into feature/dao-migration
JaniruTEC Nov 23, 2023
420a1d3
Added first tests for migrations involving room using "room-testing"
JaniruTEC Nov 23, 2023
a83e968
Changed timing of migrations
JaniruTEC Nov 18, 2023
7e84617
Refactored CloudRepositoryImpl to use CloudDao directly
JaniruTEC Nov 25, 2023
bc7f8a2
Refactored database to be initialized on demand
JaniruTEC Nov 25, 2023
9423a87
Changed configuration to use template db for creation of app db
JaniruTEC Nov 18, 2023
bfbff57
Updated tests to use template db
JaniruTEC Nov 25, 2023
f40a147
Replaced asset-based template with runtime-generated file
JaniruTEC Nov 25, 2023
3e619a1
Wrapped runtime-generated template with lazy stream
JaniruTEC Nov 25, 2023
4091a51
Added template generation to dagger graph
JaniruTEC Nov 25, 2023
9c6ec19
Cleaned up DatabaseModule
JaniruTEC Nov 25, 2023
9e11d77
Added warning if database is built on main thread
JaniruTEC Nov 29, 2023
bd9e23a
Extracted TemplateDatabaseContext from object
JaniruTEC Dec 3, 2023
386aa53
Added tests and changed contract of TemplateDatabaseContext
JaniruTEC Dec 3, 2023
802a2a1
Updated tests for migrations to use new template db mechanism
JaniruTEC Dec 3, 2023
fb76f16
Added exception and performed minor cleanup
JaniruTEC Dec 3, 2023
32fe9fc
Separated room schemas from androidTest assets
JaniruTEC Dec 8, 2023
3d62a48
Changed action for foreign key in "VaultEntity" to "RESTRICT"
JaniruTEC Dec 8, 2023
b7d2073
Cleaned up and improved implementations in "Sql.java"
JaniruTEC Jan 2, 2024
6d18c56
Performed minor cleanup
JaniruTEC Jan 11, 2024
af82df5
Enabled foreign key constraints for migrations
JaniruTEC Jan 11, 2024
465c196
Fixed wrong test
JaniruTEC Jan 6, 2024
0cc2ea0
Updated "Sql.java" to offer new id column
JaniruTEC Jan 10, 2024
9718e51
Added additional cleanup to UpgradeDatabaseTest
JaniruTEC Jan 11, 2024
0290c20
Cleaned up Entities and Entity mapping
JaniruTEC Jan 11, 2024
4f2d05f
Added explicit orders to VaultEntity at v13
JaniruTEC Jan 11, 2024
d15d3b2
Added explicit orders to VaultEntity at current version
JaniruTEC Jan 11, 2024
c0d9309
Merge branch 'develop' into feature/dao-migration
JaniruTEC Feb 29, 2024
5035ce4
Added tests to handle mismatch between db and schema
JaniruTEC Jan 18, 2024
ee4a18c
Removed erroneous import for "okio.use" in favor of "kotlin.io.use"
JaniruTEC Apr 10, 2024
d7e6be6
Added utility methods for comparing databases
JaniruTEC Apr 10, 2024
aed7e38
Added "assertCursorEquals"
JaniruTEC Apr 10, 2024
a6d4776
Commented "Cursor?.stringify" defined in CryptomatorDatabase.kt
JaniruTEC Mar 4, 2024
c13b12f
Added tests for migration to v13
JaniruTEC Apr 10, 2024
267b20b
Added tests/snippets to explain/reproduce bug #529 [1]
JaniruTEC Apr 10, 2024
eb02fc0
Applied code style to BugTest.kt and SmallBugTest.kt
JaniruTEC Apr 10, 2024
7b78b92
Finalized work on BugTest.kt and SmallBugTest.kt
JaniruTEC Apr 10, 2024
95f65c3
Specified journal mode
JaniruTEC Mar 12, 2024
ff67959
Added first implementation of "CacheControlledSupportSQLiteDatabase"
JaniruTEC Mar 12, 2024
1afa7b7
Refactored "CacheControlledSupportSQLiteDatabase"
JaniruTEC Mar 14, 2024
7d5de82
Narrowed visibility for members of "AOP_SQLiteDatabase" class
JaniruTEC Mar 14, 2024
13261d6
Renamed parts of cache-control
JaniruTEC Mar 14, 2024
42f572a
Renamed class "CacheControlledSupportSQLiteDatabase" and its members
JaniruTEC Mar 14, 2024
db2edda
Reorganized cache-control to improve abstraction
JaniruTEC Mar 14, 2024
eae6c03
Renamed "RandomUUIDSQLMappingFunction" to "RandomUUIDMapping"
JaniruTEC Mar 14, 2024
35b4e00
Refactored "SQLMappingFunction"
JaniruTEC Mar 14, 2024
95eede5
Redefined logic of "MappingSupportSQLiteQuery"
JaniruTEC Mar 17, 2024
b3449f0
Re-enabled tests
JaniruTEC Apr 10, 2024
6b1a9b5
Added first tests for "MappingSupportSQLiteDatabase"
JaniruTEC Mar 18, 2024
af17db5
Added support for mapping cursors
JaniruTEC Apr 12, 2024
34f75af
Renamed "DataForTestQueryCancelable"
JaniruTEC Mar 19, 2024
ed0fe82
Extracted methods "cartesianProduct" and "toArgumentsStream"
JaniruTEC Mar 19, 2024
c89f4b1
Added test for "update"
JaniruTEC Mar 19, 2024
d98ce8b
Specified contract for "SupportSQLiteDatabase.insert"
JaniruTEC Mar 19, 2024
bfcca43
Added tests for "insert"
JaniruTEC Mar 19, 2024
6af9811
Refactored "Sql" to follow the API contract of "SupportSQLiteDatabase"
JaniruTEC Apr 16, 2024
abf19e2
Fixed "migrate12To14IndexSideEffects"
JaniruTEC Apr 21, 2024
0e63cad
Applied fix for #529 [1] to re-enabled tests
JaniruTEC Apr 21, 2024
9f70454
Moved logic for handling extra calls to dedicated class "OneOffDelegate"
JaniruTEC Apr 16, 2024
b691766
Implemented "MappingSupportSQLiteQuery.bindTo" with "OneOffDelegate"
JaniruTEC Apr 16, 2024
77fa76f
Added "ValueExtractor" as argument type of "pseudo equality" methods
JaniruTEC Apr 22, 2024
cfde324
Enforced single call convention for parts of "MappingSupportSQLiteQuery"
JaniruTEC Apr 22, 2024
40a4ed5
Refactored "insert" and "compileStatement"
JaniruTEC Apr 22, 2024
7eb386f
Merge remote-tracking branch 'origin/develop' into feature/dao-migration
JaniruTEC May 25, 2024
01d43ff
Merge remote-tracking branch 'origin/develop' into feature/dao-migration
JaniruTEC May 25, 2024
bcfbef9
Improved caching to properly handle unconventional keys
JaniruTEC Apr 26, 2024
51056e6
Added test for "SupportSQLiteDatabase.compileStatement"
JaniruTEC Apr 25, 2024
5fef226
Moved database templating to separate dagger module
JaniruTEC Apr 27, 2024
a216813
Made database templating more robust
JaniruTEC May 14, 2024
499afed
Added handling for database corruption
JaniruTEC May 7, 2024
fed62e2
Added "useFinally" to improve corruption handling
JaniruTEC May 14, 2024
b00ec8e
Added test for opening previously corrupted/version 0 database
JaniruTEC May 29, 2024
d65e674
Performed housekeeping
JaniruTEC May 29, 2024
01a8bd6
Centralized database configuration
JaniruTEC May 30, 2024
7f91090
Added logging for database corruption
JaniruTEC Jun 1, 2024
0937ba3
Added tests for verifying BOMs
JaniruTEC May 13, 2024
93417c3
Added tests for verifying BOMs for dependencies of "MappingSupportSQL…
JaniruTEC Jun 1, 2024
01eab75
Refactored tests for verifying BOMs
JaniruTEC Jun 4, 2024
a198130
Improved tests for verifying BOMs
JaniruTEC Jun 4, 2024
64ae9bd
Added tests for "MappingSupportSQLiteStatement.newBoundStatement"
JaniruTEC Jun 15, 2024
e475391
Added large tests for "MappingSupportSQLiteStatement.newBoundStatement"
JaniruTEC Jun 19, 2024
2897603
Refactored "testInsert" and tests in "MappingSupportSQLiteStatementTest"
JaniruTEC Jun 19, 2024
93997c4
Refactored "testInsertConflictAlgorithms" to also use "testSingleInsert"
JaniruTEC Jun 19, 2024
ec9dfff
Reformatted "MappingSupportSQLiteDatabaseTest.kt"
JaniruTEC Jun 19, 2024
a411e45
Refactored calls to "runMigrationsAndValidate" in "UpgradeDatabaseTest"
JaniruTEC Jun 20, 2024
1406d5d
Upgraded room to version 2.6.1
JaniruTEC Jun 21, 2024
c039e0a
Refactored bindings in "MappingSupportSQLiteStatement"
JaniruTEC Jun 23, 2024
5588563
Made "MappingSupportSQLiteStatement" threadsafe
JaniruTEC Jun 26, 2024
df6c32b
Refactored initialization of "DatabaseOpenHelperFactory"
JaniruTEC Jun 27, 2024
818bac6
Refactored initialization of database template
JaniruTEC Jun 27, 2024
5c37c12
Standardized database configuration
JaniruTEC Sep 25, 2024
f496fe1
Standardized database closing
JaniruTEC Jul 28, 2024
26bad8d
Added missing WAL configuration/verification
JaniruTEC Sep 25, 2024
9abed18
Refactored WAL initialization
JaniruTEC Aug 2, 2024
f206740
Performed cleanup
JaniruTEC Jun 26, 2024
2c17283
Moved "pseudo equality" methods to dedicated class
JaniruTEC Aug 4, 2024
c581e77
Moved helper methods for "Iterables" to dedicated class
JaniruTEC Aug 4, 2024
3f35615
Added type-checks to tests for "MappingSupportSQLiteQuery"
JaniruTEC Aug 4, 2024
4aa1c90
Prepared merging upstream v13
JaniruTEC Sep 25, 2024
c9a0d3d
Merge branch 'develop' into feature/dao-migration
JaniruTEC Sep 25, 2024
2e68cc5
Finished merge of upstream v13 into production logic
JaniruTEC Sep 25, 2024
d034f95
Added "Upgrade12To13" to migration paths in tests
JaniruTEC Sep 27, 2024
e7778c6
Made tests provided by upstream v13 runnable
JaniruTEC Oct 16, 2024
b663aaf
Added "MigrationContainer"
JaniruTEC Sep 30, 2024
0b164f8
Refactored "CorruptedDatabaseTest"
JaniruTEC Oct 14, 2024
70cb60a
Added "testOpenVersion0DatabaseVerifyStreamAccessed"
JaniruTEC Oct 14, 2024
8251fc9
Added "testOpenDatabaseWithRecovery"
JaniruTEC Oct 14, 2024
998a476
Consolidated common test-logic to "DatabaseTests.kt"
JaniruTEC Oct 16, 2024
6ed2b42
Added "assertOrder"
JaniruTEC Oct 19, 2024
4951ebb
Fixed ordered tests in "CorruptedDatabaseTest"
JaniruTEC Oct 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ apply from: 'buildsystem/dependencies.gradle'

buildscript {
ext.kotlin_version = '1.9.24'
ext.roomVersion = '2.6.1'
repositories {
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.4.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.1'
classpath "androidx.room:room-gradle-plugin:$roomVersion"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.1.1"
}
Expand Down
7 changes: 3 additions & 4 deletions buildsystem/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,6 @@ ext {

lruFileCacheVersion = '1.2'

// KEEP IN SYNC WITH GENERATOR VERSION IN root build.gradle
greenDaoVersion = '3.3.0'

// cloud provider libs
cryptolibVersion = '2.1.2'

Expand Down Expand Up @@ -159,7 +156,9 @@ ext {
googlePlayServicesAuth : "com.google.android.gms:play-services-auth:${googlePlayServicesVersion}",
trackingFreeGoogleCLient : "com.github.cryptomator.google-http-java-client:google-http-client:${trackingFreeGoogleCLientVersion}",
trackingFreeGoogleAndroidCLient: "com.github.cryptomator.google-http-java-client:google-http-client-android:${trackingFreeGoogleCLientVersion}",
greenDao : "org.greenrobot:greendao:${greenDaoVersion}",
room : "androidx.room:room-runtime:${roomVersion}",
roomCompiler : "androidx.room:room-compiler:${roomVersion}",
roomTesting : "androidx.room:room-testing:${roomVersion}",
gson : "com.google.code.gson:gson:${gsonVersion}",
hamcrest : "org.hamcrest:hamcrest-all:${hamcrestVersion}",
javaxAnnotation : "javax.annotation:jsr250-api:${javaxAnnotationVersion}",
Expand Down
38 changes: 32 additions & 6 deletions data/build.gradle
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
apply plugin: 'org.greenrobot.greendao'
apply plugin: 'androidx.room'
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'de.mannodermaus.android-junit5'

def roomSchemasDir = new File(projectDir, "room/schemas")
def androidTestRoomSchemasDir = new File(buildDir, "tmp/room/schemas/androidTest")
def copyRoomSchemasTask = tasks.register("copyRoomSchemasToAndroidTestAssets", Sync.class) {
from(roomSchemasDir)
into(androidTestRoomSchemasDir)
}

android {
def globalConfiguration = rootProject.extensions.getByName("ext")

Expand Down Expand Up @@ -74,12 +82,25 @@ android {
lite {
java.srcDirs = ['src/main/java/', 'src/lite/java/']
}

androidTest.assets.srcDir(androidTestRoomSchemasDir)
}
packagingOptions {
resources {
excludes += ['META-INF/DEPENDENCIES', 'META-INF/NOTICE.md', 'META-INF/INDEX.LIST']
}
}
libraryVariants.configureEach { variant ->
tasks.findByName("kapt${variant.name.capitalize()}Kotlin")?.configure { kaptTask ->
copyRoomSchemasTask.configure { it.mustRunAfter(kaptTask) }
}
tasks.findByName("kapt${variant.name.capitalize()}AndroidTestKotlin")?.configure { kaptTask ->
copyRoomSchemasTask.configure { it.mustRunAfter(kaptTask) }
}
tasks.findByName("merge${variant.name.capitalize()}AndroidTestAssets")?.configure {
it.dependsOn(copyRoomSchemasTask)
}
}

lint {
abortOnError false
Expand All @@ -89,8 +110,8 @@ android {
namespace 'org.cryptomator.data'
}

greendao {
schemaVersion 13
room {
schemaDirectory(roomSchemasDir.path)
}

configurations.all {
Expand All @@ -112,10 +133,14 @@ dependencies {
// cryptomator
implementation dependencies.cryptolib

// greendao
api dependencies.greenDao
// room
implementation dependencies.room
annotationProcessor dependencies.roomCompiler
kapt dependencies.roomCompiler

// dagger
annotationProcessor dependencies.daggerCompiler
kapt dependencies.daggerCompiler
implementation dependencies.dagger

implementation dependencies.jsonWebToken
Expand Down Expand Up @@ -217,6 +242,7 @@ dependencies {
testImplementation dependencies.mockitoInline
testImplementation dependencies.hamcrest

androidTestImplementation dependencies.roomTesting
androidTestImplementation(dependencies.runner) {
exclude group: 'com.android.support', module: 'support-annotations'
}
Expand All @@ -237,4 +263,4 @@ tasks.withType(Test) {

showStandardStreams = false
}
}
}
250 changes: 250 additions & 0 deletions data/room/schemas/org.cryptomator.data.db.CryptomatorDatabase/14.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
{
"formatVersion": 1,
"database": {
"version": 14,
"identityHash": "b8c52ca7bdf9dce0036787a18080b679",
"entities": [
{
"tableName": "CLOUD_ENTITY",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER, `TYPE` TEXT NOT NULL, `ACCESS_TOKEN` TEXT, `ACCESS_TOKEN_CRYPTO_MODE` TEXT, `URL` TEXT, `USERNAME` TEXT, `WEBDAV_CERTIFICATE` TEXT, `S3_BUCKET` TEXT, `S3_REGION` TEXT, `S3_SECRET_KEY` TEXT, `S3_SECRET_KEY_CRYPTO_MODE` TEXT, PRIMARY KEY(`_id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "type",
"columnName": "TYPE",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "accessToken",
"columnName": "ACCESS_TOKEN",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "accessTokenCryptoMode",
"columnName": "ACCESS_TOKEN_CRYPTO_MODE",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "url",
"columnName": "URL",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "username",
"columnName": "USERNAME",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "webdavCertificate",
"columnName": "WEBDAV_CERTIFICATE",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "s3Bucket",
"columnName": "S3_BUCKET",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "s3Region",
"columnName": "S3_REGION",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "s3SecretKey",
"columnName": "S3_SECRET_KEY",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "s3SecretKeyCryptoMode",
"columnName": "S3_SECRET_KEY_CRYPTO_MODE",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"_id"
]
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "UPDATE_CHECK_ENTITY",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER, `LICENSE_TOKEN` TEXT, `RELEASE_NOTE` TEXT, `VERSION` TEXT, `URL_TO_APK` TEXT, `APK_SHA256` TEXT, `URL_TO_RELEASE_NOTE` TEXT, PRIMARY KEY(`_id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "licenseToken",
"columnName": "LICENSE_TOKEN",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "releaseNote",
"columnName": "RELEASE_NOTE",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "version",
"columnName": "VERSION",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "urlToApk",
"columnName": "URL_TO_APK",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "apkSha256",
"columnName": "APK_SHA256",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "urlToReleaseNote",
"columnName": "URL_TO_RELEASE_NOTE",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"_id"
]
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "VAULT_ENTITY",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER, `FOLDER_CLOUD_ID` INTEGER, `FOLDER_PATH` TEXT, `FOLDER_NAME` TEXT, `CLOUD_TYPE` TEXT NOT NULL, `PASSWORD` TEXT, `PASSWORD_CRYPTO_MODE` TEXT, `POSITION` INTEGER, `FORMAT` INTEGER, `SHORTENING_THRESHOLD` INTEGER, PRIMARY KEY(`_id`), FOREIGN KEY(`FOLDER_CLOUD_ID`) REFERENCES `CLOUD_ENTITY`(`_id`) ON UPDATE NO ACTION ON DELETE SET NULL )",
"fields": [
{
"fieldPath": "id",
"columnName": "_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "folderCloudId",
"columnName": "FOLDER_CLOUD_ID",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "folderPath",
"columnName": "FOLDER_PATH",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "folderName",
"columnName": "FOLDER_NAME",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "cloudType",
"columnName": "CLOUD_TYPE",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "password",
"columnName": "PASSWORD",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "passwordCryptoMode",
"columnName": "PASSWORD_CRYPTO_MODE",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "position",
"columnName": "POSITION",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "format",
"columnName": "FORMAT",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "shorteningThreshold",
"columnName": "SHORTENING_THRESHOLD",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"_id"
]
},
"indices": [
{
"name": "IDX_VAULT_ENTITY_FOLDER_PATH_FOLDER_CLOUD_ID",
"unique": true,
"columnNames": [
"FOLDER_PATH",
"FOLDER_CLOUD_ID"
],
"orders": [
"ASC",
"ASC"
],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `IDX_VAULT_ENTITY_FOLDER_PATH_FOLDER_CLOUD_ID` ON `${TABLE_NAME}` (`FOLDER_PATH` ASC, `FOLDER_CLOUD_ID` ASC)"
}
],
"foreignKeys": [
{
"table": "CLOUD_ENTITY",
"onDelete": "SET NULL",
"onUpdate": "NO ACTION",
"columns": [
"FOLDER_CLOUD_ID"
],
"referencedColumns": [
"_id"
]
}
]
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b8c52ca7bdf9dce0036787a18080b679')"
]
}
}
Loading
Loading