Fixed
Status Update
Comments
yb...@google.com <yb...@google.com>
[Deleted User] <[Deleted User]> #2
That seems quite bad :/ weird.
We have fairly large test projects which do not take anywhere close to it, maybe your code is triggering some bad code path.
Can you provide a sample or share your project with us? It is impossible to do something here unless we have a reproduction case. Might also possibly be related to your machine configuration.
We have fairly large test projects which do not take anywhere close to it, maybe your code is triggering some bad code path.
Can you provide a sample or share your project with us? It is impossible to do something here unless we have a reproduction case. Might also possibly be related to your machine configuration.
ch...@beyls.net <ch...@beyls.net> #3
Let me see what I can do on the reproduction as I am anyways blocked on this. I will try to extract out the DB module in a new project and see if it reproduces the issue.
ro...@gmail.com <ro...@gmail.com> #4
Attaching the sample project. When I run the project through the android studio or even command line, I see the described issue.
Try uncommenting room-compiler dependency from app's build.gradle, it does not have the issue because room compiler is not at work.
Try uncommenting room-compiler dependency from app's build.gradle, it does not have the issue because room compiler is not at work.
ch...@beyls.net <ch...@beyls.net> #5
Did you get a chance to look at it?
[Deleted User] <[Deleted User]> #6
FYI. I see that if I comment out applying google-services plugin (at the end of the app's build.gradle file), that fixes the issue too. Hence, you may need to apply a google-services plugin with a json file to reproduce the issue.
Not sure what is going on but certainly, somethings are not playing well together.
Not sure what is going on but certainly, somethings are not playing well together.
ch...@gmail.com <ch...@gmail.com> #7
Above comment is NOT TRUE, it seems I did not do a code change after commenting out apply google-services plugin. That's why the build passed.
yb...@google.com <yb...@google.com> #8
Thanks for the sample app. I haven't gotten to the bottom of the issue yet but I wanted to give you an update and it does seem indeed that Room is taking a very long time to parse and understand your queries via the ANTLR generated parser that Room uses. I'm not sure what is so special about your queries that is causing this, but I'll comment back with an update once I find out. Sadly for now I don't have a recommendation on a workaround.
ch...@gmail.com <ch...@gmail.com> #9
Alright, I've drill down the problem to being the various "OR <col_name> LIKE '%' : text '%'" in your queries. Specifically they cause the SQLiteParser in Room to go down a path with poor performance as described in https://github.com/antlr/antlr4/issues/1398 . A fix for this involves updating Room's ANTRL runtime library and generated parser code with the latest version. This update will likely be available in Room 2.1.0-alpha02.
mm...@commonsware.com <mm...@commonsware.com> #10
Thanks for the update. Is 2.1.0-alpha02 around the corner?
yb...@google.com <yb...@google.com> #11
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 8e46b9ca1f55b040a18dd86833880b5106d103b2
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Oct 10 19:17:50 2018
Update Room's ANTLR Parser to 4.7.1
Updating to the latest ANTLR version fixes the performance issue
described inhttps://github.com/antlr/antlr4/issues/1398 which affects
Room's SQL Parser since it contains left-recursive rules. Specifically
SQLite.g4 has multiple recursions to describe an expression as defined
inhttps://www.sqlite.org/lang_expr.html , meaning if a user has certain
queries that causes the parser to use the adaptivePredict algorithm
then the build time increases significantly due to Room's query
parsing.
Also bumped Room's version to 2.1.0-alpha02
Bug: 117401230
Test: ./gradlew room:integration-tests:testapp:cC
Change-Id: I4d0799a11ccee816ab209cbf74e7dcf2b2ce1a18
M buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
M buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java
https://android-review.googlesource.com/786077
https://goto.google.com/android-sha1/8e46b9ca1f55b040a18dd86833880b5106d103b2
Branch: androidx-master-dev
commit 8e46b9ca1f55b040a18dd86833880b5106d103b2
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Oct 10 19:17:50 2018
Update Room's ANTLR Parser to 4.7.1
Updating to the latest ANTLR version fixes the performance issue
described in
Room's SQL Parser since it contains left-recursive rules. Specifically
SQLite.g4 has multiple recursions to describe an expression as defined
in
queries that causes the parser to use the adaptivePredict algorithm
then the build time increases significantly due to Room's query
parsing.
Also bumped Room's version to 2.1.0-alpha02
Bug: 117401230
Test: ./gradlew room:integration-tests:testapp:cC
Change-Id: I4d0799a11ccee816ab209cbf74e7dcf2b2ce1a18
M buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
M buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java
zh...@gmail.com <zh...@gmail.com> #12
No concrete date on 2.1.0-alpha02, I want to get a few more bugs in before making the next alpha release. So maybe by the end of the month.
sa...@gmail.com <sa...@gmail.com> #13
--
- Ankit
- Ankit
da...@google.com <da...@google.com>
pa...@gmail.com <pa...@gmail.com> #14
Is FTS now supported in Room?
ap...@google.com <ap...@google.com> #15
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 07f547ca76ad20790b51b52bf969d45b6070295a
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:24:31 2018
Room FTS Support - Annotations
Created Fts3Entity & Fts4Entity annotations to declare a class as an
entity of an FTS table. FTS options are supported through annotation
parameters.
Bug: 62356416
Test: N/A
Change-Id: Ic627e38fd3ee5b1138146c2d1fd69e2a2f1365a1
M room/common/api/current.txt
A room/common/src/main/java/androidx/room/Fts3Entity.java
A room/common/src/main/java/androidx/room/Fts4Entity.java
A room/common/src/main/java/androidx/room/FtsOptions.java
https://android-review.googlesource.com/735152
https://goto.google.com/android-sha1/07f547ca76ad20790b51b52bf969d45b6070295a
Branch: androidx-master-dev
commit 07f547ca76ad20790b51b52bf969d45b6070295a
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:24:31 2018
Room FTS Support - Annotations
Created Fts3Entity & Fts4Entity annotations to declare a class as an
entity of an FTS table. FTS options are supported through annotation
parameters.
Bug: 62356416
Test: N/A
Change-Id: Ic627e38fd3ee5b1138146c2d1fd69e2a2f1365a1
M room/common/api/current.txt
A room/common/src/main/java/androidx/room/Fts3Entity.java
A room/common/src/main/java/androidx/room/Fts4Entity.java
A room/common/src/main/java/androidx/room/FtsOptions.java
ap...@google.com <ap...@google.com> #16
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 94867f06a611c3ada3dc95aa394d9e8485be2db5
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:38:26 2018
Room FTS Support - Processor
Created FtsEntityProcessor to process classes annotated with @FtsEntity.
EntityProcessor & FtsEntityProcessor now implement a common interface
BaseEntityProcessor that will either create the Entity or FtsEntity
value object based on the element annotation. FtsEntity extends Entity
which keep intact most of the Entity class reference around the compiler
code .
Created migration bundle class for FtsEntity to later handle migration.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:integration-tests:testapp:cC
Change-Id: I867635165b7e1dcb37806273c1c097fa4f450408
M room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
M room/compiler/src/main/kotlin/androidx/room/parser/SqlParser.kt
A room/compiler/src/main/kotlin/androidx/room/processor/BaseEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/DatabaseProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FieldProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/processor/RawQueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ShortcutMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ShortcutParameterProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Entity.kt
A room/compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt
A room/compiler/src/main/kotlin/androidx/room/vo/FtsOptions.kt
A room/compiler/src/main/kotlin/androidx/room/vo/LanguageId.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Pojo.kt
M room/compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/BaseFtsEntityParserTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/FieldProcessorTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/Fts3TableEntityProcessorTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/TableEntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
M room/compiler/src/test/kotlin/androidx/room/verifier/DatabaseVerifierTest.kt
M room/compiler/src/test/kotlin/androidx/room/vo/EntityTest.kt
A room/compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/TestDatabase.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/Mail.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/TestDatabase.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MailDao.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/FtsTableTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/TestDatabaseTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/TestUtil.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Mail.java
M room/migration/src/main/java/androidx/room/migration/bundle/EntityBundle.java
A room/migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.java
A room/migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.java
https://android-review.googlesource.com/735153
https://goto.google.com/android-sha1/94867f06a611c3ada3dc95aa394d9e8485be2db5
Branch: androidx-master-dev
commit 94867f06a611c3ada3dc95aa394d9e8485be2db5
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:38:26 2018
Room FTS Support - Processor
Created FtsEntityProcessor to process classes annotated with @FtsEntity.
EntityProcessor & FtsEntityProcessor now implement a common interface
BaseEntityProcessor that will either create the Entity or FtsEntity
value object based on the element annotation. FtsEntity extends Entity
which keep intact most of the Entity class reference around the compiler
code .
Created migration bundle class for FtsEntity to later handle migration.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:integration-tests:testapp:cC
Change-Id: I867635165b7e1dcb37806273c1c097fa4f450408
M room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
M room/compiler/src/main/kotlin/androidx/room/parser/SqlParser.kt
A room/compiler/src/main/kotlin/androidx/room/processor/BaseEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/DatabaseProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FieldProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/processor/RawQueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ShortcutMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ShortcutParameterProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Entity.kt
A room/compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt
A room/compiler/src/main/kotlin/androidx/room/vo/FtsOptions.kt
A room/compiler/src/main/kotlin/androidx/room/vo/LanguageId.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Pojo.kt
M room/compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/BaseFtsEntityParserTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/FieldProcessorTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/Fts3TableEntityProcessorTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/TableEntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
M room/compiler/src/test/kotlin/androidx/room/verifier/DatabaseVerifierTest.kt
M room/compiler/src/test/kotlin/androidx/room/vo/EntityTest.kt
A room/compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/TestDatabase.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/Mail.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/TestDatabase.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MailDao.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/FtsTableTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/TestDatabaseTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/TestUtil.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Mail.java
M room/migration/src/main/java/androidx/room/migration/bundle/EntityBundle.java
A room/migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.java
A room/migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.java
ap...@google.com <ap...@google.com> #17
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 82c5c2d2588cb443aa44ebdf9549a3945aac7153
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Tue Aug 21 11:28:45 2018
Room FTS Support - BaseEntityProcessor Rename
Rename BaseEntityProcessor to EntityProcessor. This is done in a
separate commit than the renaming of EntityProcessor to
TableEntityProcessor so that we don't lose git history and it properly
shows as a rename and not an add / remove change.
Bug: 62356416
Test: N/A
Change-Id: I8f7f7e3d64453856cd062a956203b89ed1450cc5
M room/compiler/src/main/kotlin/androidx/room/processor/EntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Pojo.kt
https://android-review.googlesource.com/735894
https://goto.google.com/android-sha1/82c5c2d2588cb443aa44ebdf9549a3945aac7153
Branch: androidx-master-dev
commit 82c5c2d2588cb443aa44ebdf9549a3945aac7153
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Tue Aug 21 11:28:45 2018
Room FTS Support - BaseEntityProcessor Rename
Rename BaseEntityProcessor to EntityProcessor. This is done in a
separate commit than the renaming of EntityProcessor to
TableEntityProcessor so that we don't lose git history and it properly
shows as a rename and not an add / remove change.
Bug: 62356416
Test: N/A
Change-Id: I8f7f7e3d64453856cd062a956203b89ed1450cc5
M room/compiler/src/main/kotlin/androidx/room/processor/EntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Pojo.kt
ap...@google.com <ap...@google.com> #18
Project: platform/frameworks/support
Branch: androidx-master-dev
commit ff5d15a5e9aca547eb6a6756fb11aec0186e6a64
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:42:42 2018
Room FTS Support - InvalidationTracker
Updated InvalidationTracker to support adding triggers to FTS shadow
tables based on a lookup map provided. This enables reactive return
types for virtual table entities such as FTS.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:room-runtime:test \
room:integration-tests:testapp:cC
Change-Id: Ib8b2ac7b72e7ad6e170043b57035cf91f052ddf9
M room/compiler/src/main/kotlin/androidx/room/writer/DatabaseWriter.kt
M room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/LiveDataQueryTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/RxJava2Test.java
M room/runtime/src/main/java/androidx/room/InvalidationTracker.java
M room/runtime/src/test/java/androidx/room/InvalidationTrackerTest.java
https://android-review.googlesource.com/735154
https://goto.google.com/android-sha1/ff5d15a5e9aca547eb6a6756fb11aec0186e6a64
Branch: androidx-master-dev
commit ff5d15a5e9aca547eb6a6756fb11aec0186e6a64
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:42:42 2018
Room FTS Support - InvalidationTracker
Updated InvalidationTracker to support adding triggers to FTS shadow
tables based on a lookup map provided. This enables reactive return
types for virtual table entities such as FTS.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:room-runtime:test \
room:integration-tests:testapp:cC
Change-Id: Ib8b2ac7b72e7ad6e170043b57035cf91f052ddf9
M room/compiler/src/main/kotlin/androidx/room/writer/DatabaseWriter.kt
M room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/LiveDataQueryTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/RxJava2Test.java
M room/runtime/src/main/java/androidx/room/InvalidationTracker.java
M room/runtime/src/test/java/androidx/room/InvalidationTrackerTest.java
ap...@google.com <ap...@google.com> #19
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 8cce609814cb86d4a5ddeafefc07f7a0d07b841a
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:58:55 2018
Room FTS Support - Migration
Added fts entity migration validator that uses the sql create statement
for validation. This is necessary since fts options are not stored in
any public metadata table nor are available through any known pragma.
Created a FtsTableInfoValidatorWriter that will generate the code that
uses FtsTableInfo to get the create sql from sqlite_master so that FTS
options can be parsed and compared. TableInfoValidationWriter and
FtsTableInfoValidatorWriter now implement a common interface named
ValidationWriter that counts statement to be written.
Added a TypeAdapterFactory to SchemaBundle's GSON instance so that both
FtsEntityBundle and EntityBundle can be deserialized from the schema
json file.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:integration-tests:testapp:cC
Change-Id: I34c4d0206ef75f47e1541f7c1f0543c0f2b1e853
M room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt
M room/compiler/src/main/kotlin/androidx/room/vo/FtsOptions.kt
A room/compiler/src/main/kotlin/androidx/room/writer/FtsTableInfoValidationWriter.kt
M room/compiler/src/main/kotlin/androidx/room/writer/SQLiteOpenHelperWriter.kt
M room/compiler/src/main/kotlin/androidx/room/writer/TableInfoValidationWriter.kt
A room/compiler/src/main/kotlin/androidx/room/writer/ValidationWriter.kt
M room/compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/1.json
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/2.json
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/FtsMigrationTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/FtsTableTest.java
M room/migration/src/main/java/androidx/room/migration/bundle/SchemaBundle.java
A room/runtime/src/main/java/androidx/room/util/FtsTableInfo.java
A room/runtime/src/test/java/androidx/room/util/FtsTableInfoTest.java
M room/testing/src/main/java/androidx/room/testing/MigrationTestHelper.java
https://android-review.googlesource.com/735155
https://goto.google.com/android-sha1/8cce609814cb86d4a5ddeafefc07f7a0d07b841a
Branch: androidx-master-dev
commit 8cce609814cb86d4a5ddeafefc07f7a0d07b841a
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Aug 20 13:58:55 2018
Room FTS Support - Migration
Added fts entity migration validator that uses the sql create statement
for validation. This is necessary since fts options are not stored in
any public metadata table nor are available through any known pragma.
Created a FtsTableInfoValidatorWriter that will generate the code that
uses FtsTableInfo to get the create sql from sqlite_master so that FTS
options can be parsed and compared. TableInfoValidationWriter and
FtsTableInfoValidatorWriter now implement a common interface named
ValidationWriter that counts statement to be written.
Added a TypeAdapterFactory to SchemaBundle's GSON instance so that both
FtsEntityBundle and EntityBundle can be deserialized from the schema
json file.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:integration-tests:testapp:cC
Change-Id: I34c4d0206ef75f47e1541f7c1f0543c0f2b1e853
M room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt
M room/compiler/src/main/kotlin/androidx/room/vo/FtsOptions.kt
A room/compiler/src/main/kotlin/androidx/room/writer/FtsTableInfoValidationWriter.kt
M room/compiler/src/main/kotlin/androidx/room/writer/SQLiteOpenHelperWriter.kt
M room/compiler/src/main/kotlin/androidx/room/writer/TableInfoValidationWriter.kt
A room/compiler/src/main/kotlin/androidx/room/writer/ValidationWriter.kt
M room/compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/1.json
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/2.json
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/FtsMigrationTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/FtsTableTest.java
M room/migration/src/main/java/androidx/room/migration/bundle/SchemaBundle.java
A room/runtime/src/main/java/androidx/room/util/FtsTableInfo.java
A room/runtime/src/test/java/androidx/room/util/FtsTableInfoTest.java
M room/testing/src/main/java/androidx/room/testing/MigrationTestHelper.java
ap...@google.com <ap...@google.com> #20
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 641db546c6439004e83fb393e6ee5d2b6cf7b193
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Thu Aug 30 15:05:50 2018
Room FTS Support - External Content
Support the content= FTS option in external content mode only. This
option allows users to specify another @Entity class in the FTS
annotation. The specified entity table will be used as content instead
of the FTS table creating its own content table.
To keep tables in sync as recommended by the SQLite documentation, Room
creates sync triggers so that all write operations are only done in the
reference table, avoiding bad indexed data in the FTS table due to the
user not performing write operations in both tables.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:room-migration:test \
room:integration-tests:testapp:cC
Change-Id: I26073295193618b211cc48e30aa8824b5130ed8e
M room/common/src/main/java/androidx/room/Fts4Entity.java
M room/compiler/src/main/kotlin/androidx/room/processor/DatabaseProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt
M room/compiler/src/main/kotlin/androidx/room/vo/FtsOptions.kt
M room/compiler/src/main/kotlin/androidx/room/writer/FtsTableInfoValidationWriter.kt
M room/compiler/src/main/kotlin/androidx/room/writer/SQLiteOpenHelperWriter.kt
M room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
M room/compiler/src/test/kotlin/androidx/room/processor/DatabaseProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
M room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/1.json
M room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/2.json
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/3.json
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/4.json
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/FtsTestDatabase.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/SongDao.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/FtsMigrationTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/FtsTableTest.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Song.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/SongDescription.java
M room/migration/build.gradle
M room/migration/src/main/java/androidx/room/migration/bundle/DatabaseBundle.java
M room/migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.java
M room/migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.java
M room/migration/src/main/java/androidx/room/migration/bundle/SchemaBundle.java
A room/migration/src/test/java/androidx/room/migration/bundle/DatabaseBundleTest.java
M room/runtime/src/main/java/androidx/room/RoomOpenHelper.java
M room/runtime/src/main/java/androidx/room/util/DBUtil.java
https://android-review.googlesource.com/742701
https://goto.google.com/android-sha1/641db546c6439004e83fb393e6ee5d2b6cf7b193
Branch: androidx-master-dev
commit 641db546c6439004e83fb393e6ee5d2b6cf7b193
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Thu Aug 30 15:05:50 2018
Room FTS Support - External Content
Support the content= FTS option in external content mode only. This
option allows users to specify another @Entity class in the FTS
annotation. The specified entity table will be used as content instead
of the FTS table creating its own content table.
To keep tables in sync as recommended by the SQLite documentation, Room
creates sync triggers so that all write operations are only done in the
reference table, avoiding bad indexed data in the FTS table due to the
user not performing write operations in both tables.
Bug: 62356416
Test: ./gradlew room:room-compiler:test \
room:room-migration:test \
room:integration-tests:testapp:cC
Change-Id: I26073295193618b211cc48e30aa8824b5130ed8e
M room/common/src/main/java/androidx/room/Fts4Entity.java
M room/compiler/src/main/kotlin/androidx/room/processor/DatabaseProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt
M room/compiler/src/main/kotlin/androidx/room/vo/FtsOptions.kt
M room/compiler/src/main/kotlin/androidx/room/writer/FtsTableInfoValidationWriter.kt
M room/compiler/src/main/kotlin/androidx/room/writer/SQLiteOpenHelperWriter.kt
M room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
M room/compiler/src/test/kotlin/androidx/room/processor/DatabaseProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/Fts4TableEntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
M room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/1.json
M room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/2.json
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/3.json
A room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.FtsMigrationTest.FtsMigrationDb/4.json
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/FtsTestDatabase.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/SongDao.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/FtsMigrationTest.java
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/FtsTableTest.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Song.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/SongDescription.java
M room/migration/build.gradle
M room/migration/src/main/java/androidx/room/migration/bundle/DatabaseBundle.java
M room/migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.java
M room/migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.java
M room/migration/src/main/java/androidx/room/migration/bundle/SchemaBundle.java
A room/migration/src/test/java/androidx/room/migration/bundle/DatabaseBundleTest.java
M room/runtime/src/main/java/androidx/room/RoomOpenHelper.java
M room/runtime/src/main/java/androidx/room/util/DBUtil.java
[Deleted User] <[Deleted User]> #22
Hi, I have a problem with the Fts4 annotation, when I mark the Entity class with the Fts4 annotation, my binding classes are not generated
yb...@google.com <yb...@google.com> #23
can you please file a new bug with more details on what is wrong with it?
A sample app that reproduces would make it much better.
Thanks.
A sample app that reproduces would make it much better.
Thanks.
sr...@gmail.com <sr...@gmail.com> #24
Hi,
Is there an example to show how how to use this in an entity? I was trying to look for test code which could help but did not find any annotation usage.
thanks
Is there an example to show how how to use this in an entity? I was trying to look for test code which could help but did not find any annotation usage.
thanks
sr...@gmail.com <sr...@gmail.com> #25
I found the example in 'SongDescription' class, I also tried it, it works for me.
thanks a lot!!
thanks a lot!!
yb...@google.com <yb...@google.com> #26
We are updating the docs so should be available soon.
Meanwhile, the FTS integration test class might give some directions:
https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/FtsTableTest.java
Meanwhile, the FTS integration test class might give some directions:
da...@gmail.com <da...@gmail.com> #27
#25 can you post a link to the "SongDescription" class you're talking about? Can't find it anywhere :-(
xm...@gmail.com <xm...@gmail.com> #30
When support icu Tokenizer?
to...@gmail.com <to...@gmail.com> #31
Is there any plan support icu tokenizer?
ji...@gmail.com <ji...@gmail.com> #32
It seems that the icu tokenizer is still not supported in version 2.2.1
Description
Version used: 1.0.0-alpha2
Devices/Android versions reproduced on: N/A
Room does not currently support FTS3 or FTS4 virtual tables. These tables are however supported by all Android versions.
Example SQL statement to create one of those tables:
CREATE VIRTUAL TABLE event_titles USING FTS3(title TEXT, subtitle TEXT);
I suggest adding a parameter to the @Entity annotation. Example:
@Entity(tableName = "event_titles", tableType = FTS3)
Those tables only support String columns, in addition to the integer primary key. This can be enforced by Room at compile time.
Then, a DAO can query these columns using full-text search:
@Query("SELECT * FROM event_titles WHERE title MATCH :word")
List<Event> findEvents(String word);