我正在使用 couchbase lite 版本android-ee:2.1.2。我将一些数据存储在本地 couchbase lite 数据库中。现在,我正在尝试借助正则表达式查询从本地 couchbase lite 数据库中查询数据,例如,
Query query = QueryBuilder
.select(SelectResult.property("info"))
.from(DataSource.database(localDatabase))
.where(Expression.property("info").regex(Expression.string("^v" + "_" + "(4.6.2|1.7.7)" + "_" + "[123]" + "_" + "[12345678]")));
我的数据库看起来像,
v_1.7.7_1_3
v_1.7.5_1_3
v_4.7.1_2_8
v_4.7.1_1_8
v_4.7.2_2_8
v_4.7.2_2_8
v_4.7.1_1_8
v_4.7.1_2_8
v_4.7.5_1_8
v_4.9.3_1_1
...
...
...
and so on many entries
为了理解数据库结构,让我们举个例子,v_1.7.7_1_3这里v可以定义为一个 just 值,1.7.7是标签然后1是父类(这可以是 1,2 和 3 类型)然后3是子类(这可以是 1,2 类型,3,4,5,6,7 和 8)。
现在用户可以选择多个标签、父类和子类作为选择。然后我必须根据分别选择的参数从本地 couchbase lite 查询数据。目前,正如我上面所说,我正在尝试在正则表达式的帮助下查询数据,
例如,让用户选择标签4.6.2和1.7.7,那么父类是 1,2 和 3,然后是子类 1-8。所以我的查询会像,
"^v" + "_" + "(4.6.2|1.7.7)" + "_" + "[123]" + "_" + "[12345678]"
我已经在https://regex101.com上尝试过这个查询,它运行良好,但不适用于 couchbase lite。
尽管应用程序只是因致命错误而崩溃,
A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 25543 (.mains.activity)
这里有一些日志,
V/Query: Query encoded as {"WHAT":[[".info"]],"WHERE":["regexp_like()",[".info"],"^v_(4.6.2|1.7.7)_[123]_[12345678]"]}
I/LiteCore [Query]: {Query#3}==> N8litecore11SQLiteQueryE 0x7f5a2d9098
I/LiteCore [Query]: {Query#3} Compiling JSON query: {"WHAT":[[".info"]],"WHERE":["regexp_like()",[".info"],"^v_(4.6.2|1.7.7)_[123]_[12345678]"]}
I/LiteCore [Query]: {Query#3} Compiled as SELECT fl_result(fl_value(body, 'info')) FROM kv_default WHERE (regexp_like(fl_value(body, 'info'), '^v_(4.6.2|1.7.7)_[123]_[12345678]')) AND (flags & 1) = 0
A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 28308 (.mains.activity)
胡子哥哥
跃然一笑
相关分类