正则表达式查询带有致命信号11(SIGSEGV)错误

时间:2019-01-28 12:07:40

标签: java android regex couchbase-lite

我使用的是沙发床精简版android-ee:2.1.2。我将一些数据存储在本地couchbase lite数据库中。现在,我正试图借助正则表达式查询(例如,

)从本地榻榻米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可以定义为一个正义值,1.7.7是标记,而1是父类(这可以是类型1,2和3),然后3是子类(可以是类型1,2,3,4,5,6,7和8)。

现在,用户可以选择多个标签,父类和子类作为选择。然后,我必须根据分别选择的参数从本地沙发床lite查询数据。目前,如上所述,我正在尝试使用正则表达式来查询数据,

例如,让用户选择标签4.6.21.7.7,然后父类是1,2和3,然后是子类1-8。所以我的查询就像

"^v" + "_" + "(4.6.2|1.7.7)" + "_" + "[123]" + "_" + "[12345678]"

我已经在https://regex101.com上尝试了此查询,该查询可以正常运行,但不适用于沙发床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)

2 个答案:

答案 0 :(得分:1)

我认为,您的正则表达式查询似乎很好。您可以使用以下单元测试用例进行验证。

transform:scale()

答案 1 :(得分:1)

经过几个小时的研究和研究,我得到了这个。首先,正则表达式查询没有问题,它可以正常工作。

第二个是在检查数据库时,我意识到我要查询数据的信息字段在某些数据库条目中为EMPTY或NULL。所以我在查询中添加了一个条件,

Expression.property("info").notNullOrMissing()

因此,当信息可用时,我将像这样执行正则表达式查询,

.where(Expression.property("info").notNullOrMissing().and(Expression.property("info").regex(Expression.string("^v" + "_" + "(4.6.2|1.7.7)" + "_" + "[123]" + "_" + "[12345678]"))))

它运行正常,没有致命的信号错误或任何其他东西。

注意:-另一件事是我数据库中的信息字段被定义为索引,所以也许我正在查询索引字段中的数据,并且它变为null或为空,这就是导致致命错误的原因信号错误(我仍在搜索,此逻辑是否正确。)